×
Menu

billboard - create fake fog/mist

Просто примечание о создании одной модельки.
Из серии "дешево и сердито".
 
Собственно ничего нового, это было использовано в Обломе (обливионе).
Так отчего бы не перенести это в МВ?
 
Примечание.
В отличие от частиц, работать с этим проще, результат лучше предсказуем и меньше нагрузки для фпс.
Т.к. требуется меньшее число объектов, чем при использовании частиц.
А также, можно задавать произвольную форму геометрии.
Частицы же, всегда используют квадраты...
Прямоугольники, сферы и пр. Что и позволяет покрыть большую площадь меньшим кол-вом объектов.
Помимо этого, возможность управления развертками и добавления ЮВ контроллера.
 
Примечание.
Эффект тумана сгущающегося в удалении от камеры (игрока) можно получить посредством текстурного эффекта.
Это может иметь свою область применения.

1. Создание в МАХе.
- создайте плоскость.
- из одного полигона.
Размер, к примеру, пусть будет 128х32.
Разместите в нулевых координатах.
 
Обращайте внимание на ориентацию по осям XYZ!
Правильная - длинной стороной по оси X, а короткой по Y.
Если при просмотре в нифскопе плоскость окажется "стоящей", просто поверните ее в 3д МАХ.
И не забудьте нажать reset Xform после этого.
По Z поворачивать не нужно!
Это приведет к повороту плоскости ребром к камере, т.е. ее вовсе не будет видно.
Плоскость должна лежать в плоскости "пола".
 
далее!
В MaxProperties укажите:
Переименовывать плоскость не нужно, разве для удобства.
 
Залейте материалом!
ТесШейдер, режим альфы можно не трогать, либо установить, как на скриншоте ниже.
 
 
 
vfx_alpha_steam00.dds
 
vfx_alt_envir.dds
vfx_alpha_steam00.dds в настройках укажите UV2.
Наложите на плоскость UVW Mapping по второму каналу.
Теперь на материал можно применить UV анимацию  используя базовую текстуру по 1UV.
Это придаст туману больше живости! Он будет как бы переливаться.
 
С плоскостью пока все.
 
Примечание.
Кроме плоскостей, можно использовать и другие примитивы.
Сферы в т.ч.
Это позволяет создавать более мягкие и интересные эффекты тумана (здесь).
Т.е. получаются, так называемые "soft particles" только на уровне примитивов.
Увы, непосредственно с "мягкими частицами" МВ в пролете, но можно использовать сферические спрайты.
 
Теперь будет удобно создать маркер, коллизию и коробку выделения!
- Создайте куб, назовите его tri editormarker.
- Клонируйте и назовите Collision.
- опять клонируйте и назовите Bounding Box
Разместите оба куба в нулевых координатах, но под "полом" сцены.
Это нужно чтоб не спотыкаться об "туман" и для удобства перемещения объекта в редакторе.
- еще раз создайте копию и назовите ROOT.
Это будет корень сцены!
Не снимая выделения с ROOT объекта, вызывайте MaxProperties, где выбрать: Animated = True
Т.е. вызвать меню и поставить этот флаг.
- Теперь, select&link на плоскость и прилинковать оную к ROOT.
- Поднимите ROOT на +16 по оси Z.
- И, также прилинкуйте маркер, коллизию и ББ к ROOT!
Да, их после, хорошо, если они будут немного смещены в стороны друг от друга.
 
Возвращаемся к плоскости.
И.. ничего не делаем!
Жмем экспорт через ТЕСэкспортер, т.к. этот модуль автоматически создаст системные объекты.
Маркер, коллизию, ББ и анимационную ноду!
 
2. Переходим в Нифскоп!
Где проводим необходимые оптимизации только с единственной плоскостью!
Проверяем флаги альфы, развертку и пр.
 
Шейп - tri Root , больше не нужен, удаляем его!
 
NiZBufferProperty копируем с NiBillboardNode и помещаем на корень файла.
Это внесет оптимизации.
Удаляем NiZBufferProperty с NiBillboardNode, где он больше не нужен.
 
А также добавляем флаг NC - т.е. объявляем этот объект полностью лишенным коллизий.
Копируем NiStringExtraData, вставляем.
В настройках оригинальной Next Extra Data указываем номер добавленной.
String Data новой меняем на NC.
К сожалению, 2 экстра даты могут не экспортироваться из МАХа, поэтому поправляем это здесь.
 
Еще, будет весьма полезно, поместить на корень файла, niFog свойства.
Это предотвратит проявление полигонов в туманных локациях.
И может добавить эффект затенения на удаленные от камеры участки модели.
Возможно будет уместно применить флаг 10, Fog Depth 1.000  цвет по вкусу.
 
