В данном документе описывается создание танка или САУ (Самоходной Артиллерийской Установки). Но все требования, пайплайны, правила именований, иерархии ресурсов, структура файлов и прочее будет применяться и для других единиц наземной техники, управляемых игроками.
Введение
Модель
В финальном *.max файле будет хранится танк, поврежденные элементы танка, дополнительная невидимая вспомогательная геометрия, ноды и кости:
- Модель целого, не поврежденного танка c четырьмя лодами
- Поврежденные элементы c четырьмя лодами (DMG)
- Невидимая геометрия для расчета попаданий-повреждений брони танка и повреждаемых модулей (члены команды, двигатель, баки с горючим, и т.д.) (DM)
- Вспомогательные ноды для ориентации частиц и для привязки дополнительных модулей (танкисты, пулеметы, станки для пулеметов).
- Кости для процедурной и физичной анимации
- Геометрия для визуализации попаданий, повреждений (Xray).
Текстуры
Обычно танк имеет четыре набора текстур:
- на корпус
- на башню
- на пушку с маской
- на гусеницы
В некоторых случаях, если на конкретный танк не предусмотрено никаких модификаций или если некоторые элементы танка неразделимы (корпус и башня у некоторых САУ, например), мы «сливаем» текстуры в единую раскладку.
Но если несколько САУ используют одну и ту же ходовую часть, то мы раскладываем эту ходовую часть в отдельную, общую текстуру и условно считаем ее корпусом, а всю часть корпуса, что выше ходовой части - раскладываем в отдельные, уникальные текстуры и условно считаем их башнями. Оговаривается каждый отдельный случай заранее.
Функционал текстур
_c.tga 32bit
:
RGB — Base color
Alpha — Альфа канал используется в трех случаях:
- Camo Mask — Маска для смены камуфляжа (касается всех элементов помимо гусениц, решеток).
- Alpha test — для треков (гусениц) так как они не используют камуфляж, мы используем его для альфа-теста. Также этот шейдер будет применяться для некоторых других элементов танка типа решеток, если такие имеются (например кожух вокруг выхлопной трубы у танка или решетка над моторным отделением).
- Self Illumination — маска для самосвечения. Используется для фар, фонарей, прожекторов.
_n.tga 32bit
:
RG Channels — Normal Map
Blue Channel — Metalness
Alpha — Smoothness
_ao.tga 24bit
:
Ambient Occlusion — Карта рассеянного освещения.
UV (Текстурная развертка)
Большая часть танка имеет два канала текстурных координат. Второй UV-канал используем для наложения тайла камуфляжа на танки.
По сути второго текстурного канала может не иметь только одна часть танка — гусеницы.
Финальный вариант второго текстурного канала мы делаем на одном из самых последних этапов создания модели — когда готова вся геометрия во всех состояния и во всех лодах.
Важно! В текстурной развертке на гусеницах допускается тайл от 7 до -7. В большинстве случаев гусеница не помещается во всю высоту, приходится разбивать на два-три сегмента и с помощью модификатора UVW Xform менять оффсет крайних сегментов гусениц ,чтобы не вылезали за максимальное и минимальное значения.
Общие требования к сцене
- Финальная сцена должна быть в формате *.max для 3DSmax2015
- Модель должна иметь реальный масштаб в метрических единицах измерения
System Units = Meters 1 Unit = 1Cm
- Центр вращения танка находится в центре мира (центр площади по нижней грани гусениц)
- Направление движения танка в *.max файле должно быть по оси X
- Гусеницы танка «утопают» на 2 см по высоте от уровня центра мира. То есть танк стоит на земле не колесами, а гусеницами.
- На всех объектах не должно быть модификаторов (объекты должны быть Editable Poly). Исключение составляют объекты, участвующие в анимации, вроде антенн или гусениц с модификатором Skin.
- Пулемёты моделировать не нужно. Все основные пулеметы уже готовы. В особых случаях лучше уточнить.
- Все объекты должны иметь scale = 100, 100, 100 (используйте Hierarchy/Reset Scale)
- Все отдельные части танка и модули: башни, пушки, фонари, топливные баки, ящики, кожухи на выхлопных трубах, инвентарь (лопаты, кирки, домкраты и т.д.), осветительные приборы,звенья гусениц, колеса и т.д должны быть отдельными объектами.
- Во всех объектах слоя sceleton в object properties должно быть прописан блок:
renderable:b=yes cast_shadows:b=yes normals:t="disable" dir:p3=0, 0, 0 cast_on_self:b=yes unwrapScheme:i=0 collidable:b=no collision:t="box" phmat:t="" massType:t="none" preferMass:b=yes mass:r=-1 density:r=-1 animated_node:b=yes billboard:b=no occluder:b=no
- В объектах слоев DM и XRAY:
className:t="aces" animated_node:b=yes
- Во всех объектах, которые могут отлететь (с припиской ex_ и _dstr ), колесах, стволах, подвеске должно быть прописано во всех слоях:
animated_node:b=yes
Оси (Nodes Axis)
- Для всех объектов, кроме люков, оси направлять X — по ходу движения, Z — вверх.
- Для люков ось Х — ось вращения, Y — в одной плоскости с люком, Z – внутрь корпуса.
- Для всех элементов и нод танка пивоты находятся в центре вращения объекта, если объект вращается (колесо, башня, пушка, маска курсового пулемёта и т.д.).
- Для всех нод, кроме нод партиклов и вращающихся объектов, оси направлять X — по ходу движения, Y — вверх.
- Для всех вспомогательных нод для привязки партиклов ось X – направление движения партиклов.
- Для частей крепления пулемета оси выставлять в центре их вращения.
Важно! Оси и их координаты, всех элементов с одинаковыми именами должны совпадать и в неповрежденной модели танка, и в повреждённой (DMG), и в геометрии для расчета повреждений модулей (DM) – это нужно чтобы при подмене например неповрежденного крыла на поврежденное у нас не изменилось положение и поворот элементов танка.
Имена файлов, иерархия ресурсов
Названия файлов должны начинаться с маленькой буквы. Название танка дается с паспортом.
Пример: m4a2_sherman_1944.max
Пробелы, тире и дефисы использовать нельзя, только нижние подчеркивания.
Нумерацию стараемся не использовать. Только там, где это действительно необходимо — много элементов, не отличающихся друг от друга функционалом, не влияющих как-то особо на геймплей. Общее положение для нумерации файлов и объектов внутри *.max : если используется порядковый номер, то обязательно используем двузначное значение! Например ex_armor_07 — объект внутри *.max-файла, кусок внешней, дополнительной брони танка, один из многих других.
Танковые шейдеры
- dynamic_masked_tank – шейдер для основных объектов (корпус, башня, пушка, дополнительные объекты на танке)
- dynamic_tank_atest – шейдер для траков (для правого трака texoord_anim -1 для левого 1), объектов с альфатестом.
- dynamic_pbr_glass – шейдер для стекла фары.
- dynamic_masked_chrome_bump – шейдер для лампы и отражателя фары, нарезки ствола.
- gi_black – шейдер для всех объектов слоя DM
- hatching – шейдер для всех объектов слоя XRAY
Строение *.max файла и требования к геометрии
Строение *.max-файла и именование объектов
Все объекты в *.max-файле должны лежать в соответствующих слоях. Глобально наш финальный файл содержит следующее:
- Геометрия танка с четырьмя лодами.
- Геометрия поврежденных элементов с четырьмя лодами (DMG).
- Вспомогательная геометрия для расчета повреждений (DM).
- Ноды для привязки эффектов, дополнительных модулей, анимации траков и антенн.
- Вспомогательная геометрия для визуализации попаданий (XRAY).
Имена объектов видимой геометрии в файле:
Объект | Имя объекта |
---|---|
Корпус | body |
Башня | turret |
Подвижная часть пушки (анимация с отдачей от выстрела) | gun_barrel |
Маска пушки | gun_mask |
Маска пулемета | mg_mask |
Люки | hatch |
Трак | track |
Антенна | antenna |
Фонари, фары, прожекторы | ex_lantern |
Внешняя статичная мортира, гранатомет, миномет | ex_mortar |
Элементы внешнего декора влияющие на уровень брони. Такие как запасные траки, мешки с песком, доски, дополнительные экраны бронирования. | ex_armor |
Внешние запасные баки с топливом | ex_fuel_tank |
Элементы внешнего декора, не влияющие на уровень брони и не несущие никакого геймплейного функционала (лопаты ,кирки, ведра и т.д.) | ex_decor |
Колесо, каток (более детально в разделе «Колеса и подвеска») | wheel |
Подвижный элемент подвески (более детально в разделе «Колеса и подвеска») | suspension |
Дымогенераторы | ex_smoke |
Если в файле несколько объектов одного типа и при этом важно их разделение на левый-правый, то добавляем постфиксы (исключение hatch):
_r
— для объектов по правому борту танка_l
— для объектов по левому борту танка
Например это важно для траков: track_r, track_l
В случае если в файле несколько объектов одного типа — добавляем окончание порядковый номер. Нумеруем по возможности спереди назад, по ходу движения танка.
Например у многобашенного танка будут башни: turret_01, turret_02
Если у танка несколько башен, то нумерация пушки и маски для пушки должны совпадать с нумерацией башни.
Если на танке есть внешние мортиры или фары,значит они будут у нас отдельными отлетающими модулями. При этом они участвуют в игровом процессе и их имена должны указывать на их местонахождение.
Нумерация на примере Pz.Kpfw. VI Tiger Ausf. H1:
Во-первых, если они есть на корпусе, и на башне - значит это над отобразить в названии. во-вторых по направлению по ходу движения танка (r или l), и в третьих — они должны нумероваться.
Исходя из этих требований, мортиры и фары будут называться так:
- ex_mortar_turret_r_01
- ex_mortar_turret_r_02
- ex_mortar_turret_r_03
- ex_mortar_body_r_01
- ex_mortar_body_r_02
- ex_mortar_body_r_03
Если бы у этого танка была одна фара или прожектор на крыше башни, то он назывался бы: ex_lantern_turret
А фара на корпусе именовалась бы в таком случае: ex_lantern_body
Фонари, находящиеся в передней частей танка имеют название: ex_lantern_01
, ex_lantern_02
и т.д.
Фонари, находящиеся в задней части танка: ex_lantern_b_01
, ex_lantern_b_02
и т.д.
В случае с элементами декора (ex_decor) объекты в одном файле могут одновременно называться как с припиской _r или _l, так и без указания по борту. Логическое разделение такое: если декор находится на боковой части и имеет при этом брата на противоположной части — приписка есть. Если объект не имеет симметричного близнеца, то приписка не ставится.
Например, крылья у «Тигра» называются: ex_decor_l_01
и ex_decor_r_01
А лопаты-ящики и прочее на корпусе вокруг башни: ex_decor_01
Важные замечания по названиям:
- Названия всех объектов состоят из маленьких букв, заглавные не используем(все буквы английские!!!)
- Пробелы не используем — только нижние подчеркивания.
- В именах объектов, местонахождение которых не имеет особого значения (инвентарь типа лопат и домкратов, например), нет смысла использовать суффиксы с указанием местонахождения на танке (r или l). Достаточно просто пронумеровать.
- Имена нод должны строго совпадать для всех лодов и всех состояний во всех слоях — то есть, например, башня танка во всех слоях должна называться turret, не зависимо от того, какой это лод.
- Любое возможное отклонение от системы именования должно быть оговорено.
Колёса и подвеска:
- Каждое колесо и все подвижные элементы ходовой части должны быть отдельными объектами , с пивотами в центре оси вращения.
- Имена для колес и подвески даются следующим образом: колесо называются wheel, подвеска suspension.
- Все колеса и подвеска имеют суффиксы _r_ и _l_ - по сторонам танка. Например: wheel_r_01 – правое колесо, а wheel_l_01 — левое.
- Нумерация начинается с переда танка до задней части по возрастающей.
- Нумерация опорных катков, поддерживающих катков и подвески может не совпадать. То есть бывает, что на одной подвеске сразу два колеса В таком случае на suspension_r_03 будут колеса wheel_r_05 и wheel_r_06.
- Колеса из верхнего ряда, по которым «скользит» трек в обратную сторону, имеют суффикс _top_ и нумерацию, как и опорные катки: wheel_r_top_04 — верхний каток по правому борту, четвертый по очереди.
- Если колесо ведущее, то используем вместо номера префикс _drive. Например wheel_r_drive – ведущее колесо с правой стороны.
- Если колесо замыкающее по порядку от переда танка к задней части, но не является ведущим, то имеет постфикс _back. Например: wheel_r_back – последнее по счету, не ведущее колесо с правой стороны.
- Если колесо первое по порядку от переда танка к задней части, но не является ведущим, то имеет постфикс _front. Например: wheel_r_front – первое по счету, не ведущее колесо с правой стороны.
Bones. Кости для анимации
Когда мы говорим о линковании какого-либо объекта к костям или друг к другу — всегда имеется ввиду, что эта иерархия сохраняется во всех лодах, то есть — во всех слоях.
Кости лежат в отдельном слое sceleton.
Названия всех костей кроме кости root начинаются с приписки bones_ При необходимости заканчиваются порядковым номером — если, например, bone_wheel_r_01_01
это кость, отвечающая за анимацию вертексов на траке ровно под колесом wheel_r_01_01
.
Общее строение скелета танка выглядит следующим образом:
Функционал кости | Название кости |
---|---|
Корневая кость. Расположена в нуле координат файла, повернута осью X по оси X по направлению танка, ось Y вверх. | root |
Кость, к которой прилинкована башня + все ее элементы, расположена в центре вращения башни, повернута осью X ровно по направлению башни, осью Y вверх. То есть если башня танка - боковая, смотрит не по направлению движения танка, а в сторону, то и ось X будет «смотреть» в том же направлении.Эта кость — ребенок от кости root | bone_turret |
Кость ,к которой прилинкована маска пушки, спаренный пулемет и, все остальные элементы, анимирующиеся вместе с пушкой. Расположена в центре вращения пушки. Повернута осью X ровно по направлению пушки, осью Y вверх. Эта кость — ребенок от кости root. | bone_gun |
Кость, к которой прилинкован ствол пушки. Участвует в анимации отката пушки при выстреле. В центре цилиндра, где-то рядом с основанием пушки. Повернута осью X ровно по направлению пушки, осью Y вверх. | bone_gun_barrel |
Кость для привязки станка под пулемет. | bone_mg_mount |
Корневая кость для процедурной физичной анимации, у основания антенны. | bone_antenna |
Кость на конце антенны, для процедурной физичной анимации. Крепится к корневой кости антенны. | bone_phx_antenna |
В случае, если какие-либо кости процедурно анимируются по физике (как в случае с костью на конце антенны) — мы добавляем после префикса _bone уточнение: _phx
Случаи, когда мы будем применять физичную процедурную анимацию:
- антенны
- верхняя, провисающая часть трака
- тканевый/брезентовый чехол на маске пушки
- пружины (у подвески, на пушке), только которые двигаются во время движения танка или пушки.
Важно! Для физичной анимации необходимо иметь вектор по двум костям — от основания процедурного вращения к концу. То есть мы создаем две кости на каждый элемент, который анимируется по физике. Корневая кость в этой мини-иерархии не имеет приписки _phx, только замыкающая. Не планируется иметь более двух костей для анимации одного объекта.
Кости-крючки для привязки пулеметов:
Функционал кости | Название кости |
---|---|
Спаренный пулемет. | bone_mg_gun_twin |
Пулемет в корпусе танка. | bone_mg_body |
Пулемет в башне танка, не спаренный с пушкой. | bone_mg_turret |
Нода для анимации не спаренного пулемета. Шарнирная система, то есть монолитная маска, вращающаяся по всем осям. | bone_mg_body_mask_sphere |
Нода для анимации не спаренного пулемета. Часть маски, двигающаяся по вертикали. | bone_mg_body_mask_v |
Нода для анимации не спаренного пулемета. Часть маски, двигающаяся по горизонтали. | bone_mg_body_mask_h |
Последние три кости имеют в названии _body_. В случае ,если не спаренный пулемет находится не в корпусе танка, а является кормовым пулеметом на башне танка (например ИС-2), то уточнение по местонахождению будет не _body_, а _turret_
При необходимости кости имеют нумерацию, если башен несколько. Или если курсовых пулеметов несколько.
EMTR. Вспомогательные ноды для привязки партиклов и дополнительных внешних модулей
В местах где в движке будут создаваться эмиттеры эффектов, должны быть созданы вспомогательные ноды в 3DSmax. В нашем случае это bone объекты.
Ноды должны быть направлены осью X по направлению движения партиклов.
Функционал нод бывает завязан на функционале объекта, к которому привязана нода, а бывает и независим. Отсюда требование: зависимые ноды должны нести в названии ссылку на объект, к которому привязаны. Независимые должны быть названы по функционалу и пронумерованы.
Функционал и имена зависимых нод:
Функционал ноды | Имя ноды |
---|---|
Выстрел из пушки | emtr_gun_flame |
Выстрел из мортиры | emtr_mortar_flame |
Выстрел из пулемета | emtr_mg_flame |
Свет фары или прожектора | emtr_lantern |
Шлейф огня и дыма за отлетающей деталью взорванного танка | emtr_<название детали>_explosion |
Если родитель, к которому привязана зависимая нода, имеет нумерацию в названии, то нода ее дублирует.
Функционал и имена независимых нод:
Функционал ноды | Имя ноды |
---|---|
Дым из выхлопной трубы | emtr_exhaust_01(02,03 и т.д. если несколько источников выхлопа) |
Пожар в моторном отсеке | emtr_fire_engine |
Возгорание боекомплекта | emtr_fire_ammo |
Центр взрыва боекомплекта, полное уничтожение танка | emtr_explosion_center |
Огонь на уничтоженном танке | emtr_fire_dmg |
Маленький источник огня на уничтоженном танке | emtr_fire_small_dmg |
Дым на уничтоженном танке | emtr_smoke_dmg |
Маленький источник дыма на уничтоженном танке | emtr_smoke_small_dmg |
Огонь на взорванном внешнем топливном баке | emtr_<название топливного бака> |
Функционал и имена нод на гусеницах:
Функционал ноды | Имя ноды |
---|---|
Грязь, летящая назад из-под правой гусеницы при движении вперед. | emtr_track_r_back_bottom |
Грязь, летящая вперед из-под правой гусеницы при движении назад. | emtr_track_r_front_bottom |
Грязь, летящая назад сверху правой гусеницы при движении назад. | emtr_track_r_back_top |
Грязь, летящая вперед сверху правой гусеницы при движении вперед. | emtr_track_r_front_top |
Для левой гусеницы все то же самое, только вместо _r_ прописываем _l_.
Все вспомогательные ноды для привязки эмиттеров должны быть прилинкованы к объектам по логичной иерархии. То есть если эта нода поворачивается вместе с башней, пушкой или иным объектом — она к нему привязана. Если нода отвечает за привязку эмиттера с дымом и огнем на отлетающей детали танка — нода привязывается к этому dmg объекту.
EX. Декораторы, внешние модули
Все внешние элементы танка, которые могут быть оторваны выстрелом из пулемета или пушки, должны быть отдельными объектами и их название должно начинаться с приписки ex_
Если элемент повернут (например лопата), то пивот этого объекта должен соответствовать углу поворота.
Типы таких элементов и правила их названия описаны в разделе «Имена объектов видимой геометрии в файле».
Каждый такой объект имеет свои dm и dmg модели.
DM. Вспомогательная геометрия для расчета попаданий, повреждений
Т.к. эта геометрия отображается в игре, очень важно чтобы все углы соответствовали паспортным данным танка наиболее точно.
Каждому отдельному объекту соответствует собственная DM. Это объекты упрощенной формы.
Внутренние элементы
- engine_dm
- transmission_dm
- fuel_tank_dm
- fuel_tank_01_dm
- fuel_tank_02_dm
- fuel_tank_03_dm
- fuel_tank_04_dm
- fuel_tank_05_dm
- fuel_tank_l_01_dm
- fuel_tank_l_02_dm
- fuel_tank_l_03_dm
- fuel_tank_l_04_dm
- fuel_tank_l_05_dm
- fuel_tank_r_01_dm
- fuel_tank_r_02_dm
- fuel_tank_r_03_dm
- fuel_tank_r_04_dm
- fuel_tank_r_05_dm
- radiator_dm
- radiator_l_dm
- radiator_r_dm
- radio_station_dm
Оптика
- optic_dm
- optic_gun_dm
- optic_turret_dm
- optic_turret_01_dm
- optic_turret_02_dm
- optic_turret_03_dm
- optic_turret_04_dm
- optic_turret_05_dm
- optic_turret_06_dm
- optic_turret_07_dm
- optic_turret_08_dm
- optic_body_mg_dm
- optic_body_dm
- optic_body_r_dm
- optic_body_l_dm
- optic_body_1_dm
- optic_body_2_dm
- optic_body_01_dm
- optic_body_02_dm
- optic_body_03_dm
- optic_body_04_dm
- optic_body_05_dm
Казенная часть орудия
- cannon_breech_dm
- cannon_breech_01_dm
- cannon_breech_02_dm
- cannon_breech_03_dm
- cannon_breech_04_dm
- cannon_breech_05_dm
Приводы наводки
- drive_turret_v_dm
- drive_turret_v_01_dm
- drive_turret_v_02_dm
- drive_turret_v_03_dm
- drive_turret_v_04_dm
- drive_turret_v_05_dm
- drive_turret_h_dm
- drive_turret_h_01_dm
- drive_turret_h_02_dm
- drive_turret_h_03_dm
- drive_turret_h_04_dm
- drive_turret_h_05_dm
Боеукладка
- ammo_turret_dm
- ammo_turret_01_dm
- ammo_turret_02_dm
- ammo_turret_03_dm
- ammo_turret_04_dm
- ammo_turret_05_dm
- ammo_body_dm
- ammo_body_01_dm
- ammo_body_02_dm
- ammo_body_03_dm
- ammo_body_04_dm
- ammo_body_05_dm
- ammo_body_06_dm
- ammo_body_07_dm
- ammo_body_08_dm
- ammo_body_09_dm
- ammo_body_l_01_dm
- ammo_body_l_02_dm
- ammo_body_l_03_dm
- ammo_body_l_04_dm
- ammo_body_l_05_dm
- ammo_body_r_01_dm
- ammo_body_r_02_dm
- ammo_body_r_03_dm
- ammo_body_r_04_dm
- ammo_body_r_05_dm
- ammo_rack_body_xray
- ammo_rack_turret_xray
Экипаж
- commander_dm
- loader_dm
- loader_01_dm
- loader_02_dm
- gunner_dm
- gunner_01_dm
- gunner_02_dm
- driver_dm
- machine_gunner_dm
- machine_gunner_01_dm
- machine_gunner_02_dm
Дополнительная навесная броня или элементы
- ex_armor_body_01_dm
- ex_armor_body_02_dm
- ex_armor_body_03_dm
- ex_armor_body_04_dm
- ex_armor_body_05_dm
- ex_armor_body_r_01_dm
- ex_armor_body_r_02_dm
- ex_armor_body_r_03_dm
- ex_armor_body_r_04_dm
- ex_armor_body_r_05_dm
- ex_armor_body_r_06_dm
- ex_armor_body_r_07_dm
- ex_armor_body_r_08_dm
- ex_armor_body_r_09_dm
- ex_armor_body_r_10_dm
- ex_armor_body_l_01_dm
- ex_armor_body_l_02_dm
- ex_armor_body_l_03_dm
- ex_armor_body_l_04_dm
- ex_armor_body_l_05_dm
- ex_armor_body_l_06_dm
- ex_armor_body_l_07_dm
- ex_armor_body_l_08_dm
- ex_armor_body_l_09_dm
- ex_armor_body_l_10_dm
- ex_armor_turret_r_01_dm
- ex_armor_turret_r_02_dm
- ex_armor_turret_r_03_dm
- ex_armor_turret_r_04_dm
- ex_armor_turret_r_05_dm
- ex_armor_turret_l_01_dm
- ex_armor_turret_l_02_dm
- ex_armor_turret_l_03_dm
- ex_armor_turret_l_04_dm
- ex_armor_turret_l_05_dm
- ex_armor_01_dm
- ex_armor_02_dm
- ex_armor_03_dm
- ex_armor_04_dm
- ex_armor_05_dm
- ex_armor_06_dm
- ex_armor_07_dm
- ex_armor_08_dm
- ex_armor_09_dm
- ex_armor_10_dm
Катки, траки, подвеска
- wheel_r_01_dm
- wheel_r_02_dm
- wheel_r_03_dm
- wheel_r_04_dm
- wheel_r_05_dm
- wheel_r_06_dm
- wheel_r_07_dm
- wheel_r_08_dm
- wheel_r_09_dm
- wheel_r_10_dm
- wheel_r_11_dm
- wheel_r_12_dm
- wheel_l_01_dm
- wheel_l_02_dm
- wheel_l_03_dm
- wheel_l_04_dm
- wheel_l_05_dm
- wheel_l_06_dm
- wheel_l_07_dm
- wheel_l_08_dm
- wheel_l_09_dm
- wheel_l_10_dm
- wheel_l_11_dm
- wheel_l_12_dm
- wheel_r_drive_dm
- wheel_l_drive_dm
- wheel_r_front_dm
- wheel_l_front_dm
- wheel_r_back_dm
- wheel_l_back_dm
- wheel_r_top_01_dm
- wheel_r_top_02_dm
- wheel_r_top_03_dm
- wheel_r_top_04_dm
- wheel_l_top_01_dm
- wheel_l_top_02_dm
- wheel_l_top_03_dm
- wheel_l_top_04_dm
- track_l_dm
- track_r_dm
- wheel_support_dm
Маска и ствол орудия
- gun_mask_dm
- gun_mask_01_dm
- gun_mask_02_dm
- gun_mask_03_dm
- gun_mask_04_dm
- gun_mask_05_dm
- gun_barrel_dm
- gun_barrel_01_dm
- gun_barrel_02_dm
- gun_barrel_03_dm
- gun_barrel_04_dm
- gun_barrel_05_dm
- gun_barrel_armor_dm
- gun_mask_shield_dm
Броня башни
- turret_commander_dm
- turret_front_dm
- turret_back_dm
- turret_side_dm
- turret_top_dm
- turret_bottom_dm
- turret_01_front_dm
- turret_01_back_dm
- turret_01_side_dm
- turret_01_top_dm
- turret_01_bottom_dm
- turret_02_front_dm
- turret_02_back_dm
- turret_02_side_dm
- turret_02_top_dm
- turret_02_bottom_dm
- turret_03_front_dm
- turret_03_back_dm
- turret_03_side_dm
- turret_03_top_dm
- turret_03_bottom_dm
- turret_04_front_dm
- turret_04_back_dm
- turret_04_side_dm
- turret_04_top_dm
- turret_04_bottom_dm
- turret_05_front_dm
- turret_05_back_dm
- turret_05_side_dm
- turret_05_top_dm
- turret_05_bottom_dm
Броня корпуса
- superstructure_front_dm
- superstructure_back_dm
- superstructure_side_dm
- superstructure_top_dm
- superstructure_bottom_dm
- body_front_dm
- body_back_dm
- body_side_dm
- body_top_dm
- body_bottom_dm
- body_shield_dm
Принцип создания геометрии
- Создаём примитивную по своей форме геометрию, повторяющую основные контуры танка. Для корпуса и башни танка можно взять первый LOD и порезать его на части. Очень важно чтобы углы брони были такими же как на чертежах и в паспорте техники.
- Называем эти объекты так же ,как и объекты, которым они соответствуют, но с постфиксом *_dm . Например у объекта wheel_l_1 - DM будет называться wheel_l_1_dm, а у body будет body_dm. В приложении к статье есть файл с названиями которые можно использовать для деталей ДМ части танка.
- Толщина брони корпуса, башни и орудия различается по областям и нам необходимо показать это в DM. Надо разрезать корпус, башню, маску и т.д на части. Резать необходимо по толщинам представленным в паспорте или чертежах.
- Все полученные куски именуем соответственно списку, приведенному ниже. Во всех танках расположение и название может разниться, обсуждается при необходимости отдельно.
- Внутренние модули должны располагаться в соответствии с паспортом и референсами.
- В маске прорезать дырку под ствол.
- Геометрия должна описывать модуль из слоя XRAY.
- Ствол должен доходить до казенной части орудия.
- Между деталями не должно быть щелей.
- Деталь должна иметь 2 стенки (т.е. иметь толщину).
Список частей для схемы бронирования
Если dm отвечает за просчет повреждений для отдельного модуля, значит он дублирует название модуля и имеет постфикс _dm
Например, топливный бак с именем ex_fuel_tank_01
имеет dm с названием ex_fuel_tank_01_dm
.
Корпус, делится две крупных области:
- Верхняя часть — подбашенная коробка
- Нижняя, за ходовой частью — корпус
Броня подбашенной коробки:
Функционал dm | Имя dm |
---|---|
Броня бортов подбашенной коробки, входит левая и правая | superstructure_side_dm |
Броня подкрылков, верхняя вертикальная часть брони подбашенной коробки над гусеницами | superstructure_bottom_dm |
Лобовая броня подбашенной коробки | superstructure_front_dm |
Кормовая броня подбашенной коробки | superstructure_back_dm |
Крыша подбашенной коробки (плита на которой лежит башня) | superstructure_top_dm |
Броня корпуса:
Функционал dm | Имя dm |
---|---|
Лицевая броня башни | turret_front_dm |
Нижняя броня башни | turret_bottom_dm |
Броня бортов башни | turret_side_dm |
Броня крыши башни, в нее же входят и люки на башне | turret_top_dm |
Броня кормы башни | turret_back_dm |
Броня командирской башни (вертикальная часть брони) | turret_commander_dm |
Броня орудия:
Функционал dm | Имя dm |
---|---|
Броня маски орудия | gun_mask_dm |
Орудие | gun_barrel_dm |
Внутренние повреждаемые модули техники
Список dm невидимых ,внутренних модулей:
Функционал dm | Имя dm |
---|---|
Двигатель | engine_dm |
Топливные баки | fuel_tank_dm |
Трансмиссия | transmission_dm |
Боекомплект в корпусе | ammo_body_dm |
Боекомплект в башне | ammo_turret_dm |
Механизм горизонтального поворота башни | drive_turret_h_dm |
Механизм вертикального наведения | drive_turret_v_dm |
Казенная часть орудия | cannon_breech_dm |
Оптические приборы наблюдения и прицелы | optic_dm |
Радиостанция | radio_station_dm |
Список dm экипажа:
Функционал dm | Имя dm |
---|---|
Командир танка | commander_dm |
Наводчик | gunner_dm |
Механик-водитель | driver_dm |
Стрелок-радист | machine_gunner_dm |
Заряжающий | loader_dm |
Обязательное требование к dm: все нормали в геометрии должны быть направлены на внешнюю сторону.
Некоторых модулей может быть несколько, поэтому нужна нумерация суффиксы с цифрами, там, где это необходимо. Например если мы делаем несколько двигателей, то называем их engine_01_dm, engine_02_dm и т.д. То же самое про экипаж — если несколько заряжающих, то имена их будут loader_01_dm, loader_02_dm и т.д.
В случае, если dm геометрия отвечает за пробиваемость анимированого объекта, как в случае с башней и пушкой — dm привязывается к тем же нодам, что и геометрия башни и пушки. Так же к ноде башни привязываются dm различных модулей башни — членов экипажа, боеукладки, оптических приборов, внешних навесных модулей на башне и т.д. (т.е. все что может вращаться вместе с башней).
CLS — геометрия для коллизий с внешним миром
Коллизия танка с поверхностью земли происходит с помощью dm модулей колес.
Дополнительная геометрия для коллизии с окружающим миром требуется для:
- корпуса
- башни
- пушки
В сцене эта геометрия лежит в одном слое вместе с dm.
Геометрия коллизии — это простейшая топология!
Геометрия для коллизии называется:
cls_body cls_turret cls_gun
В случае ,если в одного бокса не достаточно для того, чтобы передать общие формы корпуса или башни, то делаем несколько боксов и называем их с нумерацией:
cls_body_01 cls_body_02 cls_body_03
и так далее.
XRAY. Вспомогательная геометрия для визуализации попаданий, повреждений
Так же помимо танка в финальном *.max файле будет находиться геометрия, с помощью которой мы визуализируем повреждения внутренних модулей танка и экипажа, далее — XRAY.
Принцип создания геометрии
- Размещаем модули в соответствии с паспортом и референсами (так же как модули для слоя DM). В большинстве танков нужно просто расставить уже имеющиеся модули, но в определенных случаях надо будет моделировать внутренние модули (нестандартные двигатели,трансмиссия и т.д.). Обсуждается при необходимости отдельно.
- Называем эти объекты так же ,как и объекты из слоя DM, которым они соответствуют, но с постфиксом *_xray Например transmission_dm называем transmission_xray
- Детали не должны пересекаться между собой( в очень маленьких танка допустимо небольшое пересечение геометрии)
- Экипаж можно масштабировать в пределах 5%.
- Количество, размер и размещение снарядов должно соответствовать паспортным данным(в случае с танками у которых раздельное заряжание надо будет разделить снаряды и заряды ). Расположение снарядов описывается профилем. Так же боеукладку нужно разделять на модули по 8-15 снарядов(обычно они так и уложены). Для боеукладки раздельного заряжания необходимо чтобы количество снарядов и зарядов в модулях было одинаковое. Профили боеукладки называются ammo_rack_turret_xray и ammo_rack_body_xray для всех профилей в башне и корпусе соответсвенно.
Обязательное требование к XRAY: все нормали в геометрии должны быть направлены на внешнюю сторону!
Некоторых модулей может быть несколько, поэтому нужна нумерация суффиксы с цифрами, там, где это необходимо. Например если мы делаем несколько двигателей, то называем их ammo_body_02_xray, ammo_body_02_xray и т.д. То еж самое про экипаж - если несколько заряжающих, то имена их будут loader_01_xray, loader_02_xray и т.д.
DMG. Модели уничтоженных частей танка
В момент уничтожения или повреждения танка или отдельного внешнего модуля он заменяется на поврежденную модель — dmg.
Поврежденная модель любого из элементов заменяет геометрию целого модуля при его повреждении.
Поврежденная модель не имеет своего отдельного набора текстур — используется исходная текстура танка.
Для всей dmg геометрии делаем лоды, так же, как и для целой, не поврежденной геометрии.
Dmg геометрия траков обязана иметь модификатор skin, в противном случае при повреждении гусениц танка, они будут исчезать, а не заменятся на dmg модель.
Dmg -геометрия лежит в отдельных слоях в *.max- файлах. см. раздел: 2.1. Строение *.max-файла и именование объектов.
Типы dmg моделей:
Функционал | Имя |
---|---|
Неповрежденная модель заменяется на dmg и остается на том же месте. Обычно это намертво приваренные к танку элементы, которые от ударов гнутся, но не отлетают. | Дублирует имя не поврежденной модели с постфиксом _dmg |
Неповрежденная модель заменяется на dmg и отлетает от танка. Обычно это не приваренные модули типа инвентаря (лопаты, кирки). | Дублирует имя не поврежденной модели, но в конце имеет постфикс _dstr |
Одна неповрежденная модель заменяется на две dmg модели: одна часть остается на танке, вторая отлетает. Например запасной внешний бак с топливом. | Оставшаяся на танке часть дублирует имя не поврежденной модели с постфиксом _dmg, а отлетевшая дублирует имя не поврежденной модели, но в конце имеет постфикс _dstr |
Суммируя:
- Dmg геометрия, что остается в том же положении, что и не поврежденная геометрия - дублирует имя не поврежденной геометрии.
- Постфикс _dstr имеет та dmg-геометрия, что отлетает от корпуса.
Некоторые элементы после уничтожения разлетаются на две части, заменяясь при этом на несколько объектов dmg. Например внешний бак на танке:
ex_fuel_tank_02
при взрыве заменяется на следующую dmg геометрию:
ex_fuel_tank_02 — то, что осталось на корпусе от бака и крепежей. ex_fuel_tank_02_dstr — та часть бака, что отлетела.
Некоторые элементы в dmg вообще не имеют самостоятельного отдельного прародителя в целой геометрии. Например отлетающая крышка моторного отделения в целой геометрии является частью корпуса, а при взрыве отлетает от него. При этом новая геометрия может носить любое вменяемое говорящее название, но обязательно заканчивается на _dstr.
Мы не планируем разделять любые отдельные элементы более чем на две части — с оригинальным названием и _dstr. То есть у одного объекта не может быть несколько _dstr.
Все объекты с припиской _dstr разлетаются в разные стороны при взрыве и имеют при себе прикрепленные ноды для эмиттеров под огненные и дымовые шлейфы.
При этом некоторые из dmg, что не отлетают от корпуса, а остаются на нем — так же могут иметь прикрепленные ноды под эмиттеры. Например тот же топливный бак — одна часть улетела, оставив за собой дымовой шлейф, вторая продолжает гореть.
Подробней об этом в разделе: EMTR. Вспомогательные ноды для привязки партиклов и дополнительных внешних модулей.
Требования к Lowpoly геометрии
Модель не должна превышать 140к трианглов в LOD00, но и стремится уместить каждый танк в такой полигонаж не нужно, нужно грамотное использование полигонов. В модель входят:
- ленточные траки
- корпус танка с подвеской и катками и внутренняя часть
- башня с внутренней частью
- пушка с казенной частью
Моделируется танк по эталонным фотографиям. Для моделинга лучше всего использовать заводские чертежи с размерами, но увы, такие чертежи есть далеко не на все танки и чаще всего приходится использовать габаритные чертежи, которые очень неточные и поэтому необходимо каждую моделируемую деталь перепроверять, ориентируясь на имеющиеся фотографии.
Когда нет точных замеров, используются пропорции сопоставления размеров на фотографии и модели в программе Photoshop, Gimp или любом другом аналоге. Это лучшая самопроверка и исправлений в итоге получается гораздо меньше.
Общие требования
В нулевом лоде должны быть промоделены все элементы, влияющие на силуэт танка. Все ручки, люки, фонари, весь инвентарь на корпусе типа лопат и ломов. Требование касается всех «выпуклых» элементов и крупных «вогнутых». Не промоделиваем только совсем мелкие элементы вроде клепок, сварочных швов и прочей мелочи. Но если танк сам по себе слабо детализирован и остается большой запас по полигонам, то можем и клепки и винтики промоделить.
Нельзя делать никакие объемные элементы «плоскими», то есть сдублированными и флипнутыми по нормалям полигонами! В нулевом лоде — только честный объем ,все элементы имеют свою толщину. За исключением решеток с альфа-тестом. Поперечных сплитов должно быть достаточно на мягких изгибах ,чтобы они даже без нормалмапа воспринимались как плавные.
Чего мы добиваемся: низкополигональная модель без карты нормалей, залитая простым серым диффузом должна выглядеть аккуратно и детально, без мусора и изломов в вертексных нормалях.
Мы используем разные группы сглаживания, если грань в модели жесткая. Это обязательно надо учитывать при запекании карт нормалей!
Наибольшая детализация в лоуполи модели должна быть в области башни, куда можно подвести игровую камеру «в упор».
Экстурдим все стенки по паспортным толщинам, потом аккуратно все сшиваем, чтоб не было перекосов или перегибов. Это все делается для более точной внутренней части, чтоб более точно сделать\разместить оборудование для ХRAY, рассадить болванки членов экипажа и для точной DM.
Чуть сложнее это делать для литых корпусов или башен (например башни танков Т-54, Т-10, ИС-3 итд), там зоны бронирования с плавными утоньшениями\утолщениями. Поэтому придется разбивать на большее количество экструдов и потом полученные ступеньки коллапсить по краям.
На внешних частях промоделиваются все детали крупнее гаек и болтов, исключение составляют скрытые или плохо видимые детали (перекрытые опорными катками элементы подвески), на них мы экономим полигонаж.
При моделировании, используйте инстансы на все одинаковые\симметричные объекты вплоть до создания развертки.
В процессе моделинга сразу проводите эджи в неправильных многоугольниках, разбивая их на правильные. Это напрямую влияет на запекание ао и карт нормалей из-за кривого прожекшена.
Сразу выставляйте группы сглаживания (хард/софт эджи для майи) на все полигоны, так как потом отлавливать этих «блох» при выгрузке в движок не очень приятный процесс.
Моделируются честно все крупные люки с возможностью их открытия.
Исключение составляют эвакуационные и технические люки на днище и те люки под которыми неизвестно что находится (обычно такое встречается над МТО).
Внутренняя часть моделируется основными габаритами и крупными деталями, чуть детальнее делается то что напрямую видно из люков танка. Обычно на всю внутреннюю часть танка уходит 5-8 тысяч трианглов.
Промоделивается отверстие в башне под орудие и маску, цапфы желательно на этом же этапе сделать и проверить, чтоб маска орудия вращалась в них на паспортные углы.
Детализация
При моделинге цилиндрических объектов выбираем кратное 2 или 6 количество граней , то есть 2, 4, 6, 8, 12, 16, 18, 24, 32, 36, 48, 64 итд. За редким исключением, например, на ведущих колесах можно использовать 20, 28, 40 граней.
Использовать нечетное количество запрещается, так как LOD01 в итоге будет кривой.
Моделируя ствол орудия опираемся на калибр и выбираем соответсвующее количество граней:
- <30мм – 12 граней.
- 30-45мм – 16 граней.
- 45-120мм – 24 грани.
- >120 – 32 грани.
При моделировании катков, нужно учитывать их количество, тип подвески и диаметр. Это так же относится ко всем цилиндрическим объектам. В среднем:
- 12 граней <200 мм
- 16 граней – 200-300 мм
- 18 граней – 300-400 мм
- 24 грани – 400-500 мм
- 32 грани – 500-650 мм
- 36 граней – 650-900 мм
- 48 граней – 900-1500 мм
- 64 грани >1500 мм
Highpoly
Главное правило: наша цель не в том сделать в хайполи 'сто миллионов' полигонов, а в том ,чтобы промоделить все элементы типа замочков, крышечек, болтиков, фасочек, сгладить округлые поверхности. То есть по сути наша хайпольная геометрия не сильно отличается от лоупольной. Но она глаже и детальней. По сути мы имеем дело не с хайпольной геометрией в привычном понимании этого слова, а с медиум-польной.
Мы используем Zbrush или иную программу для хайполи-моделирования, чтобы помять элементы из мягкого метала. Такие как глушители на выхлопных трубах, жестяные крылья, прикрывающие треки, топливные баки, и прочие элементы из жести. Обязательно скульптим сварные швы, газовые срезы, цифры, штампы и всякие крупные неровности литой брони(прочий мелкий рельеф типа сколов краски, грязи, рельефа ржавчины не нужен), повреждения резины на катках. При этом запекаем все AO и карты нормалей с такой геометрии, используя для оптимизации хайпольной геометрии плагин DeсimationMaster в Zbrush. При этом файлы в формате *.ztl или в формате какого-либо еще пакета для скульптинга, мы не принимаем ,они нам не нужны. Нужна только медиум-поли геометрия в *.max
Для тех элементов, что запекаются с хайполи геометрии на лоуполи, необходимо соблюдать следующие правила:
- Нельзя в хайпольной модели при перепаде высот относительно лоупольной модели делать грани, параллельные вертексным нормалям лоупольной модели, то есть перпендикулярные полигонам лоупольной геометрии.
- Ни в коем случае при моделинге швов (стыки бронелистов, люки) или отверстий не делаем их отдельными элементами поверх основной геометрии хайполи! Швы должны быть именно вогнутыми, врезанными! Требование обусловлено тем, что мы снимаем с хайпольной модели не только карту нормалей (в которой разницы между подходами нет никакой), но и AO.
Лоды (LODs)
Максимальное распределение треугольников:
- LOD00 140000 треугольников
- LOD01 70000 треугольников
- LOD02 5000 треугольников
- LOD03 500 треугольников
FOV игровой камеры — 90 градусов.
Более точное количество треугольников в низкополигональной (игровой) модели и в лодах к ней утверждается для каждого танка отдельно. И может измениться в меньшую сторону в процессе создания.
Переключение лодов должно быть еле заметным. Если оптимизация группы трианглов слишком заметна (например удаление колес, гусениц и прочего из ходовой части на lod02) — необходимо перезапекать нулевой лод на текущий, оптимизированный. При этом используем те же текстуры, что используются для нулевого лода, новые не плодим. Ищем свободное место на текстурной развертке.
Обратите внимание: группы лодов в 3DSmax – единственное место в нашей работе, где мы не используем подчеркивание в названии перед нумерацией. Так исторически сложилось.
Важно! Если сложная конфигурация элементов ходовой части танка не позволяет урезать треугольники до необходимого минимума, а удаление элементов ходовой части слишком заметно при переключении лодов - мы делаем в лоде примитивную геометрию, «охватывающую» ,повторяющую ее основные объемы, и запекаем всю ходовую часть на эту геометрию ,специально для ЛОДов. При этом мы не делаем дополнительную текстуру — все кладем в корпус танка.
Гусеницы (Tracks)
- У всех танков в одной текстуре идет 4 затайленных по вертикали трака, которые будут скроллиться. Обратите внимание ,это важно: 4, а не 3 или 6.
- Количество сегментов в лоуполи вокруг ведущего колеса должно быть кратно количеству зубцов в местах соединения колеса с гусеницами. То есть на 5 зубцов, например, делаем 5 или 10 или 15 сплитов — столько ,сколько необходимо для мягкой скрола текстуры по геометрии траков, без жестких перегибов на сплитах.
- Текстура вокруг ведущего колеса должна быть четко замаплена — один зубец = один трак. Никаких подгонов «на глазок»! Четко — сигменты, соотоветствующие одному шагу зубца — четверть раскладки в высоту.
- В текстуре все объемные элементы, влияющие на силуэт траков, делаем альфа-тестом, ни в коем случае не геометрией. (например зубцы по внутренней части гусениц или внешние выступы траков)
- Для анимации ходовой части необходимо сделать сплит на траке ровно под каждым колесом, которое будет «катиться по земле». В случае если колесо касается и верхней части трака то необходим сплит и наверху.
- Гусеницы тоже используют карту АО.
- В текстурной развертке на гусеницах допускается тайл от 7 до -7.
Skin modifer для траков.
На траки применяется модифер skin. Специально для анимации трака создаются кости, ни на что больше не влияющие, кроме как на трак. Вся анимация трака — процедурная, в 3DSmax ничего не надо анимировать. Кости нам нужны для имитации поведения реальных траков танка: соответствие поверхности ,по которой танк едет, прогибание и натяжение гусениц ,если это было заметно (например у танка). Колеса процедурно анимируются, реагируя на неровности поверхности земли. Гусеницы будут повторять эту реакцию. Что для этого необходимо:
- По нижней части трака режем геометрию дополнительными сплитами по количеству опорных катков.
- Каждый сплит — ровно под центром соответствующего колеса.
- В центре опорных колес создаем кость, которая будет дублировать поведение колеса. Называем кость так же ,как колесо, но с префиксом bone_.
- Жестко прискиниваем каждый сплит к соответствующей кости.
- Все вертексы, не касающиеся земли и не завязанные на кости ходовых колес, прискиниваем к кости root.
Так же мы будем анимировать верхнюю часть гусениц, провисающую, между направляющими катками. Для этого нужно:
- Добавить сплитов на гусеницы над поддерживающими катками, всякими поддерживающими направляющими элементами, в общем — над всем, на что опираются гусеницы сверху.
- Добавить по два — четыре сплита в середине места, где гусеница должна провисать.
- Опустить гусеницу до того состояния, какое возможно на этом танке. Смотрим на референсы.
- Создать кости в центрах «провисов» с тем же направлением осей, что и кости по нижнему ряду гусеницы.
- Назвать кости: bone_phx_track_r_top_01, bone_phx_track_r_top_02 и т.д. Нумеруем спереди назад по направлению движения танка.
- Привязать к ним соответствующие вертексы.
При создании костей для треков важно учитывать следующее: приписку _phx мы добавляем только в верхних ,болтающихся костях. Нижние кости у нас коллизятся с землей, но не анимируются по физике. Им такие приписка не нужны. Более подробно в разделе: «2.2. Bones. Кости для анимации.»
Альфа-канал для траков Гусеницы используют шейдер с two-sided. С помощью альфаканала мы пытаемся имитировать объем гусениц. Геометрия может быть многослойной — для имитации внешних и внутренних поверхностей. Конфигурация, профиль траков в большинстве случаев уникален и его нужно подбирать. Вот один из примеров использования многослойной геометрии для имитации внутренней поверхности:
Поврежденная модель гусеницы Модель сбитого трака (гусеницы) так же использует модифер Skin. Но с поправкой на то, что в сбитой гусенице прискинены к отдельным костям только нижние вертексы, «лежащие» на земле. Все остальные вертексы прискинены к кости root. Кости для провисания гусениц во время движения, не участвуют в скине разбитой гусеницы.
Создание траков
- Шаг 1: Создать правильную хайполи модель трака и сдублировать ее 6 раз, так как нам нужны 4 тайленных запеченных уникальных трака.
- Шаг 2: Создаем лоуполи из плашек, поэтапно начинаем с внешнего габарита.
- Шаг 3: Потом с обратной стороны.
- Шаг 4: Так как этот объем продолжается и с обратной стороны, то добавляем и эти плоскости, чтоб описать внутренний объем трака.
- Шаг 5: Далее добавляем плашку гребня. В данном случае он практически не имеет объема, очень тонкий, поэтому мы и обходимся одной плашкой, обратная сторона и второй ряд гребней будут дубликатами этой же плоскости на развертке. Примечание: все мелкие плашки дублируются по линии симметрии трака, незачем засорять УВ по сути одинаковыми элементами, нам надо чтоб трак оставался как можно более детальным.
- Шаг 6: Описываем детали мелких объемов, в данном случае П-образный выпирающий профиль.
- Шаг 7: Описываем детали мелких объемов, в данном случае П-образный выпирающий профиль.
- Шаг 8: В итоге у нас получается вот такой фейковый объем.
- Шаг 9: Теперь необходимо сделать развертку. Раскладываем плашки вертикально по движению, таким образом что нижние точки на развертке смотрят вперед по оси X.
- Шаг 10: Разрешение запекаемой текстуры 2048х512, поэтому желательно чтоб полученные плашки влезли в 4 тайла, но если ничего не поделать и получается примерно 5, то просто поджимаем, если больше, то значит вы переусложнили модель и не пользовались оверлапом одинаковых элементов.
- Шаг 11: Далее мы смотрим на модель и понимаем, что между эти плашками слишком много пространства.
- Шаг 12: Если мы оставим модель как сейчас, то у нас в игре отчетливо будет видно, что модель состоит и редких плашек и плохая симуляция объема.
- Шаг 13: Считаем что модель готова и запекаем. Запекание траков сразу идеальной не бывает, придется обрабатывать руками в Photoshop.
- Шаг 14: Вырезаем в альфа-канале дырки там где они реально имеются на хайполи модели.
- Шаг 15: Видим что получилось, маловато объема. Поэтому добавляем еще объем описывающий вырезы на грунтозацепах.
Текстурная развертка
В финальной модели должно быть два текстурных канала: первый для всех основных текстур, второй под тайл камуфляжа. При создании раскладки необходимо учитывать, что в ней же у нас будут внутренняя часть корпуса, двигатель. Тексель равен 0.2 — 0.4 сантиметра.
- Корпус - 4096х4096
- Башня - 2048х2048
- Пушка - 2048х1024
- Траки - 1024х512
UV1. Необходимо стараться делать меньше швов. Особенно это касается горизонтальных стыков, у которых нормали вверх направлены:
UV2. Тайл камуфляжа идет по второму, бесшовному каналу раскладки (UV2). Этот канал делаем с помощью сферического мапинга, центр сферы чуть ниже нижней точки танка, весь танк раскладывается в бесшовную сферу.
В некоторых случаях, если конфигурация башни не позволяет красиво накладывать раскраску по единой текстурной раскладке с корпусом — допускается отдельный от корпуса сферический мапинг на башню и пушку.
Имеет смысл делать финальную раскладку когда готовы все элементы танка со всеми лодами. Чтобы камуфляж клался одинаково для всех лодов. Так же предоставляем скрипт для удобства.
Как пользоваться скриптом
- unhide all
- скрыть слои sceleton, DM, Xray
- применить скрипт
- convert to editable poly
Если делаете руками то очень важно не выделять элементы с модификатором skin. А то при конвертации он пропадет.
Основные требования к развертке:
- Не делать автораскладку!
- Если все колеса у танка одинаковые не надо раскладывать их все в одно место. Делать два уникальных.
- Геометрию которую почти не видно делать с более крупным текселем. (обратная сторона маски, днище танка, стороны подвески смотрящие внутрь и вообще все маловидимые поверхности).
- Раскладывать объекты на места поверхностей которые вообще никогда не видны.
- Внутреннюю часть танка раскладывать приблизительно с масштабом в 4 раза больше от основного текселя (потолок внутренней части можно еще с еще большим масштабом, т.к. его почти не видно)
- Стараться сделать объект цельным. Если не получается, класть его части в одном месте. Если делить объект на много маленьких частей полезное место съедается паддингом!
- Бока днища можно раскладывать в одно место.
- Всякие канистры, если их несколько, не надо делать уникальными.
- Стекло, отражатель и лампу фонарей раскладываем в отдельную текстуру (текстуру фонаря выбираем по референсу)
- Нарезку ствола раскладываем в отдельную текстуру.
Принцип выбора нарезки. Берётся референс, считается отношение между шириной нарезки и расстоянием между нарезкой. Если не подходит под эти значения:
- тип А 1/3 на секцию
- тип В 2/5 на секцию
- тип С 1/2 на секцию
- тип Д 1/4 на секцию
то округляется к ближайшему из них и используется этот вариант:
- Решетки радиатора, сетку тканевую раскладываем отдельно. Для них есть тайлы.
- Все лючки и не сильно выпирающие элементы на раскладке мы кладем на то же место, где эти объекты находятся реально на танке. Делается это для того, чтобы при удалении незначительного рельефа на первом же лоде ,у нас сохранились люки на тех же местах, что и в нулевом лоде.
- Деревянные предметы раскладывать горизонтально.
Требования к текстурам
Albedo (карта цвета)
В одной карте содержится Diffuse и Specular Color. Что в пикселе — диффуз или цвет спекуляра — определяется картой «металличности». Диэлектрики используют альбедо как диффуз, а металлы — как карту цвета блика.
Camo Mask (маска раскраски танка)
По маске камуфляжа мы превращаем наш исходный ,сгоревший и разбитый танк в новенький, процедурно «красим» его свежей краской. По этой же маске мы меняем расцветку танка. Для разных танков используются одни и те же тайлы камуфляжа. Сами тайлы рисовать не надо.
Модель перекрашивается на 100% по белым белым пикселям в маске, а по черным остается 100% исходного цвета. Границы между областями могут быть быть «мягкими», данная карта используется как Grayscale, а не Bitmap.
В этой же текстуре, не в отдельной, у нас лежит маска самосвечения. Специально для элементов, которые ночью светиться будут — фонари, прожекторы и т.д. Белое светит, черное — нет. Естественно светящиеся поверхности не меняют расцветку по маске, используют ту же текстуру для самосвечения. То есть при одном и том же текстурном наборе мы назначаем разные материалы на весь корпус и на светящиеся поверхности фонарей.
В этой же текстуре, не в отдельной, у нас лежит маска прозрачности. Специально для элементов, вроде сеток и решеток. Белое — непрозрачный пиксель, черный — прозрачный. Естественно полигоны, на которые применяется шейдер с прозрачностью, не меняют расцветку по маске, используют ту же текстуру для альфа-теста.
То есть при одном и том же текстурном наборе мы назначаем разные материалы на весь корпус, меняющий свою окраску, на светящиеся поверхности фонарей, не меняющие расцветки и на прозрачные элементы ,не меняющие своей расцветки.
Смена раскраски ,самосвечение и прозрачность — взаимоисключающие функции.
NormalMap
Карта нормалей запекается с хайпольной на лоупольную геометрию с окончательно назначенными группами сглаживания на лоупольной геометрии удобным вам способом (3ds max, xnormal, substance designer).
В случае изменения групп сглаживания придется переснимать нормалмап.
Нормал-мап не должен быть инвертированным.
Metalness (карта металличности)
В синем канале канале карты нормалей лежит карта металличности. Металл на по белым пикселям, по черным диэлектрик. Границы между областями могут быть быть «мягкими», данная карта используется как Grayscale , а не Bitmap. Не на 100% белый цвет может означать что металл запылен, окислен, покрыт масляной пленкой, плохо прокрашен, испачкан.
Smoothness (карта «гладкости» поверхности)
Smoothness кладётся в альфа канал текстуры NormalMap
Карта «гладкости» поверхности. В другом варианте PBR иногда используется противоположная карта — карта «шершавости» (roughness map). По сути — инверт по формуле.
Ambient Occlusion (карта рассеяного освещения)
Запекается с хайпольной геометрии удобным для вас способом (3DSmax, xNormal, Substance Designer и т.д.).
В AO должны попасть тени только от хайпольной, или, если это необходимо, только от лоупольной геометрии! Не должно быть никакой путаницы в тенях, затемнений от несуществующих элементов или отсутствия тени от элементов! АО должен быть честным!.
Исключения: не должно быть жесткого затемнения под анимированными элементами и элементами которые отлетают при попадании(у этих элементов придется высветлять АО). Например на корпусе должен быть AO от башни, но не от пушки, и не от ящика на корме башни, так как они изменяют вслед за башней свое положение (поворот) относительно корпуса в процессе игры. Такие моменты лучше не запекать честно на корпус, а делать отдельно, например от условной, фейковой башни, равномерно выступающей во все стороны. Обязательно делать пол для корпуса чтобы получить эффект на днище. Башню так же запекать на плейне, чтобы сымитировать корпус.
На всех моделях в 3DSmax должны быть назначены текстуры в формате *.tga
Танк использует четыре текстурных набора:
- корпус
- башня
- пушка
- траки
Помимо перечисленных текстурных наборов в процессе их создания мы используем текстуру для раскраски танка (camo) и текстуру, имитирующую отражение окружающей среды в движке. Эти текстуры вам делать не нужно — используйте готовые.
Так же наборов может быть меньше или больше. Зависит от размера танка.
Текстурирование танка
Текстурировать танк можете любым удобным вам способом - Photoshop, Substance Designer/Painter, 3DCoat, Mari, Quixel и т.д.
Для нас важно получить готовый набор текстур, которые по качеству не уступают референсному танку.
ВАЖНО! Все фото-рефы (настоятельно рекомендуем использовать текстуры с CGtextures.com в наибольшем разрешении) при добавлении в наш *.psd, сразу, без всяких изменений делаем конвертируем в Smart Object и далее обязательно сохраняем его в таком виде.
Ни в коем случае нельзя впекать в слой его дополнительные эффекты. Такие как OuterGlow, DropShadow, GradientOverlay и т.д.
Pipelines, этапы разработки и приема работы
Мы просим всех наших игроков придерживаться правил:
- Стараться держать нас в курсе процесса создания модели, чтобы избежать серьезных переделок готовой модели.
- Все этапы создания модели должны утверждаться у нас.
- О всех проблемах в процессе разработки просьба сообщать, возможно сможем с чем-нибудь помочь.
- Просим сообщать обо всех самостоятельно обнаруженных недочетах в моделях и текстурах, которые требуют доработки — это облегчит работу и нам и вам и сэкономит наше общее время.
- Если вдруг что-то не понятно или возникают вопросы по пайплайну, задавайте вопросы, возможно мы поможем быстрее чем вы самостоятельно решите проблему.
Этапы разработки модели
- Base mesh — базовая геометрия в формате 3DSmax. На этом этапе требуется уже правильно именовать папки и файлы ,в файле должны быть верно выставлены единицы измерения, повороты моделей, оси. Эта модель должна представлять собой базовую геометрию(болванку) танка. Важно соответствие размеров модели чертежам или иным референсам ,по которым модель создается в 3DSmax. Эта модель нужна чтобы утвердить все реальные размеры всех частей и объектов танка(размер корпуса, колес, длина пушки, калибр, ), углы наклона брони, углы поворота башни, углы наведения пушки и прочее. Не нужно никакой сложной геометрии. В файле должны быть выставлены плейны с назначенными в качестве текстур чертежами боковой ,фронтальной ,верхней проекций и прочих ,если они присутствуют в референсах для модели. Вместе с *.max — файлом с базовой геометрией необходимо прислать и все чертежи, используемые в качестве текстур. Так же на этом этапе нужно проверить достоверность чертежей на предмет совместимости крупных элементов — корпуса, башни и пушки, следующим образом: башня должна вращаться вокруг своей оси не залезая в геометрию корпуса. То же самое про пушку — она не должна залезать в геометрию корпуса в спокойном положении.
- Low Poly — модель, отвечающую нашим техническим требованиям — промоделены все элементы танка, количество треугольников соответствует требованиям нулевого лода. Все лоуполи объекты,которые будут составлять нулевой лод игрового танка в *.max — файле должны быть проименованы правильно.
- High Poly — модель с детально промоделенными элементами танка с фасочками, замочками, пружинками и прочее. В случае, если файл слишком жирный получается по полигонам (2млн треугольников и более) - нет необходимости клонировать в хайполи-модели все элементы, которые реально дублируются, например колеса и треки. Модель должна четко соответствовать историческому прототипу. Важно помнить, что далеко не все чертежи являются истиной в последней инстанции - иногда по фотографиям можно более точно определить характер поверхности. По опыту - скорее всего этот этап будет принят не с первого раза, так как будет демонстрироваться историческим консультантам, которые будут вносить свои замечания. Имена объектов хайполи в *.max нам не важны — как вам удобней работать.
- Sculpt — в данной итерации мы мнем все жестяные элементы танка. Обязательно скульптим сварные швы, газовые срезы, цифры, штампы и всякие крупные неровности литой брони(прочий мелкий рельеф типа сколов краски, грязи, рельефа ржавчины не нужен), повреждения резины на катках. В какой программе делать скульпт — на выбор исполнителя, нам важен результат: жестянки и тонкое погнутое железо должно смотреться естественно и приятно, сварные швы и прочие неровности литой брони должны смотреться естественно. Задача этого этапа — вдохнуть жизнь в наш танк, показать следы эксплуатации, добавить момент присутствия для игроков.
- UV — на наших танках один тексель равен 0.2 — 0.4 сантиметра. В игре тексель будет в два раза крупнее. Не все танки и не все башни или пушки получается утрамбовать в эти границы. Если не получается — обязательно ставьте нас в известность и показывайте модель с текущей раскладкой, будем решать, целесообразно ли увеличивать разрешение текстур для данного танка. Приветствуется уменьшение разрешения для легких маленьких танков. Возможно, что некоторых из них получиться весь танк утрамбовать в 4К на 2К суммарного текстурного пространства.
- Bake — в результате этой итерации мы должны получить грамотные AO и Normal Map. Текстуры должны соответствовать техническим требованиям. Не должно быть никаких неприятных артефактов, модель смотрится аккуратно и приятно. Где надо — паддинг, где не надо - его отсутствие. Важно помнить ,что для вращающихся элементов (колес) нужно запекать нейтральный АО. Чтобы не было освещения четко сверху вниз. После того как принят bake можно заняться финальной частью настройки танка.
- TEXTURING — делаем текстуру любым удобным вам способом.
- Bones’n’nodes — делаем кости и ноды для привязки пулеметов и партиклов, правильно называем и ориентируем. Назначаем skin на объекты, требующие этого(траки, антенны, брезентовая маска, пружины и т.д.).
- LODs — делаем лоды для танка и повреждаемых частей. Кладем по слоям, следим за тем, чтобы имена и пивоты в разных слоях и состояниях совпадали.
- DM, XRAY — делаем геометрию, правильно называем её.
- Final model — в финальной модели вся геометрия названа верно, оси повернуты верно, матрицы объектов исходного размера (100 процентов скейла по всем осям), иерархия всех объектов, костей и нод корректна, танк выгружен в движок, все работает. Отсутствуют ошибки при выгрузке (degenarete, неназначенные смус группы и прочее). Все текстуры приемлемого качества, с правильными названиями и необходимыми каналами.