×
Меню
Индекс

Текстурный эффект Создание правильного призрака

Это метод позволяет создавать "правильных" привидений.
Такими, как их делают в более современных играх.
Если в Морровинде - модель призрака получала свою "призрачность" только через наличие прозрачности (альфа свойств).
То в более новых играх, в Обливе в т.ч. призрачность объекта создавалась за счет эффектов...
Да, которые приписаны, как шейдеры, но по сути... это все тот же текстурный эффект, только специально проецируемый на поверхность!
Собственно, достаточно изучив текстурные эффекты, мы вполне можем "повторить" поведение "шейдеров" на уровне текстурных эффектов!
Все дело в проекции текстуры и немного в билбордах!
А сам по себе метод, прост и не затратен по ресурсам.
 
Метод был "открыт" в 2022ом, но доведен до ума в 2023, по осени.
На Нехухе можно поискать плагин Sprite of Creatures.
https://www.nexusmods.com/morrowind/mods/53500
Или посмотреть модели Симфонии 1.8.
https://www.nexusmods.com/morrowind/mods/43790
Также, см.
https://www.nexusmods.com/morrowind/mods/52263
Где эти и, более сложные модели представлены в ассортименте!
 
И так поехали клепать спиритических сущностей!
Для примера, возьмем модель алита.
R\XDuskyAlit.nif как обычно берем Хниф файл.
 
Примечание.
Найдите, или создайте прозрачную черную текстуру для "тела" призрака.
Т.е. чистый черный фон и полностью прозрачная альфа в альфа канале, размер 64х.
А также, простой градиент для текстурного эффекта.
Градиент для эффекта.
Да, достаточно одной полоски по правому краю текстуры, плавно уходящей в уровни черного.
Яркость - по вкусу. Чем темнее, тем призрак будет "призрачнее".
Яркий цвет сделает из призрака "неоновую рекламу", что впрочем уместно для электрических "аномалий" странных двемерских.
Текстура для тела.
Размер текстуры не критичен, но, чем меньше тем лучше для фпс.
 
 
 
+ минус сетка тени и вертексколор свойства.
Для начала подготовим его.
Поскольку у нас будет практически прозрачное существо, то имеет смысл, упростить себе задачу для перемещения его в сцене редактора.
А также, мы можем сделать его и вовсе "безтелесным"!
Т.е. плашка с именем объекта не будет появляться вовсе!
 
Для этого, добавим в модель алита, маркер (можно взять из модели маркера).
Не забываем добавить экстрадату МРК!
И сменим тип ноды в которой находятся сетчатые оболочки, на niCollisionSwitch флаг 8.
 
Если захочется чего-то еще более занятно, то поместить "тело" алита в ЛодНоду.
Так призрак будет возникать на указанном (здесь) расстоянии от игрока.
Пускай будет 0-1024 (один уровень)
Сурприз, да!
 
ЛодНода - не должна иметь имени, иначе есть риск нарушить работу анимации.
Это не в файле алита, но в каком-то другом файле, такое может произойти.
 
И еще, если не хотите чтобы тело призрака оставалось лежать после эээ его кончины и не хотите добавлять скрипт ifOndeath=1 Disable, то посмотрите в сторону добавления контроллера невидимости.
Так чтобы тело исчезало посредством анимаций.
Настроить его будет не сложно, тайминги завершения анимации кончины можно найти в KF файле существа.
Такой контроллер невидимости, размещаем либо на сетку, либо на корень скелета, т.к. видимые сетки крепятся к нему.
Здесь он помещен на Bip01, это скроет сразу все что надо.
 
Ах да!
Здесь у алита есть "тень"!
Т.е. сетчатая поверхность tri Shadow.
Призраку, она вряд ли будет нужна - удаляем!

Равно как и niVertexColorProperties, они тут лишниее.
 
На этом предварительную подготовку можно считать законченной!
Переходим к Вкусному!
 
Создаем пустую ноду.
В нее помещаем еще одну простую niNode.
И уже в эту ноду, помещаем БилБорд ноду флаг 72.
 
Не забывайте добавить скрытый шейп!
В данном случае возьмем пирамидку маркера из ноды маркера и поставим ей флаг 3.
Т.е. шейп необходим для правильной работы эффекта.
Т.е. здесь он выступает датчиком поворота к камере! Который собственно и необходим для БилБордНоды, что бы правильно ориентироваться в сцене (так сказать).
Также, размер такого скрытого шейпа, можно поставить 0.1.
Дабы он не "мешался" под ногами. Движок его видит, а нам не надо.
Впрочем, не забудьте заглянуть в шейпдату и поставить радиус 100.000!
Да, размер 0.1 (и ни в коем случае нельзя жать apply!) а радиус 100. и выше.
Это также необходимо для правильной ориентации эффекта на камеру.
 
И навешиваем, на эту билборд ноду, текстурный эффект в режиме тумана.
В качестве текстуры используйте тот градиент, который нашли, или создали, перед редактирование ниф файла.
 
Полученную инсталляцию размещаем в состав скелета существа.
Здесь, добавляем в дети Bip01.
Так эффект будет лучше реагировать.
 
Полученный номер текстурного эффекта указываем в слоте Effects NiCollisionSwitch ноды в которой помещена тушка алита.
 
Это все базовые настройки!
- лод нода, которая прячет существо на расстоянии.
- колижен свитч нода в которую упакованы видимые сетки существа.
- билборд нода в которой находится эффект.
- который и наложен на ноду с потрохами алита.. :D
 
Переходим к тонким!
 
Для текстурного эффекта они будут такими.
Size = 100
Clamp_S_Clamp
Effect_FOG_map
Sphere.
 
