Мой первый пайплайн по персонажу 3D
Добрый день всем пикабушникам и 3дшникам отдельный привет.
Всегда хотел сделать что то серьезное в 3D, работа моя совсем не связана с творчеством, я инженер в сервисном центре, но в 3д тянуло всегда, с самого первого открытия 3д программы Blender, который как я помню еще помещался на дискете, когда я учился в колледже в далеком 2005 году (печеньку Гаса по HTML обучалкам). На первом курсе пока не работал много увлекался 3Д, но в дальнейшем в эту сферу так и не окунулся. До сегодняшнего для, с промежутками в несколько лет периодически возвращался к 3Д как к хобби.
Задумал я сделать первый пайплайн по персонажу, честно скачал курс школы XYZ (под 100 Гб) с рутрекера и начал скульпить, это был для меня первый серьезный скульпт в ZBrush, делал его смотря курс, ушло на это дело больше двух месяцев, конечно не каждый вечер ну и на работе иногда, вообщем когда было свободное, переделывал бывало по нескольку раз почти все, но думаю не плохо освоил ZBrush.
Рендер скульпта в KeyShot. Настроил освещение по тем же обучалкам что в курсе и вот результат.
Далее была ретопология в Maya, в которой вышла под 23000 треугольников, на которые я не скупился, зажал их ток на тряпке что на поясе, и далее опишу почему очень зря я это сделал, толи устал, толе поленился. А вообще знаю что это многовато, сейчас бы конечно много где урезал и оптимизировал сетку.
Maya периодически тормозила, в UV вообще тупо висла, пришлось развернуть стандартными средствами и ничего не править.
Следующий этап запекание карт с Хайполи в лоупольку в Marmoset Toolbag 4, таких как нормали и прочих. Экспорт их в Substance Painter и текстуринг там. В 4к ни рендер ни текстуры мой комп не тянул, пришлось все делать в 2к, на 4к мармосет тупо вылетал
Далее долгий текстуринг в Substance Painter, освоил и его, всяческие поры кожи, ржавчины и потертости, сабстанс показался очень интересным, тот же PhotoShop (слои, маски), только в 3д.
Под конец текстуринга приходилось отключать другие части текстур и работать к примеру только с одеждой, старенький комп уже не тянет такое. Ниже скрины из сапстенса может кому интересно.
Далее экспорт текстур и сборка в Marmoset Toolbag 4, там не сильно морочился с освещением, так сказать отрендерил на скорую руку.
Вот конечный результат долгой работы
Вроде бы получилось не плохо, и даже захотелось поработать в 3д, портфолио конечно скудное, но разместил на HH, и меня даже пригласили на одно онлайн собеседование, на работу конечно не взяли, мало опыта да тот косяк стряпкой на ремне о котором я писал, дал о себе знать, мол это неприемлемо для 3дшника, а хотелось бы поработать хотя бы стажером. Интерес к игровой индустрии был всегда, талантливые 3дшники, художники и все такое.
На артстейшене разместил мармосетовский проект https://www.artstation.com/artwork/4XagbL , можно покрутить модельку.
Настрочил все это не для повыпендриваться, а того что бы послушать истории кто как устраивался в гейм компании. По тому как после такой проделанной работы немного пропало желание и далее нет конкретной цели и ТЗ.
Всем котиков хорошего дня.
Вы хотите головоломок?
Их есть у нас! Красивая карта, целых три уровня и много жителей, которых надо осчастливить быстрым интернетом. Для этого придется немножко подумать, но оно того стоит: ведь тем, кто дойдет до конца, выдадим красивую награду в профиль!
Всегда есть что оптимизировать
О, это красивое слово "оптимизация"! Только произнес — и сразу повеяло ветром перемен к лучшему. Всегда можно что-нибудь улучшить, чтобы повысить производительность, но главный вопрос — насколько комплексно нужно это делать? Можно пересмотреть множество различных аспектов, но всегда следует помнить суть и контекст, в котором будет использоваться дизайн. Зачастую в ходе поиска технических решений люди подменяют контекст проблемы, потому что так легче понять ее и ассоциировать с чем-то, находящимся в поле своей деятельности. Так происходит потому, что человеческий мозг, как и всё в этом мире, ищет путь наименьшего сопротивления. Отсюда следует, что всегда продуктивнее разбирать проблему коллективно: совместно с автором механики (фичи, тулзы), исполнителями и их руководителями.
Мы в команде разработки адвенчуры Sayri: The Beginning не стесняемся протипировать и не ограничиваем себя в технических решениях. Порой мы получаем весьма информативный, но абсолютно не оптимизированный прототип. Впоследствии даже при имплементации в игру не всегда получается выбрать для фичи или механики идеальное техническое решение, которое будет учитывать развитие проекта в будущих этапах продакшена.
Поэтому в нашей команде был разработан план работы над оптимизацией существующих ассетов и инструментов. Для примера возьмем ассет “Спайки”.
Конструктивный анализ ассета
При разработке технического решения для спайков мы совершили ошибку, которая поначалу была несущественной и при хорошем левел-дизайне приводила лишь к небольшим просадкам FPS. Этой ошибкой было использование скелетал мешей. Если точнее — скелетл меши для морф анимации. Скелет очень простенький, в одну кость. Мы использовали каждый морф как ключевую позу в анимации, а смена между морфами заполняет переходные кадры между позами.
Мы хотели использовать морф анимации для статик мешей, как это сделали GIANT SQUID в ABZU. Но поскольку такой тул разрабатывается специально для игры, мы приняли решение на стадии демо-версии не тратить время на создание уникальных инструментов и вернуться к этому вопросу в период продакшена. Больше деталей об этом решении его авторы рассказали на GDC 2017 в своей лекции Creating the Art of ABZU.
Такой инструмент может помочь существенно улучшить производительность за счет устранения скелетных анимаций в игре. К примеру, птицы, рыбы, улитки, черепахи, мухи, змеи, ящерицы, крабы и другие мелкие животные, а также растения или интерактивные объекты, которые могут невероятно оживить мир игры.
Но вернемся к нашей ситуации. Пока мы думали над техническим решением, скелетл мешей у нас было не так много. Однако со временем мы добавили прототипы улиток, черепах, мух, рыб, птиц, зайцев, гномов — и целый пакет интерактивных объектов для пазлов (пока что они, конечно, на скелетной анимации, потому что так было легче прототипировать результат). И тут FPS сказал: "Прощай".
Так как разработка ведется постоянно, все ассеты дополняются и развиваются в процессе разработки игрового дизайна, большую их часть финализировать мы не можем. Но такие ассеты, как спайки — простые, гибкие в своем дизайне и уже устоявшиеся — вполне могут быть финализированы и оптимизированы.
Но как?
Окей, мы не можем использовать скелетную анимацию и морф анимацию, потому что для нее тоже нужен скелет минимум из одной кости. Через материал можно деформировать меш и проводить ряд манипуляций, что подходит для простых или цикличных анимаций.
Для выполнения задачи нам нужно сделать что-то похожее на анимацию роста, а затем проиграть ее в обратном порядке.
Мы нашли следующие варианты:
Первый. Можно написать плагин для MAYA, который будет запекать изменения меша на UV, после чего с помощью material function в движке вызывать разные стейты и запускать по очереди для проигрывания анимации. Проще говоря, это аналог морф анимации, но со статик мешем. Вот в этом видео подробно объясняют, как можно это сделать. Вариант хорош во всем, но нужно дописать маленький тул для MAYA.
Второй. Можно использовать интересный плагин Static Mesh Swapper от Elhoussine Mehnik. Интересная находка, но по тестам мы смогли улучшить производительность спайков лишь в 1,5-2 раза. По нашему мнению, этот плагин еще требует доработок для внедрения в продакшен.
Третий вариант — использовать Static Mesh Morph, как предлагает Epic Games. Логика очень похожа на вариант №1, но возможности не такие широкие. Здесь нас не вполне устраивает ограничение на количество морфов до 3-х штук, потому что это не совсем гибко для создания анимаций. Этот вариант, как и первый, требует в 10 раз меньше ресурсов, чем скелетная анимация.
Мы выбрали третий вариант. Чтобы компенсировать ограниченное количество морфов для статик меша, мы подкорректировали дизайн спайков, а также увеличили количество спайков в одном месте. Все заняло полтора-два дня — по времени этот вариант был самым выгодным.
Результаты
В среднем по больнице мы выиграли целых 15 FPS, что не может нас не радовать.
Теперь это — movable static mesh, у которого отключены тени (зачем нужны черные тени на черном фоне?), и это означает, что количество спайков почти не влияет на производительность, даже если их действительно много.
Это решение и его результаты подготовили нас к процессу оптимизации животных, который требует куда более комплексных решений, но об этом мы поговорим в другой раз.
Мораль!
Любые технические решения имеют последствия, и всегда лучше уточнять детали по пайплайну с другими членами команды: даже если пайплайн устоявшийся, лишний раз проверить стоит. Сила хорошего проекта — в слаженной работе команды и грамотном планировании.
Страница игры в Steam: https://store.steampowered.com/app/1158600/Sayri_The_Beginni...