Making of ORSIS T-5000 Sniper rifle

Привет всем! Меня зовут Александр Косинов или topSSSpot в сети. Основную часть своего времени я работаю 3d lead artist'ом в небольшой студии, над разработкой 3d контента для AR проектов. В свободное время работаю над небольшими фриланс проектами или же делаю что для себя. В этой статье я хочу рассказать коротко о создании одной из своих работ "ORSIS T-5000 sniper rifle". Рассказать об основных этапах работы и о своем подходе к данной задаче. Работа выполнялась в Blender, Substance Painter, Marmoset Toolbag и Krita.

Мотивом для создания винтовки послужило, главным образом удовлетворение своего желания поделать что то на свободную тему, то что хочется. А так же в планах было освоить некоторые инструменты Blender, т.к на момент начала я только совершил переход с 3ds max. Данную персональную работу делал в промежутках между рабочими проектами с некоторыми периодами полного забрасывания и возвращения к ней спустя время, что конечно же затянуло процесс. :)
Когда полностью определился что буду делать оружие, мне захотелось выбрать что то не совсем типичное, что мало встречается в галереях, т.к. какими-нибудь AK или M4 мне показалось мало кого можно удивить, как бы они не были выполнены.
Перед тем как начать работу я всегда выделяю не мало времени на то что бы собрать требуемое количество референсов, к которые входят: фото, чертежи, видео и просто текстовое описания. В общем все что может помочь понять об устройстве, принципе работы и размерах объекта. Так же я всегда выделяю время на просмотр подобных работ выполненных другими 3д артистами, что бы набраться вдохновения, а так же это может помочь зарождению каких то интересных идей. Что бы удобно закрепить все собранные референсы на экране я использую программу PureRef, которая позволяет очень легко собирать их в коллаж.

1.jpg

1. Коллаж референсов в программе PureRef
При создании игровой модели, когда планируется запекание карт normal map с high-poly модели, я придерживаюсь последовательности моделирования начиная с mid-poly, затем из нее делаю high-poly и low-poly. Такой подход позволяет легко внести какие либо изменения в последующем.

2.jpg

2. Mid-poly, high-poly, low-poly на примере одной детали
Но самым первым шагом в моделировании было создание совсем примитивной болванки или скетча, для того что бы определится с основными пропорциями. На донном этапе я не думаю о сетке и мелких деталях, только основные формы.

3.jpg

3. Начальный скетч
После того как скетч готов я плавно перехожу к созданию mid-poly. Уточняю формы, разделяю на отдельные детали, прорабатывая каждую более точно, не забывая о том как они должны функционировать, какие части будут подвижные. На данном этапе я стараюсь уже делать ровную, так называемую правильную топологию, квадами. В дальнейшем она поможет быстро превратить нашу mid-poly в high-poly, а так же быстро оптимизировать до low-poly не делая ретопологию.

4.jpg

4. Готовая Mid-poly
Особое внимание на этапе создания mid-poly, я всегда уделяю скругленным формам, стараюсь сильно не экономить на гранях и использовать их количество кратное 2. Например цилиндры с количеством граней 16, 24, 32 и т.д. Это поможет легко урезать грани через одну на этапе low-poly если потребуется. Урезать ведь всегда проще чем потом добавить.

5.jpg

5. Пример оптимизации цилиндрических деталей
Так же на mid-poly не делаю поддерживающих ребер и фасок, характерных сабдив моделенгу, что бы потом не удалять их на этапе low-poly.
По завершению этапа mid-poly я еще раз проверяю всю функциональность подвижных частей, что бы во всех состояниях не оказалось так, что геометрия где то пересекалась или не совпадала с составными деталями. После этого копирую все в новый слой и перехожу к созданию high-poly модели.
Весь этап создания high-poly модели заключается в назначении сабдивижн модификатора на каждую деталь, добавлении на нее поддерживающих граней для создания фасок, а так же добавления более мелких деталей, которые будут запекаться в normal map.

6.jpg

6. Hight-poly на примере одной из деталей
Я уделяю особое внимание фаскам, постоянно сравнивая их с фото. Важно иметь ввиду что фаски не одинаковые на всем объекте, где то они более ярко выраженные, а где то более острые. Именно поэтому я не использую модификатор Bevel почти никогда, а предпочитаю делать их одноименной операцией в режиме редактирования локально или же путем создания поддерживающих граней инструментом Loop Cut and Slide.

