О том, как сделать свой первый 3DAsset

О том, как сделать свой первый 3DAsset
О том, как сделать свой первый 3DAsset

Доброго времени суток Всем и не-Всем! Этот пост открывает цикл статей, посвященных моему опыту 3D-моделирования при создании мешей для одного небольшого проекта (о нем можно почитать тут).

Любую задачу, даже весьма сложную, можно представить как сумму простых. И чтобы не моделировать геометрически сложные объекты, я начал с простого 3DAsset металлических ящиков.

О том, как сделать свой первый 3DAsset

Оглавление

О том, как сделать свой первый 3DAsset

Прелюдия

Перед тем как приступить к моделированию, стоит ответить на ряд вопросов?

  • Какую роль выполняет модель в проекте?
  • Какое требование к модели?
  • Как выстроить пайплайн?
  • Как моделировать?

Так как вопрос «Какую роль выполняет модель в проекте?» напрямую отсылает к вопросам Рубрики «Идея» (об этом тут), то здесь я дам ответ без дополнительной аргументации. Итак, какое требование к модели?

В проекте мною будет использоваться такой принцип, как «повествование через окружение». Фокус данного принципа будет установлен на предмет, как объект повествования. Реализация принципа ложится на плечи таких игровых механик, как:

  1. Взаимодействие с предметами на игровом (основном) экране;
  2. Взаимодействие с предметами в отдельном окне интерфейса.

В таком случае модель должна:

  1. Иметь плотную сетку для нанесения различных повреждений;
  2. Иметь множество деталей, которые в той или иной степени работают на погружение.

Требования определены, а значит пора заняться выбором инструмента.

Вопрос «Где моделировать» был практически сразу решен - выбор пал на Blender. Почему? Думаю, что на это можно и не отвечать.

А вот с «где будет реализован проект?» всё было намного сложнее. Изучение началось со статьи на Хабре, где был представлен список игровых движков. Несколько часов мытарств; чтения чем хорош или плох тот или иной софт; «Может самому написать движок с нуля?»; «Ты не умом, а сердцем выбирай!»; «Утро вечера мудренее»; «А что там скажет астролог?». В некоторой апатии я вышел из чата собственных мыслей и отправился спать.

Утром, перечитав список требований, вспомнил, что где-то есть технология, которая позволяет вписать в сцену миллионы миллиардов треугольников. Название у технологии еще такое интересное - Nanit. А вдруг ложь и происки маркетинговой политики капиталистической машины вранья? Нужно разобраться...Раз, два, три. А с этим можно поэкспериментировать. Я выбрал Unreal Engine 5.

Чем доить корову - понятно, но как? Разработаем пайплайн для моделирования!

Классическая последовательность при проектировании статической 3D-модели может быть представлена в следующем виде (материал взят тут):

  1. Драфт (Блокинг, детализация);
  2. Сетка (HighPoly, LowPoly);
  3. UV - развертка;
  4. Запечка;
  5. Текстурирование.

Индивидуально под проект классическая структура была несколько видоизменена и стала выглядеть следующим образом:

  1. Драфт (Блокинг, детализация);
  2. Сетка (HighPoly);
  3. UV - развертка;
  4. Текстурирование.

Логика удаления таких этапов как «LowPoly» и «Запечка» - отброшены в виду того, что модели в конечном варианте будут использоваться в UE5, где есть Nanit, которому можно скармливать высокополигональные модели.

Сам метод HighPoly моделирования после прочтения (Тут) пал на классический SUBD.

Отлично! Получены ответы на поставленные выше вопросы, а значит можно переходить к моделированию.

О том, как сделать свой первый 3DAsset

Изображения, которые послужили референсами для моделей, я прикладывать не буду по причине того, что на них нанесена символика бренда, что может быть интерпретировано как скрытая реклама, а оно мне надо?

Пора начать. Во-первых, произведен менеджмент папок коллекции сцены согласно пайплайну.

где, «Modeling» соответствует пайплайну (см. выше); «Import» - папка, модели которой предназначены для переноса в соответствующий софт; «Final» - папка с итоговыми (конечными) версиями моделей.
где, «Modeling» соответствует пайплайну (см. выше); «Import» - папка, модели которой предназначены для переноса в соответствующий софт; «Final» - папка с итоговыми (конечными) версиями моделей.