Выбираем niBsAnimationNode и ставим флаг 32, вместо 42.
Хоте, это не обязательно.
Т.к. разница только в методе детектирования коллизий.
 
Теперь еще один маленький, но важный штрих.
Пакуем NiBillboard ноду в обычную.
NiNode->Attach Parrent->NiNode.
Это создаст удобный контейнер для следующего шага!
 
Где, самое время добавить niRollController!
Т.е. добавляем контроллер вращения на эту добавленную ноду.
Здесь, важно обратить внимание на время работы этого контроллера!
Т.е. Stop Time Roll контроллера должно быть равным времени у UV контроллера.
Раскрываем NiBillboardNode и смотрим Шейп.
Устанавливаем время:
 
И еще раз, пакуем уже упакованную ноду в NiNode.
Можно сразу назвать ее Switch!
Здесь, чуть позже, применим одну новую технику! См. далее.
 
В итоге получается примерно такой файл:
 
 
3. И последний штрих!
Копируем NiNode содержащую NiBillboardNode плоскость.
И вставляем некоторое кол-во раз!
Каждую добавленную плоскость смещаем в сторону, чтобы заполнить площадь.
В данном случае смещение можно установить 32.0000
0.32, 0.-32, -32.0., -32.0., 32.32, -32.32., 32.-32.
В итоге образуется аккуратный квадрат из спрайтов.
 
 
Жмем Spell->Optimize->Combine properties - это удалит все дубли свойств материалов и альфы.
 
И на самое вкусное, указываем в NiTriShape спрайтов одинаковую NiTriShapeData.
Т.е. одну и туже для всех шейпов.
Это позволит еще сколько-то уменьшить размер файла, а также, возможно, прибавит пару фпс.
NiTriShape->Data->номер NiTriShapeData самой первой плоскости в сцене.
 
Оставшиеся вне корня файла NiTriShapeData - удаляем.
 
Впрочем, это можно было сделать в МАХ.
Клонировать плоскости в
режиме Instance.
 
А так этом (может) выглядеть в редакторе:

В итоге получаем весьма эффектный туман.
Который не только "стелиться" благодаря UV контроллеру, но и "клубиться" благодаря Ролл контроллеру!
При этом тут не так много полигонов.
В редакторе его легко выделять, а в игре об него не споткнуться.
 
При желании туман можно снабдить освещением, текстурными эффектами и иными контроллерами.
Которые, например, будут поднимать и опускать его "детали".
 
Правда есть (был) один жирный минус!
Если какой-то предмет находится под таким туманом, его нельзя взять "руками".
Т.е. если навести на предмет камеру, он будет не активен.
Впрочем, если вызвать инвентарь и использовать на предмет курсор, он подбирается без затруднений.
 
Однако!
По обновленным данным (02 2020), это также может быть исправлено!
А именно, упаковав NiBillboardNode в niCollisionSwitch ноду.
Т.е. снова открываем модель в Нифскопе с измененным Nif.Xml файлом и:
Конвертируем, ноду названную "Switch" в Collision Switch!
Convert->niC->niCollisionSwitch
Установить флаг 8.
Т.е. превращаем обычную ноду в этот особый тип!
 
Теперь получился настоящий туман!
Который не мешает активации предметов, приятно клубиться, и затеняется в удалении.
 
Примечание.
Контроллеры анимации вращения (niRollController) можно помещать не только на основные объекты, но и на их группы!
Это позволит создать большее разнообразие анимаций.
Спрайты вращаются вокруг своих осей, а вся группа вокруг своего центра...
Копируем Roll  с одной из Спрайтовых нод и назначаем на Switch.
В настройках ключей Roll можно поменять значение времени.
Вместо + поставить -.

После добавления niFog и упаковки спрайтов в CollisionSwitch.
Фиолетовый оттенок в удалении, это действие niFog.
 
Возможность активации предметов за видимой преградой, заслуга CollisionSwitch.
Туман использующий вместо плоскостей сферы.
Позволяет (во многих случаях) избежать появления "среза".
Т.е. такой туман выглядит мягче и работает во всех проекциях камеры. Однако, это может иметь свои издержки.
 
Слева обычные плоскости.
Справа сферы.
Добавление стенсильных свойств позволяет управлять какая сторона (в данном случае спрайта тумана) будет отображаться.
Либо, отобразятся сразу обе, что приведет к повышению яркости текстуры в т.ч.
 
Равно, здесь можно видеть, кроме работы DRAW_CW и DRAW_CCW - влияние текстурного эффекта в режиме тумана.
Как видно, в данном режиме, использование этого эффекта (была) не лучшая идея. Проявились все полигоны.