Разбор создания танка Leclerc Pre-Prototype
В этом проекте я занимался созданием игровой модели раннего пред-прототипа французского танка Леклерк для Armored Warfare от компании My.Games / Mail.Ru. Моей задачей было создание высококачественной, исторически достоверной и оптимизированной для использования в игровом движке 3D-модели танка по полному пайплайну разработки таких моделей.
В материале речь пойдет об этом танке:
C учетом огромного количества полученного опыта, я решил сделать разбор процесса создания этой модели и поделиться полезной информацией. Поехали!
Изучение объекта и сбор референсов
Любой процесс создания технически сложной модели, такой как танк, полезно начинать с углубленного изучения самого объекта моделирования. Это помогает понять механику и конструктивные особенности объекта, обнаружить необходимые фото и видео референсы, узнать технические параметры и в целом "почувствовать" объект. В данном случае это было особенно важно, так как создаваемый танк был собран в железе даже раньше "истинных" прототипов танков Leclerc, существовал в единственном экземпляре и имел не так много фотографий приемлемого качества, как того хотелось бы.
Собранные материалы, как и в большинство художников, я оформлял в единый холст с использованием программы PureRef.
Неприятным сюрпризом стал тот факт, что некоторые части танка были в принципе недоступны для прямого наблюдения из-за отсутствия фотографий, сделанных с нужных ракурсов. В частности, это коснулось верхней плоскости крыши, а также задних частей крыши и шасси. Таким образом, передо мной встала дополнительная задача — нужно было найти максимально близкие по родству и сходству образцы на других танках этой серии, чтобы в дальнейшем выполнить реконструкцию отсутствующих областей.
Блокаут / Драфт
Когда вся возможная информация была добыта (если бы мог — поехал бы на завод производителя :-D), начался процесс создания драфт-модели. Основным требованием на данном этапе было воплощение абсолютно всех деталей, имеющихся на танке, в геометрии, а также корректное расположение этих деталей в пространстве и правильная передача всех габаритов и пропорций.
При создании драфта нет строгих требований к чистоте и качеству полигональной сетки геометрии. Приоритет лежит в обеспечении наличия всех деталей в нужных местах. Тем не менее, я рекомендую все же придерживаться разумной аккуратности — это не только позволит сохранить ее редактируемость, но и может существенно сэкономить время на этапах хайполи и лоуполи. Многие меши из драфта можно использовать в качестве базовых для последующих этапов.
Учитывая высокие требования к точности моделирования и недостаток референсов, общий объем проделанной работы к моменту завершения драфта составил примерно 50% от объема всего проекта. На первый взгляд может показаться, что в таком драфте нет ничего особенного, но на практике оказалось, что это долгая и достаточно трудоемкая задача, если геометрия должна создаваться с учетом строгих требований camera match.
Camera Match — сопоставление виртуальных камер и фотографий
Одновременное сопоставление нескольких камер с фотореференсами низкого качества и моделирование геометрии по получившимся Image Plane'ам таким образом, чтобы все точно совпадало в двух, трех или пяти проекциях — это боль и страдание, переходящее в отчаяние.
Сопоставление камеры с уже имеющейся геометрией модели, особенно если она выполнена точно, может показаться достаточно тривиальной задачей. Совсем другая история — когда геометрии еще нет, и эту геометрию нужно создать так, чтобы каждый уголок и болтик был на своем месте сразу в нескольких сопоставленных с фотографиями камерах.
Изначально я довольно высоко поставил самому себе планку по качеству и точности геометрии, и это в итоге обернулось большим объемом не самой очевидной работы по подгонке основных камер друг к другу и геометрии. К счастью, в итоге все получилось и модель "попала" в фотографии очень точно, что является моим небольшим поводом для гордости. :)
Говоря о camera match как таковом, данная техника по своей сути позволяет использовать в своих интересах перспективные искажения, неизбежно присутствующие на всех фотографиях. Путем одновременного сопоставления нескольких фотографий, загруженных в качестве фона в виртуальные камеры, и подбора верных углов "съемки" и FOV камеры, художник получает возможность получить достаточно много информации о размерах объекта, его частей и их взаимном расположении.
В случаях, когда точные размеры объекта, его инженерные чертежи или другие достоверные источники информации о взаимном расположении деталей недоступны, пожалуй, только аккуратный и въедливый camera match позволяет при моделировании приблизиться к верным геометрическим параметрам всего объекта в целом. Когда нужна достоверность модели, приблизительное моделирование "на глаз" неприемлемо.
Немного личного опыта по camera match:
Совет #1. При сопоставлении камер учитывайте детали объекта, которые могут двигаться или вращаться. Например, на этом танке многие ключевые элементы подвижны: башня, пушка, колеса (они на подвеске), прицелы командира и стрелка, антенны. Заранее достоверно очень сложно определить, повернуты ли на имеющихся фотографиях эти объекты, и если да — то насколько?
Как показала практика, даже небольшие отклонения во вращении на несколько градусов от нулевой точки или от фотографии к фотографии могут "сломать" попытки точного сопоставления в нескольких камерах одновременно.
Практический пример: многие машины, в том числе и танки, имеют системы подвески. Объект на фотографии, особенно если он снят в движении, может "присесть" или "вытянуться" на своей подвеске, что сделает его профиль более низким или высоким, чем он должен быть (в нейтральном положении).
Из-за перспективных искажений даже небольшой поворот башни танка на 1-2 градуса может сместить дальние по отношению к оператору элементы конструкции в сопоставленных камерах на десятки условных пикселей, что при моделировании может вылиться в погрешности на десять-пятнадцать сантиметров, а иногда и более.
В общем, старайтесь делать привязку только к заведомо неподвижным элементам конструкции.
Совет #2. Field-of-View, или FOV — самый важный параметр камеры при ее сопоставлении с фотографией. Для точной настройки необходимо очень близко "попасть" в нужную величину FOV, иначе геометрия не будет совпадать с фотографией. Под "близким" попаданием в данном случае имеются ввиду десятые доли градуса — в особенности это касается больших объектов, измеряемых метрами.
Прикинуть стартовое значение для подбора FOV относительно просто — достаточно изучить заведомо параллельные линии на фотографии. Если они остаются почти параллельными на большом отрезке снимка — скорее всего, FOV низкий. Если линии "сходятся" быстро и на небольшом отрезке снимка — FOV достаточно высокий.
Совет #3. Не забудьте заморозить параметры камеры после каждой настройки! Испортить точно выставленный camera match, если камера доступна для редактирования, слишком просто и обидно, особенно если Undo уже недоступен.
Совет #4. По возможности используйте необходимый минимум изображений. Три снимка, снятых с разных ракурсов, будут хорошим компромиссом между точностью и простотой настройки. Когда изображений становится больше, "связать" их между собой становится значительно сложнее.
Высокополигональная модель
Когда драфт-модель была закончена и утверждена историческими консультантами, началась работа над высокополигональной моделью. Так как базовая геометрия практически полностью могла была быть взята с драфта, я решил использовать SubD поверхности для создания highpoly. Учитывая высокие требования к качеству модели, особое внимание было уделено обеспечению отсутствия артефактов сглаживания и характерных "потяжек" сабдивов.
Для моделей, предназначенных для использования в играх и игровых движках, может быть целесообразно несколько преувеличивать закругленность ребер и граней геометрии. Делая углы и грани "мягче", чем они должны быть в реальном мире, художник обеспечивает хорошее запекание таких деталей в карту нормалей на более позднем этапе разработки модели.
Напротив, использование чрезмерно реалистичных закруглений на гранях геометрии не позволит адекватно запечь эти детали в карту нормалей. Ограничивающие факторы здесь — это ограниченное разрешение самой карты нормалей и сжатие текстур в игровых движках. Кроме того, такие оптимизированные грани геометрии лучше передают световые блики (specular highlights) и дольше сохраняют их по мере отдаления камеры. В конечном итоге все это делает модель более визуально интересной и объемной.
Еще одна сфера интересов художника при создании качественного highpoly методом SubD — использование корректной топологии базового меша. В большинстве случаев в пределах одного объекта/тела его фаски имеют одинаковый радиус закругления, т.е. параметры сглаженности должны быть одинаковыми и симметричными на всем протяжении соответствующих ребер. Добиться этого можно путем использования поддерживающих эдж лупов, вершины которых равноудалены от сглаживаемой геометрии.
На данном highpoly, как можно заметить, отсутствуют сварные швы и прочие мелкие детали поверхностей. Они были добавлены позже при помощи Substance Painter — вписаны прямо в карту нормалей при помощи соответствующих кистей. Это сэкономило много времени, избавив от необходимости скульптинга сварных швов.
Выше вид на подвеску танка. Найти подходящие референсы было сложно — более поздние прототипы и серийные модели использовали совершенно другой тип подвески, сменив торсионную систему на гидропневматическую.
Еще одной интересной задачей стало физически корректное "накручивание" гусениц танка на ведущие звезды. Путем множества мелких изменений мне удалось подобрать корректные параметры размера отдельного звена гусеницы, расстояния между звеньями и углами поворота гусениц в местах изгибов. В конечном счете, гусеницы сели на звезды почти как родные. :)
Тканевые элементы на башне и пушке создавались с использованием симуляции nCloth в Maya. Первым порывом было просто наскульптить эти складки, но эксперименты с симуляцией дали отличный результат, поэтому решено было использовать именно этот метод.
Банальный, но не всегда очевидный нюанс: модель должна быть физически корректной. Например, башня танка должна свободно вращаться на 360 градусов, не допуская проникновения одной геометрии в другую. Чтобы этого добиться, необходимо достаточно точно вычислить опорную точку вращения башни. Погрешность даже на несколько сантиметров может привести к тому, что башня, даже будучи точно смоделированной по camera match, при вращении будет задевать элементы шасси.
Аналогичные требования и к орудию — допустимые углы наводки обычно известны, поэтому орудие, как и башня, даже в крайних положениях не должно проникать к другую геометрию.
Качественная модель состоит из множества более мелких элементов. На башне этого танка можно обнаружить пулемет стрелка, который в других обстоятельствах вполне сошел бы за самостоятельную модель. :) Его модель выполнена по тем же принципам и с тем же вниманием, что и весь остальной танк.
Низкополигональная модель
Создание низкополигональной модели не имело каких-то существенных особенностей. Могу лишь подчеркнуть необходимость корректного создания цилиндрических объектов — как правило, количество сегментов цилиндра находится в прямой зависимости от радиуса. Чем больше радиус — тем больше сегментов необходимо объекту, чтобы он имел приемлемую форму, и наоборот.
Также могу обратить внимание на базовый шейдинг модели — заметьте, что даже без карты нормалей танк выглядит адекватно. Когда шейдинг низкополигональной модели в целом соответствует шейдингу высокополигональной модели — это хорошо, так как запеченной карте нормалей не нужно будет компенсировать аномалии шейдинга. Следовательно, в карте нормалей будет меньше так называемых "градиентов" — она будет лучше поддаваться сжатию в игровом движке, а LOD-модели будут выглядеть лучше (если они используют ту же карту нормалей).
Технические специалисты рекомендуют избегать чрезмерно узких и вытянутых треугольников — их можно "укротить", добавив несколько дополнительных вертексов и эджей в нужной области.
UV-маппинг и запекание текстур
При UV-маппинге любых объектов хорошей идеей будет выкладывание UV-шеллов таким образом, чтобы области, соседствующие в трехмерном пространстве, находились в той же конфигурации и в UV-пространстве. Говоря проще, если левая боковая часть башни находится слева относительно ее крыши, то и в UV-пространстве желательно расположить ее UV-шелл слева от шелла крыши.
Это несет в себе массу преимуществ, начиная от "читаемости" UV-маппинга до более качественного наложения тайловых текстур, которые не мапятся на каждую модель индивидуально, а используются глобально.
В данном случае такая выкладка UV была требованием, поэтому UV-маппинг был выполнен соответствующим образом. У меня получилось добиться хорошей конфигурации практически во всех случаях, благодаря чему тайловые текстуры камуфляжа, используемые в игре, ложатся на данный танк практически без очевидных швов.
Совет: не пренебрегайте возможностью выпрямления (straighten) ваших UV-шеллов. Корректно выпрямленные UV минимизируют алиасинг (появление характерных "лесенок") в текстурах, а также упрощают упаковку. С опытом ко мне пришло понимание, что выпрямлять нужно все, что в принципе можно выпрямить — преимуществ такого подхода гораздо больше, чем недостатков.
На моделях, которые задействуют сразу несколько материалов и текстур, где каждый комплект использует собственные UV-координаты, важно придерживаться единого Texel Density на всей модели. Лучше всего знать свой целевой TD заранее и планировать работу по UV-маппингу и раскладке UV, исходя из этого знания.
Хороший UV-маппинг подразумевает последовательность в ориентации UV-шеллов в пространстве текстурного квадрата в контексте их расположения в трехмерном пространстве сцены. Используйте текстуры-чекеры со стрелками, которые иногда называют "gravity checker", чтобы дать себе визуальный ориентир для раскладки и вращения UV.
На практике это означает, что, к примеру, все боковые поверхности модели должны быть направлены снизу вверх (по направлению гравитации), а все горизонтальные — слева направо. В результате, если упростить, все стрелки на чекере будут указывать в одном направлении.
Это может быть важно по той причине, что некоторые текстуры имеют ярко выраженную направленность — например, дерево часто имеет длинные волокна, которые заметны на текстуре. Если UV-шеллы будут выложены непоследовательно, то и текстура на них ляжет как попало. Это сильно снизит качество текстурирования объекта.
При запекании карты Ambient Occlusion важно учитывать тот факт, что некоторые части объекта могут вращаться или двигаться. Например, на этом танке башня вращается вместе с пушкой — просто так запечь AO нельзя, иначе на корпусе танка будет темный участок от орудия, который станет неуместен, если башня начнет вращаться.
В таких случаях можно заменить подвижную геометрию на ее некую обобщенную прокси-форму, чтобы создать условный объем, относительно которого и запечется AO. В данном случае при запекании башня была подменена на обычный цилиндр, который позволил шасси получить "обобщенный" AO без отчетливых индивидуальных деталей.
Еще раз упомяну о необходимости минимизации градиентных переходов в карте нормалей. Поддерживайте адекватный шейдинг низкополигональной модели и нарезайте UV-координаты на шеллы таким образом, чтобы "жесткие" эджи (или группы сглаживания) позволяли добиться нужного вам шейдинга.
Низкополигональная модель с картой нормалей
Наконец, усилия начинают окупаться — низкополигональная модель с примененной к ней картой нормалей выглядит практически неотличимо от высокополигональной модели. Обратите внимание на появившиеся сварные швы — как я и писал выше, они были добавлены в карту нормалей при помощи Substance Painter.
Изображение с наложенной поверх сеткой.
LOD и модель повреждений
При создании LOD-моделей приоритетом является сохранение крупных форм и силуэта объекта, и одновременно с этим — сокращение сложности модели за счет мелких объектов и малозаметных деталей. Некоторые мелкие элементы, такие как болты и плоские панели, могут удаляться довольно безболезненно для внешнего вида объекта. Для этого такие мелкие элементы, помимо обладания собственной геометрией и картой нормалей, должны быть запечены в карту нормалей прямо под самими собой.
Например, болт может иметь собственную геометрию в LOD0 (исходный объект), но одновременно с этим быть запеченным и в карту нормалей элемента, который находится прямо под ним (например, какая-нибудь панель). В таком случае при создании LOD-объектов геометрия этого болта может быть удалена, но информация о нем сохранится в карте нормалей — и визуальной разницы на определенном удалении практически не будет.
Некоторые элементы перестают упрощаться по достижении некоторого предела по количеству треугольников.
Модель разрушенного состояния танка, по сути, является той же самой геометрией, у которой некоторые элементы удалены, выкручены, оторваны или согнуты.
Финальный результат
На этом разбор процесса создания закончен. Вопросы можно задавать в комментариях. В качестве завершающего аккорда — несколько картинок финального результата. Если вам понравилась моя работа и этот разбор — с благодарностью приму лайки на ArtStation и не откажусь от фолловеров. :)
https://www.artstation.com/artwork/58lm4w
Всем спасибо за внимание!