Fallout 3DHair.

Урок посвящен созданию причесок для Fallout 3 и Fallout: New Vegas. Так же подходит и для Oblivion, с небольшими уточнениями ниже по тексту.

Скажите, а вы действительно хороший парикмахер?
Или просто выглядите как гей?

Первые два абзаца про прически всех трех этих игр [вырезано цензурой]. Потому что из приличных слов там только предлоги "в" и "на". Прошло 1/10 нового века, железяки умопомрачительно прибавили мощности. И тем не менее долбаебыдятлы из крупнейших студий делают железобетонную прическу армейского сержанта Хартмана. И это при наличии Physx-а, да и древнючий Havoc способен на многое. Two World II недавно порадовал, хоть и без изысков там прически.

Дятлам из Bethesda посвящается...

Хотя пора уже делать такое:

Oblivion.

Для Oblivion прическа состоит из 3 файлов: сам nif-файл прически и два дополнительных файла с таким же именем и расширениями .tri & .egm. Первый по сути копия nif-файла, где кранится геометрия, UV-координаты и информация о управляющих таргетах морфинга (как я понимаю, в конкретном случае Oblivion длинна волос, а как это делать я не разбирался, поэтому не скажу, можно ли выкинуть или нет). В .egm хранится инфа о морфинге лица, которое воздействует на прическу (широкое/узкое, большое/маленькое). Эти два файла создаются автоматически на базе стандартных файлов головы при помощи утилиты The Conformulator, о которой было написано в "Маска имени Ганнибала Лектора".

В самом nif-файле прически для Oblivion может быть любое количество нодов, с любым именем. Поэтому все баги с альфа-блендингом, которые обязательно будут, можно и нужно решать по рецепту Alpha-блендинг, баги и методы решения. Качество гарантируем.

Все остальные методы у Oblivion и Fallout одинаковые.

Fallout 3 & Fallout NV

Для Fallout 3 и Fallout: New Vegas гениальные программисты хотели как лучше, а получилось как обычно. В nif-файле должно быть строго 2 нода с именами Hat и NoHat. В первом ноде Hat хранится модель волос, которая отображается при одетой шляпе. Так как шляпы разные, то средним вариантом делают короткую армейскую стрижку. Во втором ноде NoHat хранится оригинальная модель прически. Дополнительно при помощи The Conformulator создаются .egm файлы для обоих нодов с именами: имя_прическиHat.egm, имя_прическиNoHat.egm. Без пробелов. И кидаются в папку с оригинальным nif-файлом прически. Tri-файлы не нужны.

В начале работы стоит импортировать следующие файлы:

Для выравнивания прически под игровую модель. В качестве Hat-модели можно взять любую стандартную.

В качестве "базы" можно обять же взять Hat-версию из стандартных или же сделать "скальп" на базе головы.

Обычно сперва делается модель, а потом текстура. В случае волос мне удобнее сперва сделать текстуру. Кисти для рисования можно найти вот тут deviantart.com (сразу даю ссылку на раздел).

Тут все просто. Для тех кто хоть немного рисовать умеет. Цвет текстуры должен быть нейтрально-светлый, так как основу даст цвет выбираемый игроком. Прозрачность сохраняется в альфа-канале текстуры. Прозрачность на скальпе - только по краям, на прядях - не обязательно. Даже лучше будет, если будет немного просвечивать, но совсем немного. Иначе будут трудности с прозрачностью в самом движке. Как я уже упоминал, в фоллауте сломали z-буфер и вообще нагадили как только могли. Текстура сохраняется в DDS DTX5. Чем сжимать? Практически без разницы.

Так же для волос требуется еще две текстуры. Первая как обычно с суффиксом _n, как можно догадатся текстура нормала. Делается без изысков в фотошопе фильтром NormalMapFilter (проявляется при установленном nVidia dds-плагине если кто не знает). В альфа-канале текстура спекуляра, то есть насколько сильно блестит под солнцем. Делается копированием основного (цветной текстуры, а не нормала) изображения в альфа-канал и увеличением ее контраста. Это если на скорую руку.

Вторая текстура с суффиксом _hl. Используется для блендинга с основной текстурой. Фактически копия основной текстуры, только более интенсивная по цвету. А основной текстуре можно дополнительно уменьшить интенсивность цвета (Image >> Adjustments >> Hue/Satutation). В альфа-канале текстуры _hl копия прозрачности, которой усилить контраст.

Текстуры записываются в BSShaderTextureSet нода BSShaderPPLightingProperty уже в NfScope после экспорта. В таком же порядке. Текстура, текстура_n, текстура_hl.

Затем делаются пряди собственно прически. Моделить можно с помощью NURBS Surfaces, Patch Grid, можно сплайнами даже, а потом на сплайны модификатор Surface повесить. Но самый простейший, это разумеется обычной геометрией. Правда стоит на объект добавить модификатор Mesh Select, а за ним MeshSmooth. Для игр хватит и одного уровня тесселяции, хотя можно и 2 если захочется. Это делается для простоты, чтоб моделить абсолюбно квадратную низкополигональную прядку. А MeshSmooth уже сгладит форму. Делать пряди надо по порядку, сперва самые глубокие, потом сверху на них накладывая следующие слои волос. Это и просто удобнее и потом пригодится.