7.jpg

7. Готовая High-poly
Вновь скопировав mid-poly модель на другой слой, перехожу к оптимизации сетки, созданию low-poly версии модели. Каких то ограничений в количестве треугольников я для себя не ставил, поэтому весь объём работ заключался лишь у удалении граней не влияющих на форму, т.е при удалении которых, форма остается неизменной. Периодически включаю слой с High-poly моделью сравнивая совпадение.

8.jpg

8. Совпадение Low-poly c High-poly
Процесс довольно рутинный и скучноватый. Для быстрой оптимизации, некоторых не сложных деталей, часто использую следующий трюк: выделяю все полигоны, удаляю грани функцией Limited Dissolve (клавиша X), затем не снимая выделения триангулирую все (ctrl+T), а затем снова преобразую в квады где это возможно, функцией Tris to Quads (alt+J). Это помогает сэкономить не малое количество времени. Однако нужно быть аккуратней с деталями где есть много скруглений. Хотя часто даже на сложных деталях это хорошо срабатывает.

9.jpg

9. Последовательность оптимизации с помощью Limited Dissolve
Всю работу с UV я так же проделал в Blender. Сначала я наметил швы и развернул все детали.
Для быстрого обозначения швов я часто использую функцию выделения ребер Sharp Edges. В большинстве случаев она срабатывает отлично.

10.jpg

10. Выделение ребер функцией Sharp Edges
Что касается разворачивания самих шеллов, тут я старался максимально выравнивать изогнутые шеллы и так же разворачивать их параллельно\перпендикулярно краям UV листа, что бы максимально избежать пиксельной лесенки.
После того как все детали были развернуты, я определился с тем сколько UV листов я буду делать и какие детали в них включать. Мне хотелось сделать что бы каждая отделяемая от винтовки часть, имела свою UV и были независимы от остальных частей, а так же сделать текстуры пригодными для близких ракурсов.
Для компактного пакинга я использовал add-on UV Packmaster. В отличии от стандартного пакера, он учитывает форму каждого шелла и в соответствии с этим укладывает их очень компактно. Благодаря этому на пакинг всех листов ушло не более часа. В итоге у меня вышло 8 uv листов: винтовка, приклад, прицел, сошки, планка для предобъективной насадки, магазин, затвор, патрон.

11.jpg

11. Общее количество UV листов для всех частей винтовки
Для того что бы корректно запеклись карты normal map, я назначил sharpness грани из UV шеллов, кнопкой Mark Seams from Islands.

12.jpg

12. Mark Sharp из UV шеллов
Для запекания всех отделяемых и подвижных деталей, я переместил их на некоторое расстояние друг от друга, что бы не возникло артефактов при их пересечении.

13.jpg

13. Детали на расстоянии друг от друга для запеканияЧто бы иметь больше контроля при запекании, я использовал cage. Его создал из копии low-poly модели. Offset задал ему путем выделения всех вертексов и скейлом в направлении их нормалей (alt+s).

14.jpg

14. Low-poly, High-poly и Cage
Что бы в дальнейшем было удобно назначать маски в Substance painter, я обозначил на high-poly модели все основные материалы по средствам vertex color, что бы потом запечь карты id.

15.jpg

15. High-poly с vertex color
Экспортировал все детали отдельными fbx, отправил в Substance Painter для запекания. При запекании важно не забыть поставить галочку use cage и указать путь на файл с cage. Для финального запекания почти всегда включаю максимальный sempling 8×8. Время запекания правда значительно увеличивается, но результат того стоит.

16.jpg

16. LP с запеченными текстурами
Т.к. у меня вышло много деталей, каждый отдельный uv лист я собирал в новой сцене Substance Painter что бы не иметь просадок в производительности и комфортно работать.
Текстурирование я всегда начинаю с создания очень простых базовых материалов, разбиение их на группы и назначение масок этим группам.

17.jpg

17. Базовые материалы с назначенными масками
Затем работаю с каждым материалом, добавляю им потертости, сколы, грязь, пыль и т.д уже отдельными слоями, если такие у материалов имеются. Но как вы наверное заметили у меня почти нет ярко выраженных царапин, грязи и прочих подобных эффектов. Это связано с тем что я пересмотрел просто огромное количество референсов и нигде не встретил изрядно потрепанной винтовки (впрочем и не было в планах ее такой делать). Как правило за оружием очень хорошо следят и поношенности не всегда и не везде уместны. К тому же современное оружие имеет очень прочные, износостойкие покрытия вроде Cerakote.
После того как все базовые материалы проработаны, я добавляю различные мелкие детали вроде надписей, царапин в местах где они возникают из-за трения деталей или следы от обработки металла. Работа с каждым материалом выглядит примерно одинаково.