Данная структура в процессе работы позволяла мне в случае фатальной ошибки (что было часто в виду небольшого опыта) на этапе HighPoly сделать бекап до стадии DraftDetailBlocking и продолжить моделирование HighPoly. А при использовании методики классического SUBD в создании высокополигональной модели - дает заметную экономию энергии и сил, когда ты (я) напортачил с сеткой.

На этапе DraftGeneralBlocking получены следующие результаты:

На этапе DraftDetailBlocking необходимо было сделать детализацию модели. Так как каких-либо мелких деталей на референсах мною замечено не было, то основная часть работы - скругление формы за счет модификатора Bevel.

Результат можно посмотреть ниже:

Модели практически готовы. Осталось добавить модификатор Subdivision Surface. При использовании модификатора установил негласные правила:

  • Для мелких, незаметных, скрытых объектов (гвозди, болты и т.д) использовать 0-1 итерацию модификатора.
  • Для всего остального не выходить за границы 2-3 итерации.

После применения модификатора:

С этапом моделирования все. На очереди UV - развертка. Обозначаю швы и получаю:

Нанесение текстур производилось в Substance Painter. Текстуры наносились с разрешениями 1024х1024 и 2048х2048. Мой опыт создания материалов и текстур в Substance Painter я освещу в отдельном посте (ссылка будет добавлена позже). Полученный результат с разрешением текстур 2048х2048:

О том, как сделать свой первый 3DAsset

В процессе создания 3DAsseta я получил следующие данные:

1) Количество треугольников на различных этапах моделирования;

2) Вес файлов с моделями на различных этапах моделирования;

3) Вес текстур разрешения 1024х1024 и 2048х2048;

4) Данные с плотностью упаковки островов на UV - развертке.

Таблицы с данными представлены ниже:

На данном этапе разработки вопроса с оптимизацией не ставится, однако полученные данные позволяют заранее проложить пути вероятной дальнейшей работы. Можно обозначить следующие возможности:

  • Оптимизация моделей средствами UE5;
  • Оптимизация за счет уменьшения числа полигонов;
  • Оптимизация за счет уменьшения качества текстур для предметов, не влияющих на игровое восприятие;
  • Оптимизация за счет объединения текстур моделей в текстурные атласы.

Относительно первого пункта планируется отдельный пост (ссылка будет добавлена позже). Оптимизация за счет уменьшения числа полигонов может происходить под руководством модификатора Decimate. Также уменьшить количество полигонов можно путем запекания мелких деталей (гвоздей, болтов и т.д) на карты нормалей (об этом позже тут). Вопросы, касающиеся текстур и текстурных атласов, будут также подняты лишь тогда, когда будет понимание того, как устроен уровень (об этом позже в отдельной статье)

О том, как сделать свой первый 3DAsset

У подножия поста хочется выдохнуть и сказать: «Это мой первый опыт письменной рефлексии, но не последний. Дальше больше. Спасибо за внимание, Читатель!»

44
8 комментариев

Дядька целую курсовую написал по моделлированию кубика с ручками) Хех) Немного критики. Развёртка ультра неправильная для игрового движка. Всегда проверяй текстуры чекером, в особенности пока учишься моделить. Нет смысла стремиться разрезать всё одним швом, лучше каждую сторону отрезать отдельно, но чтобы она была без потягов и всегда по максимуму выравнивай шеллы. Главная задача МАКСИМАЛЬНО заполнить юви пространство, у тебя же первый бокс к примеру тусуется на четверти пространства. То есть на 4к текстуре он будет занимать всего 1к пикселей по высоте, понимаешь?) Если бы ты разрезал как надо на части, то и разложилось бы всё куда плотнее.
В общем, если надо могу написать развёрнутее и по остальным пунктам, но выглядит в целом странно, когда чуть ли не научную работу пишут по очень простому и при этом слабо исполненному проекту. Я не издеваюсь, если что, просто мысли вслух.

2
Ответить

Буду благодарен, если и по другим пунктам тоже распишите

2
Ответить
1
Ответить