К слову. Разницы по качеству между модификаторами MeshSmooth, TurboSmooth, HSDS и использование NURBS-сглаживания в самом объекте EditPoly нету никакой. За исключением пары опций и "послойной" тесселяции у HSDS. А то меня однажды сильно удивили фразой, что MeshSmooth полный отстой по сравнению с TurboSmooth.

ВАЖНО

Для лучшего финального результата пряди волос (их финальная геометрия, после MeshSmooth-а) не должны друг друга пересекать. Особенно те, которые накладываются слоями друг на друга. Вот собственно зачем - оригинальная статья камрада Akavir Overlapping alphas. Метод рабочий для всех игр на базе движка GameBryo.

После этого надо подправить UV-мапинг для тех прядей, у которых слишком растягивается текстура в процессе моделирования.

По завершении этого процесса для всех прядей и скальпа стоит сделать Reset X-Form (6-я панель, в утилитах) и Collaps (с параметром Modifier Stack Result, объединять в одну сетку рано еще). Затем для скальпа и прядей выравнять Pivot по голове (по кости Bip01 Head). Тело, скелет и голову можно удалять, а прическу передвинуть в нулевые координаты по высоте (а голова импортированная на скелет находится на высоте 112.843). После этого надо выделить все части прически, сдублировать. Не снимая выделения кинуть в новый слой (для удобства), применить на них модификатор Normal Modifier. В нем поставить галку Flip Normals и сделать коллапс стека модификаторов. Теперь в новом слое будет копия всех прядей и скальпа, но с инвертированными нормалями. Необходимо для того, чтоб волосы отображались с обоих сторон без использования нода NiStensilProperty.

Вот после всего этого уже можно объединять геометрию. Последовательность такова. Для первой копии прически к скальпу приаттачиваются пряди по порядку из глубины прически (от скальпа) наружу. Если делалось согласно рекомендациям, то просто по очереди, как были созданы. Для второй копии прически с инвертированными нормалями порядок обратный, и потом она присоединяется к первой. Не путать. Вторая с инвертированными нормалями присоединяется к первой. Порядок важен уже для движка.

Перед экспортом нужно добавить цвет вершинам если он отсутствует. Посмотреть можно выделив прическу и выполнив Tools >> Channel Info. Если канал 0:vc по нулям - нету цвета у вершин. Тогда включив режим подобъектов vertex и выделив все вершины надо изменить цвет Color в разделе Vertex Properties. Тут вот еще что. От этого цвета зависит дополнительно цвет прически. Происходит смешивание цвета диффузной текстуры волос с цветом выбранном игроком в настройках присоздании персонажа. Если оставить чисто белый, то цвет прически будет 1 в 1 и яркость цвета выбранного игроком больше 50% будет засвечиватся. Короче интенсивность будет вырвиглазная. А если цвет вершин сделать черным, то волосы будут того цвета, как на диффузной текстуре, без использования цвета выбранного игроком. Золотая середина светло-серый.

При экспорте галку на Vertex Color не забываем. Без него прическа развалится. Я гарантирую это.

В результате имеем файл с прической который надо допилить до кондиции. Нод с прической должен называтся NoHat. Затем из любой стандартной прически скопировать нод Hat и добавить нод NiStringExtraData как в оригинале. Можно и скопировать, но при копировании текстовые имена слетают. Поэтому добавить проще.

Обязательно исправить значение параметра BSShaderPPLightingProperty как на скриншоте ниже. Иначе не отобразитеся на персонаже. Или неправильно будет.

Итак. Нод с прической называется NoHat. Нод который будет отображаться когда отдета шляпа называется Hat. Ноду NiStringExtraData в имя пишется Prn, в стринг дату Bip01 Head и символизирует он голову, на которую оденется прическа.

При копировании нодов в NiTriShapeData, в котором хранится геометрия может не скопироватся вертексный цвет. Тогда надо вручную переключить на yes и обновить. По умолчанию будет чисто белый цвет. Поэтому и предлагаю копитьвать Hat и NiStringExtraData в созданный файл, а не наоборот. Для гарантии.

После к ноду NoHat добавляется NiAlphaProperty. В параметр Flags пишется 4845. Что это означает можно посмотреть в диалоговм окошке вызываемом по правому клику (пункт Flags).

Затем нужно сделать 2 дополнительных файла для причеки, чтоб на нее влиял морфинг. Делается при помощи The Conformulator. Сперва из nif-файла надо экспортировать ноды Hat и NoHat в obj-файлы. Соответственно с именами имя_прическиHat.obj и имя_прическиNoHat.obj. Для Hat-нода можно просто скопировать соотвествуюющий egm-файл от прически, из который был скопирован данный нод. В результате получятся файлы с теми же именами, но с расширением *.egm, они то нам и нужны. Используются движком автоматически, нигде прописывать их не нужно.

Затем прическа добавляется в G.E.C.K.

Зачем указывается отдельно nif-файл и базовая текстура? Наверное чтоб можно было несколько разных причесок сделать на базе одной геометрии, но с разными текстурами. Я не копал эту тему.

Финал. Глюки альфа-теста есть конечно, но я особо не старался просто. За пол-дня собрал и вот пишу этот текст.

- Потрясите, пожалуйста, головой: я туда ножницы уронил!