Здесь, самое главное размер!
 
 
 
 
 
 
 
И посмотрим настройки позиции точки проекции эффекта в сцене!
Это ВАЖНО!
 
Здесь, для управления оными используется, та самая вторая вложенная niNode в детях которой находится БилбордНода.
 
Ставим позицию -200 Y
Как ни странно, но это сместит ее под уровень земли.
 
Да, проецирование текстуры должно идти издалека и иметь большой размер.
 
И финальные штрихи, собственно, окончательно, превращаем тушку алита в "облачко".

Снимаем со всех шейпов текстурные и niMaterial свойства!
Т.е. получаем пустые от любых свойств шейпы.
 
 
 
 
 
Одни из текстурных и материал свойств можно (сразу) скопировать на niCollsionNode.
Откуда они окажут эффект на все вложенные шейпы.
Либо, создать, эти свойства, с нуля, через Attach Properties.
 
В базовой слот текстурных свойств назначаем ту текстуру, которую упоминали в начале.
Т.е. чистый черный фон с прозрачностью.
 
Далее добавим:
- NiAlphaProperty с флагом 523 (threshold 255) или флагом 5.
- NiFogProperty, флаг 4, плотность 0.8 цвет синий.
- NiMaterialProperty все цвета поставим черными, прозрачность 1.0000!
- NiZBufferProperty флаг 3.
 
Примечание.
Если добавить бамп карту + дополнительный текстурный эффект в режиме блеска, то, можно существенно разнообразить результаты. Но базовые настройки останутся этими.
Высокие значение SIZE текстурного эффекта и значительное смещение родительской ноды.
 
Второй текстурный эффект, добавляется аналогично.
Делаем копию уже имеющегося текстурного эффекта, меняем ему тип с fog на env.
И назначаем на niCollisonSwitch ноду в компанию первого эффекта.
И, добавляем бамп карту, иначе, эффект может не появиться.
 
И?
А собственно и все!
Подключаем модель в редактор и смотрим, что у нас получилось!
 
Если было все правильно сделано, то вот.
Текстурный эффект работает по контуру сетчатых оболочек согласно их геометрии.
Чем геометрия сложнее, а градиент текстуры занимает большую площадь, тем плотнее будет очертание объекта.
 
Из издержек...
Нет отсечения перекрытых объектов, но это "штатный" баг движка, с которым не ясно, что делать в принципе -_-
 
Если дополнительно поместить сетки в СортАджуст ноду, то можно получить изменение поведению текстурного эффекта, но это не решит проблему с перекрытием.
 
И да, сортаджуст нода, внезапно, приводит к "пляске" текстурного эффекта.
См. второй скриншот, где при движении мышью, эффект сместился.
Но стоит отпустить модель, как он вернется к состоянию с первого скриншота.
В игре, такая пляска будет при вызове меню.
 
Т.е. добавление ноды сортировщика, не оказывает явно положительного эффекта, к сожалению.
 
Добавление частиц к объекту?
Возможно!
Но это будет приводить к мерцанию сетки на их фоне.
В этом случае, уже придется использовать ноду сортировщик!
Изменив тип корневой ноды файла, на NiSortAdjustNode.
Использовать флаг = 64. *требует МВСЕ!
Тогда все вложенные объекты будут взаимодействовать, между собой, более аккуратно.
Но также, это приведет к пляске текстурного эффекта!
Сама текстура (блеска) не градиент, а "точка".
Что и дает смещение золотистого цвета к центру.
Т.е. фог отрабатывает по "контору", а блеск наоборот, по центру.
 
Базовая текстура не менялась! Т.е. модель по прежнему сохраняет "полную" прозрачность по текстуре и альфа свойствам. Однако, эффект блеска, работает корректно.
 
И да, полголовы ему съел нифскоп, т.е. часть сетки черепа была удалена, но это пошло ему только на пользу! Правда ведь, правда?)))
Призраки в ассортименте!
 
Частицы используют bsParray контроллер для лучшего размещения частиц вдоль "тела".
Здесь же видно "пляску" - особенно хорошо видно, как гуар, высунулся из облака частиц, частично скрыв оное за собой.
 
Под водой, это тоже все работает.
 
А если альфа свойства указать как 4613 оставив исходную базовую текстуру, то можно получить более "материальный" призрак.
Здесь, это видно на рыбе.
 
Если играть с настройками поворота, или смещения проекции эффекта, можно управлять "акцентами" подсветки.
Т.е. менять ее сторону для придания объекту определенной выразительности.
 
Т.е. если сменить метод проекции со сферического на CG_WORLD_PERSPECTIVE, что позволяет управлять смещением и поворотом эффекта по модели.
 
Здесь, дополнительно использовался бамп.
Т.е. в базовых свойствах модели прописана текстура бампа и добавлен текстурный эффект в режиме блеска.
 
В динамике получился почти Миадзаковский Стиль.
Если быть точнее, то конечно, это стиль того призрачного червия из Хранителя Священного Духа. :D
 
Нпс, или Существо?
На выбор.
Т.к. можно создавать доспехи с такими эффектами.
А можно и существо одетое в доспехи.
А если подключить МВСЕ, то вполне реально создать "шейдер" накладываемый динамически на любой объект прямо в игре!
 
Да, призванная дремора в компании призраков!
Богато? Не то слово!
Играть настройками можно с чувством с толком с расстановкой и не забывать про "чувство собственного Достоинства"(С) :D
Сиречь, Достойному Деянию Достойный Путь!
 
Если добавить этот  эффект (сам эффект и прочие настройки) на Shield(Weapon) Bone в файле существа, то и щиты и оружие примут призрачный вид.