Как сделать волосы персонажа с высокой детализацией, не перегружая проект

Эта история не только о том, как сделать качественную графику, будучи сильно ограниченным производительностью проекта. Она также наглядно показывает, что арт-директор в игровой индустрии не может обойтись только художественными навыками. Конечно, это очень важный базис, но без понимания работы игрового движка, шейдеров, реалтайма, рендера и других технических моментов, воплощать свои смелые идеи не получится.

Когда я только начинал осваивать азы арт-директорства, передо мной стояла задача, вообще не связанная с художественным стилем или концепциями: мне нужно было качественно обновить и улучшить графику, которая морально устарела за много лет существования игры.

18.jpg

Но нельзя просто взять и обновить графику, если серваки уже на пределе и архитектура проекта достаточно старенькая. А переносить игру полностью на новый движок нерентабельно.

Приведу конкретный пример — эпопею по внедрению в игру не совсем типичной для нее технологии.

14_17.jpg

Мы планировали обновить несколько ключевых ассетов в проекте, включая главного туториального персонажа. Это была прекрасная девушка по имени Валькирия.

8.jpg

Сначала мы хотели просто заменить меш и текстуры персонажа на более детализированные, опираясь на опыт других наших проектов, которые посовременнее. Все вроде бы шло неплохо: моделлеры сделали отличную детализированную девушку с более корректной топологией и проскульптили элементы одежды, кожу, металл и т. д. Напоминаю, что мы старались улучшать графику без «ударов под дых» уже и так перегруженному проекту.

5_10.jpg

Именно поэтому персонаж Валькирии имеет всего одну текстурную карту (Diffuse + немного Specular) вместо нескольких, включая Normal Map, придающую объемную детализацию модели. Ребята просто-напросто запекли высокополигональную версию модели в Diffuse вместе с Color Map. Таким образом они получили достаточно прорисованного, детализированного персонажа с 2D-текстурой, которая выглядела объемно и в то же время не занимала слишком много места.

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

1_2.jpg

Когда я задумывался о том, что нужно будет сделать для достижения такого результата, мне становилось плохо, ибо даже диффузную текстуру тела в 1048 пикселей для детализированной модели мы смогли добавить в проект со скрипом — из-за лимитов сервера. Да, к тому времени на рынке уже были игры с детализированной и реалистичной графикой, где волосы блестели и шевелились, как настоящие. Но в основном это проекты с очень тяжелым контентом, который загружается на телефон полдня и дробит игру на стопятьсот долгих загрузок, сажая батарею за три часа работы.

Большинство игр с подобной графикой являются аддонами своих пэкашных оригиналов, где и находится основная часть аудитории. Как мне кажется, с их стороны это попытка немного расширить рынок. И, скорее всего, поэтому они готовы потерять львиную долю пользователей, которые будут скипаться еще на этапе скачивания настолько тяжелой игры на смартфон.

Мы себе такого позволить не могли. В случае с нашими проектами графика никогда не должна мешать производительности, особенно если это мультиплеер с огромным онлайном, где и без того в момент масштабных событий все лагает и тормозит.

Так как же нам сделать красиво и не убить при этом девайс?

Что ж, вот здесь и начинается настоящее боевое крещение молодого арт-директора. Как я уже сказал, запеченная высокополигональная текстура волос на оптимизированном меше смотрелась так себе — нарисованные кудри некрасиво ломались на низкополигональной модели.

Конечно же, я поглядывал в сторону технологии, построенной на использовании многослойных полигонов с альфой на каждом фрагменте, которая создавала иллюзию детализированных локонов. Эта технология широко применяется на AAA-проектах для консолей и ПК, но для мобилок она далеко не типична. Чтобы такие волосы смотрелись хорошо, нужно сделать на голове не меньше 4000 вертексов. К примеру, во втором Uncharted на голове Дрейка ютилось около 4000 треугольных полигонов. Обратите внимание — это AAA-проект, пусть и 2009 года. В Uncharted 4 их было уже 30000–40000.

Наши тех-артисты напоминали о том, что с плотностью сетки больше 2000 полигонов нам будет очень больно. Так как же быть разработчикам игр для мобильных девайсов, если у нас даже целое тело обновленного персонажа состоит всего лишь из 1000 полигонов?

6_7.jpg

Какие костыли мы только ни использовали! Наши ребята даже добавляли плейны с альфой фрагментами в меш, чтобы хоть чуть-чуть создать эффект детализации. Все в конечном счете полетело в топку.

Честно говоря, я уже собирался забить и оставить старый меш. Помимо технических ограничений, арт-директор нередко упирается в отсутствие времени на разработку — как я упоминал выше, у всего есть свой лимит рентабельности.

9_11.jpg

Однако мой руководитель дал мне еще один шанс исправить ситуацию.

Главная фишка волос на трехмерных модельках в играх — особый блеск, отличающийся от обыкновенного Specular, который вы видите на коже персонажа или на металле. Для волос характерна анизотропия — блик, расходящийся кольцом от макушки.

Чтобы имитировать этот блик в игровом движке, нужен был специальный анизотропный шейдер, созданием которого и занялась наша команда тех-арта. Я тем временем пытался самостоятельно сделать прототип, чтобы понять, при каком расположении фрагментов меша прическа будет гладкой и объемной и вместе с тем приемлемой с точки зрения производительности.

Именно тогда у нас появился первый образец — он был еще далек от совершенства, но уже что-то из себя представлял. И в это время мне на помощь пришли наши хорошие специалисты в области моделирования и текстурирования. Команда 3D-художников сделала отличные волосы на основе набросков, которые я предложил. У ребят получилось невозможное — создать детализированный фасон прически и ужать все до 2000 полигонов.

Художники по текстурам, в свою очередь, запекли Diffuse-текстуру волос с альфой.

3_16.jpg

Если говорить простыми словами, то принцип этой технологии такой: сначала создаются группы полигонов, напоминающие узенькие полоски бумаги (как прическа у Буратино из множества щепок). Потом на них сверху набрасывается текстура запеченных детализированных волос (когда детализированный объект превращается в текстуру для своей низкополигональной версии) с альфа-каналом, который как бы обрезает концы этих полигонов, создавая эффект детализации.

Все это мы делали на энтузиазме в режиме низкого приоритета, когда у нас появлялось свободное время. Каждый отдел, приложивший руку к задаче, занимался ассетом в первую очередь потому, что было интересно.

4_13.jpg

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

Поэтому мы не остановились на достигнутом, а обратились за помощью к Graphic Development Team — ребятам, которые разбираются в графене и умеют писать скрипты для игровых движков лучше, чем кто-либо. Они продолжили работу над прототипом, но это уже совсем другая история.

19.jpg


740 0 850 9
2
2021-02-02
В игра плоскостями делают с альфой
2021-02-09
А зачем делать на низкополингональной стилизованной модели высокодетализированные волосы? У Вас стилизованная модель, соответственно и волосы должны ей соответствовать. Мне кажется на такой модели высокодетализировать волосы не нужно. Иначе смотрится не гармонично. Будет слишком очевидный переход контраст между волосами и персонажем.
RENDER.RU