18.jpg

18. Набор слоев на примере одного материала (Основное покрытие винтовки)
По окончанию создания текстур для детали, я сразу же отправляю их в Marmoset Toolbag и смотрю как это выглядит там с разными HDRI. Для быстрой отправки и сборки в Marmoset пользуюсь замечательным плагином Substance Painter Live Link, который позволяет это сделать почти в два клика, притом не только в Marmoset.
Таким образом, по мере готовности всех текстур, перехожу к настройки сцены в Marmoset для финального рендера. Создаю и закрепляю камеры, удачных по моему мнению ракурсов, включаю у камер пост эффекты, если требуется. Из пост эффектов у камер почти всегда использую Sharp, немного Bloom, а так же Tone Mapping с режимом Filmic.

19.jpg

19. Настройки пост эффектов у камеры
Для освещения сцены пользуюсь не стандартными HDRI что есть в программе, а подбираю с сайта hdrihaven.com. Огромное спасибо авторам этого сайта за предоставление такой обширной библиотеки бесплатных HDRI.
Для некоторых HDRI в добавок к их собственному свету, создаю еще несколько ИС для более интересных бликов, а так же что бы подсветить совсем темные места.

20.jpg20. Дополнительные ИС кроме HDRI

Выбрав нужные ракурсы и сделав рендеры, приступаю к небольшой пост обработки их в Krita.
Основные действия которые я делаю на этом этапе, это настройки экспозиции, контрастности и насыщенности. Так же увожу черные тени в какой либо оттенок при помощи curves с настройкой каналов по отдельности. Настраиваю немного баланс белого, если требуется. Еще добавляю немного хроматических аберраций, виньетирование (для ракурсов где не использовал эффект vignette в marmoset), и слегка резкости. Последним слоем иногда добавляю ч\б текстуру каким либо эффектом (гранж, дым, пыль) в режиме смешивания Linear Dodge, сбрасывая прозрачность. По моему мнению это добавляет некоторой атмосферности.


21. Сырой рендер из Marmoset

22.jpg

22. Слои в Krita.
Пожалуй это все основные шаги которые привели к такому результату.

23.jpg

23. Результат
Итог: Разумеется не все так идеально шло как я описал. Как я упоминал ранее, я несколько раз совсем прекращал работу, а когда возвращался вновь, то некоторый наработанный результат меня уже не устраивал или возникали какие то новые идеи. Таким образом приходилось откатываться назад и что то переделывать. Например я переделывал LP модель, т.к изначально не планировал делать совсем близких ракурсов и прилично урезал полигонаж. Так же было с разверткой, я переделывал наборы UV листов несколько раз, прежде чем сделал для каждой отделяемой детали свой набор текстур. И это далеко не все, недочетов все же осталось не мало, которые я конечно же учту в будущих проектов. Мир вообще не идеален, поэтому не буду нарушать баланс. :) Но пересматривать цели, быть вредным заказчиком самому себе и критично смотреть на полученный результат все же иногда полезно.
Спасибо всем за Ваше внимание, что прочитали столько много букв. Надеюсь нашлось что то полезное среди них. Всем добра!

24.jpg

26.jpg

721 0 850 21
4
2019-05-14
Красивая палка
2019-05-14
Красиво
2019-05-14
Честно? Чёт наверное проекты эти выглядят не лучшим образом. На скрине работа Джуна, которая ещё и представлена ужастным образом просто ашдиаркой в мармосете, даже без игры света.
2019-05-14
А рендерить в Blender не пробовал? Тот 2.8 дает на порядок выше возможностей по настройке, чем 2.79. Многие пишут, что Marmoset удобнее, но на мой взгляд такой результат легко можно получить и в Blender, тем более что на выходе текстурные PBR карты для любого рендера.

И совет: размещение в кадре объектов. Уж очень он упирается в края. Понимаю, что хочется его максимально близко показать, но неправильная композиция может знатно подпортить рендер.
RENDER.RU