Сейчас посмотрел, у меня в редакторе кровь не показывает, хотя в игре всё в порядке. Давно я с ней работал. Вроде и в редакторе у меня показывало. Может, её видимость включить где-то надо, не помню.
Во первых с тенями вертекс колор не имеет ни чего общего, тени явление динамическое, и накладываются в зависимости от направления и характера источников света
Ага. И какая доля источников света в Скайриме даёт тени? Да и качество этих теней... К сожалению, игровой движок не воспроизводит реального освещения, а только ИМИТИРУЕТ его. Именно поэтому на текстурах тел НАРИСОВАНЫ тени. И именно поэтому VertexColors использован для скал именно для рисования там теней. В этом нетрудно убедиться, посмотрев, какие именно участки моделей темнее, а какие светлее. Так что, прошу не заносить меня в список тех, кто далёк от истины
Aksyonov, В Скайриме свет нечестный. Это не освещение, а только имитация его. Разные источники имеют разную степень правдоподобности. Так, там есть источники, которые дают тени, но они сильно грузят компьютер и правдоподобны только до некоторой степени. Остальные источники света не дают теней и их нельзя экранировать. Точно так же и дождь не приспособлен для создания "теней". Он вообще, как я помню, идёт только вокруг наблюдателя, а дальше его нет. Для того, чтобы показать лучи света или области капающей воды, в Скайриме используются специальные объекты - лучи и столбы капели. Лучам можно установить расписание дневного света.
{This is a temp script to get the art working right for the flame atronach.} ;===============================================
import utility import form
;===============================================
Actor selfRef VisualEffect Property AtronachFlameTrail Auto Armor Property AtronachFlameDeadSkin Auto EffectShader Property AtronachFlameDeathFXS Auto EffectShader Property AtronachUnsummonDeathFXS Auto explosion property AtronachFlameDeathExplosion auto int atronachHealth
Event OnEffectFinish(Actor akTarget, Actor akCaster) AtronachFlameTrail.Stop(selfRef) ENDEVENT
EVENT onDying(actor myKiller) atronachHealth = selfRef.GetAV("Health") as int if atronachHealth > 0 ; debug.trace("flame health > 0") AtronachFlameTrail.Stop(selfRef) AtronachUnsummonDeathFXS.Play(selfRef) elseIf atronachHealth <= 0 wait(3.0) ; debug.trace("flame health <= 0") AtronachFlameDeathFXS.Play(selfRef) wait(0.5) selfRef.placeAtMe(AtronachFlameDeathExplosion) wait(0.1) AtronachFlameTrail.Stop(selfRef) selfRef.EquipItem(AtronachFlameDeadSkin) wait(1) AtronachFlameDeathFXS.Stop(selfRef) endif ENDEVENT
При смерти атронаха происходит его взрыв и смена скина на скин мёртвого атронаха. Проблема в том, что скрипт работает только в том случае, если атронаху установлен фиксированный уровень. Если же я ставлю ему галку повышать уровень вместе с уровнем игрока, то этот скрипт не работает: не происходит взрыва и смены скина. Скорее всего это связано с событием onDying. Что там за особенности такие, если уровень персонажа автоповышается? Зачем там проверяется: atronachHealth = selfRef.GetAV("Health") as int if atronachHealth > 0 ?
Lantainiell, можно с помощью Tes5Edit убрать из того мода все упоминания касающиеся Аргониан, тогда он будет работать только на каджитов. Соответственно, из другого мода убрать упоминания каджитов. Будут два раздельных мода, которые делают вместе то, что надо. А объединение их после этого - отдельная более сложная задача.
regik5, в ветке "Справочник по редактору" указана строка в ИНИ-файле редактора, которая позволяет это делать. Не буду переписывать, чтобы не было "испорченного телефона"
- specular map (_m) - карта бликов, она просто как глянец накладывает. Используется в соответствующих моделях для стекол, металла .. По сути ее можно использовать вместо блеска альфа-канала в картах нормали, эффект во многом схож.
В Скайриме совместно с картой specular map обычно используется карта нормалей без альфа-канала, т.е. там это просто замена альфа-каналу карты нормалей.
Ещё. Для имитации рефракции на прозрачных поверхностях карту нормалей используют ВМЕСТО диффузной текстуры. Разумеется, при установленном шейдерном флаге рефракции. В таких моделях карта нормалей установлена 2 раза
О толстой и тонкой моделях брони. В Скайриме броня обычно представлена двумя моделями armor_0.nif и armor_1.nif для тонкого и толстого тел, соответственно. Но бывают случаи, когда обе модели не различаются. Например, одни и те же наплечники или сапоги могут подходить к обоим моделям тел. Как поступить в этом случае? Большинство мододелов в этом случае выкладывают два экземпляра одной и той же брони под двумя разными (armor_0.nif и armor_1.nif ) названиями. Пользователь должен два раза скачивать одно и тоже. С другой стороны, иногда (и это распространено в ванильной игре для шлемов, например) выкладывается только вариант _1.nif и именно он указывается как файл брони в редакторе. Нужно ли выкладывать две одинаковые модели? Я решил это проверить экспериментально и получил странные результаты. Положил от брони и сапог только armor_1.nif и boots_1.nif. Для тела с весом 0 одевается и то и другое, но показываются только сапоги! Так что, наблюдается дискриминация по типу брони. Дело поправляется, если назвать файлы брони и сапог armor.nif и boots.nif, т.е. убрать окончания _0 или _1. Кто-нибудь знает об этом что-то более определённое? Для существующего у меня Скайрима и набора модов я могу класть только один экземпляр, если обе модели одинаковы. Но не нарушится ли это при других условиях?
Цитата anton
Я сам когда то написал программку, позволяющую автоматически перенатянуть одежду на любое другое скайримовское тело.
Ты титан! Но автомат будет автоматически ухудшать эстетическое качество брони. Ведь у хорошей брони даже скининг во многом выполнен вручную с учётом того, как должны двигаться реальные части брони, а не гнуться вместе с телом.
Изменение репутации для пользователя Myprism
MyprismOffline
Сообщение №1000
| Тема: Вопросы по моделированию
написано: 19 декабря 2014, 07:29
| Отредактировано: Myprism - 19 декабря 2014, 07:29
Как игрой просчитывается морфинг модели. Загружает она в память оба варианта _0 и _1 или только модель_0, если ползунок морфа установлен не на максимуме.
Легко проверить, если у одной из моделей нарушена топология (порядок вертексов) по отношению к другой. Если тело имеет полноту 0 или 100 - всё будет отлично. Если любую промежуточную - каша вертексов. Это значит, что если полнота 0 или 100, то грузится только одна модель, если промежуточное значение, то ОБЕ. Грузятся обе, но одинаковая топология нужна потому, что дальше будет рассчитываться средне в соответствии с весом промежуточные значения каждого вертекса. Т.е. будет построена промежуточная модель, но только одна.
А вот подобный вопрос: А что будет (не проверял ) если у разных по весу моделей не совпадает текстурная развёртка? Тоже будет поставлена средняя?
Партишин у меня везде только один и все слоты всегда прописаны.
anton, автоматическая утилита подгонки одной формы по другой может быть несомненно полезна вот в каком случае: есть некий обтягивающий тело комбинезон со своей разбивкой на треугольники и своей текстурой, а его надо натянуть на другое тело. В этом случае задача сильно упрощается. Одновременно, это самый сложный случай для ручной подгонки, так как для комбинезонов требуется более точная подгонка, чем обычной брони.
anton, спасибо. Сейчас понятно, пошёл дальше копать
Добавлено (07 Октября 2014, 14:27) --------------------------------------------- Ну, всё получилось Сделал одёжку (всего лишь кольчугу) в двух размерах, скопировал на неё развесовку и экспортировал в НИФ. В общем, получил все необходимые мне операции. Для комфортной работы не хватало хорошего описания и организации файлов. Просто сложил всё в одном месте, вместо командной строки приготовил БАТ-ники. Ещё, нужно иметь заготовку проекта с телом и скелетом. Затык у меня был в двух местах: 1. Я редактировал броню в блендере и только после этого накладывал на неё развесовку и экспортировал. Получалась ерунда с числом вертексов. При экспорте в OBJ их число другое. Выходит, накладывать веса и экспортировать надо сразу после импорта. Но скорее всего, я просто ещё не умею управлять всеми опциями экспорта. 2. Мне нельзя было терять текстурную сетку, так как я использовал ту же развёртку, которую имеет тело. Но редактирование с объединением вертексов и последующим экспортом в OBJ полностью нарушает текстурную развёртку. Помог экспорт в 3ds-файл. После него мне понадобилось чуть поправить текстурную сетку только в тех местах, которые я редактировал.
Добавлено (15 Декабря 2014, 07:44) --------------------------------------------- anton, а нельзя ли выложить утилиты для работы с Vertex Colors? Дело в том, что их нельзя экспортировать/импортировать через OBJ А необходимость периодически возникает. Намедни редактировал тело огненного атронаха, так пришлось вручную в НИФскопе нескольким сотням вертексов цвета ставить Ещё это совершенно необходимо для редактирования скал. Из-за слишком большого числа вертексов (несколько тысяч) пришлось отказаться от редактирования антуража Небесной Кузни.
Добавлено (20 Декабря 2014, 08:14) --------------------------------------------- anton, а на чём ты программировал EXE-шники? Как узнал спецификацию NIF-а?
Добавлено (20 Декабря 2014, 11:54) --------------------------------------------- Ещё возможен такой алгоритм очистки списка названий. Вручную реализуется так: 1. Запоминаем названия всех узлов кроме корневого. Нужно запоминать только названия нитришейпов. 2. Удаляем привязку к костям и все кости. 3. Ставим число названий в списке 1 (пропадут все, кроме корневого узла) 4. Забиваем вручную число и названия нитришейпов (если их всего один, то всё совсем просто ) 5. Сохраняем ниф и инжектируем туда скин. В этом случае в таблице будут только названия всех нитришейпов и всех костей, но по одному разу По-видимому, этот алгоритм лучше всего встроить в SkinInjector. Это полезно ещё и потому, что тогда инжектирование будет происходить в чистую модель. Я до конца не разобрался, но, похоже, что если модель не очистить от старых костей и скина, то инжектирование происходит иначе, чем в чистую модель.
Вожусь сейчас с преломлением и возникла куча сложных вопросов. Но, может, кто и подскажет что. Преломление делается так: карта нормалей ставится модели и вместо диффузной текстуры и вместо нормальной и устанавливается шейдерный флаг рефракция. Преломление имитируется при этом некоторым образом, и если не влезать в детали, то довольно сносно. Но мне как раз нужно влезть в детали. Задача такая: вписал внутрь женского тела скелет, честно вписал. Теперь нужно сделать прозрачное тело вокруг него. Посмотрел в игре, довольно забавно получается. Но вылезли вопросы. Буду копать сам и дальше, но, может, кто и подскажет. Главная проблема - неизвестность точной математической формулы, как работает шейдер рефракции.
1. Зачем карта нормалей ставится в 2 текстурных слота - и вместо диффузной и и вместо нормальной текстуры? Ведь для расчёта эффекта она нужна только один раз.
2. У меня преломляющая модель отвечает только за преломление. За цвет и блеск поверхности отвечает другая. Это так и должно быть, что преломляющую модель можно настроить только на преломление, или я не умею настраивать?
3. Неожиданно выяснилось, что модель тела великолепно преломляет в виде сзади (в направлении Y). Так, что хоть законам оптики учись. Но в виде спереди преломление почти отсутствует. Разумеется, мелкие детали карты нормалей преломляют правдоподобно, проблемы только в больших деталях, таких, как объём самого тела. Раз столкнулся с такой анизотропией, то стал копать дальше. Оказалось, что если в фотошопе у карты нормалей инвертировать красный канал (отвечает за компоненту Х нормальных векторов), то преломление становится хорошим спереди, но сзади ухудшается. Обнаружилась анизотропия эффекта - вдоль оси Y, но инвертирование канала Y (синий) видимого эффекта не дало. Так вот тут, похоже, происходит взаимодействие нормалей модели (вертексных) с нормалями карты нормалей, причём, возникает их компенсация в некоторых (Y) направлениях. И тут возникает более общий вопрос: Как складываются нормали вертексов с нормалями карты нормалей? Можно ли сделать преломление только поверхностью треугольников модели, а не картой нормалей? Как управлять сложением вертексных нормалей с текстурными? Похоже, что для реализации правильного преломления нужна не карта нормалей. Она только похоже работает, но на самом деле, требуется специальная карта нормалей для преломления, в которой содержатся только локальные неровности, а не вся форма, как это делают в моделях тел.
Добавлено (30 Декабря 2014, 06:11) --------------------------------------------- Ну вот, уже сам начинаю отвечать, может кому пригодится Оказалось, что для реализации преломления текстуры совсем не нужны То "качественное" преломление, которое мне понравилось, рассчитывается только на основании формы тела. А вот преломление за счёт карты нормалей установленной в слот карты нормалей СКЛАДЫВАЕТСЯ с преломлением тела. А в карте нормалей тела заложена форма тела, которая в одном направлении добавляется с противоположным знаком. Т.е. для правильной работы карты нормалей в преломлении, в ней должны быть только локальные неровности, но не форма тела.
Изменение репутации для пользователя Myprism
MyprismOffline
Сообщение №1006
| Тема: Вопросы по моделированию
написано: 30 декабря 2014, 09:43
| Отредактировано: Myprism - 30 декабря 2014, 10:23
anton, это войдёт в обновление Небесного Замка. Собственно говоря, уже вошло. У меня там система смены тел одеванием соответствующего кольца. Можно выбрать UNP, DG, LB. Соответственно добавил сейчас вот эти скелетики для тел DG и UNP. Эти тела похожи и различаются только в мягких местах, так что я мог для них ограничиться изготовлением только одного скелета на все случаи жизни. Отдельными модами не выкладываю. Дело в том, что для такого тела нужна только броня, которая одевается ПОВЕРХ тела, а не подменяет его. В Замке у меня как раз вся броня переделана в такую и туда эти тела великолепно вписываются, а вот без Замка людям не будет проку от этих тел. Замок стал слишком большой, поэтому я не выкладываю его обновления часто. Вот и сейчас разрываюсь между желанием выложить обновление перед Новым Годом и желанием доделать туда что-то ещё Там у меня ещё возникла проблема со скинингом кистей рук, но это я отпишу в ветку с утилитами экспорта/импорта.
anton, у меня возникла проблема со скинингом кистей рук. Я сделал кисть руки женского скелета так, что все косточки в блендере лежат внутри пальцев. Но мне нужна развесовка по костям. Поступил просто: взял из твоего примера кисти рук и отскинил по ним. Но в игре мои "пальцы" оказались чуть ли не в 2 раза длиннее и не помещаются в человеческой кисти руки. Понятно, что со скинингом что-то не то, так как в блендере там всё прекрасно помещается и в кисть UNP и в кисть DG. Тогда я беру кисть DG и импортирую её развесовку в Блендер. Использую её как образец для скининга. После этого в игре всё становится нормально, пока рука висит. Но если её сжать в кулак, то пальцы протыкают ладонь и вылезают с её тыльной стороны. Что-то тут не так с костями и это сказывается на экспорте. Ведь экспорт тоже использует скелет. Ты там ничего с костями пальцев не намудрил?
anton, чтобы учесть коэффициент 0.85 для женских рук, можно копировать развесовку с уже готовых рук, но при экспорте надо сохранить старые (уже имеющиеся с коэффициентом 0.85) привязки к костям руки. Я бы перенёс положения и углы костей вручную, но их 38 и их трудно идентифицировать Кстати, почему бы не ввести опцию сохранения привязки к костям от образцовой модели?
NdeB, посмотри скрипт, установленный на огненном атронахе. Посмотри моё сообщение двумя выше. Там использовано событие onDying. С ним у меня возникают проблемы. Если уровень персонажа высок, скрипт не работает. Но в папирусе есть и другое событие - onDeath. С ним (убрав проверки на здоровье) у меня всё работает отлично. Просто не понимаю, зачем там эти заморочки с проверками на здоровье в случае использования onDying. Умерла так умерла
anton, хорошо, что я не успел вручную параметры костей забить Спасибо! А почему там два файла? Почему ты думаешь, что может потребоваться ещё и коэффициент 0.86? Экспериментально я это проверить не смогу, так как вряд ли замечу разницу визуально.
Добавлено (01 Января 2015, 23:07) --------------------------------------------- Попробовал новую утилиту. Получил странный результат. Всё, что касалось пальцев - отлично, уменьшились как надо. Но вот верхние фаланги, которые относятся к кости Hand - остались увеличенными. Но кисть у меня состоит из скелетной кисти и прозрачной человеческой. Так вот, человеческую я не изменял, но когда скопировал ей нитришейп в общий НИФ, то получил совсем странный результат - рука искажена и распухли верхние фаланги относящиеся к кости Hand. А вот этого совсем не должно быть, так как модель и её скининг не менялись. А это уже значит, что новый вариант утилиты меняет не только привязки костей, но и сами кости. Проверил, так и есть. Кости после утилиты не те, что были в оригинале. Похоже, что скининг теперь делается правильно, если модель поставить на старые неизменённые кости.
ololo228, для создания торговца надо выполнить несколько условий. Нарушение любого из них приведёт к тому, что торговать он не будет. Чтобы найти причину, надо сравнить своего торговца с ванильным и найти различие.
anton, да, та моя проблема связана именно с оставлением нодов. И, как раз, это выглядело как втягивание по оси Х. Сейчас, удалив весь скининг и кости я получаю для костяной кисти точно такой же результат, как у тебя. Но есть ещё маленькая проблема. Это, скорее всего, то, что заставило тебя сделать утилиту с коэффициентом 0.86. Дело в том, что отскиненная костяная кисть не совсем вписывается в родную. Как раз, она оказывается чуть-чуть меньше. Но если отскинить и человеческую кисть, то всё вписывается правильно. Т.е. модель кисти (человеческой) загруженная в Блендер и отскиненная заново (из твоего примера) не совпадает с оригинальной, а оказывается чуть-чуть меньше. Почему? Вроде, этого быть не должно. Ведь это означает, что родная кисть отскинена иначе, по другому алгоритму. В оригинальную кисть лучше вписывается костяная с коэффициентом 0.86. С анимацией всё в порядке.
anton, у меня там НИФ не простой там для обеих моделей стоит один и тот же набор NitriShapeData и, хотя DismemberSkinInsnance и разные, у них стоит общий (один и тот же) NiSkinData В любом случае, теперь утилиты позволяют справиться с женскими руками. Можно или коэффициент 0.86 поставить или отскинить руки, тогда соответствие всех моделей в руках вообще идеальное.
anton, а ведь по описанию алгоритма получается, что новая утилита, это не утилита для скининга кистей только, а универсальная утилита скининга для женского тела? Ведь всё, что кроме пальцев рук и того, откуда они растут, имеет масштаб 1.