Making Of "Creepy Fairy"
Всем Привет!
Меня зовут Женя, мне 26 лет, из которых последних лет 5 я занимаюсь 3D графикой. В данный момент работаю в компании Gameloft на позиции 3D художника по персонажам.
В этой статье я расскажу о процессе создания персонажа Creepy Fairy.
И так, началось все около года назад. Изначально персонаж делался для одной из игр Геймлофта, он был частью сета монстров которые готовились под новый апдейт. Кстати пока пишу эту статью я уже успел закончить новый рендер следующего монстра из этой пачки. Вот тут его можно лицезреть.
К сожалению, по разным причинам разработка персонажей остановилась, и в игре они так и не оказались. В какой игре сказать не могу из за особенностей NDA=\
Прошел год, как-то вечером я сидел и думал, что одна из моих самых слабых сторон это работа со светом и основная причина как я понимал, это отсутствие практики, ведь теории я прочитал мягко говоря немало. Свободного времени было не так много, поэтому я остановился на двух вариантах практики, это либо делать спидскульпты и изучать разные типы освещения на них, либо порыться в архиве работ которые я сделал за последний год или два, и отталкиваясь от дизайна персонажей делать разные сценарии освещения.
Тут то я и вспомнил про этих монстров, открыв их спустя год, как это обычно бывает я увидел довольно много моментов которые сейчас бы сделал лучше. Но в целом выглядели они неплохо, мне показалось что у них есть потенциал и это хорошая возможность поработать с атмосферным освещением, плюс в данном случае меня зацепил огонь, который я сразу захотел сделать Real-Time техниками.
О процессе
Сразу хочу оговорится, самого персонажа, то есть High Poly и Low poly с текстурами я делал около года назад. Поэтому многих нюансов я уже не помню, но постараюсь выделить несколько интересных моментов и техник. А вот позу, огонь и сам собственно рендер я делал недавно, потому на этих этапах я остановлюсь подробней.
Из технических аспектов: персонаж оптимизирован под мобильные движки, так что поликаунт около 10к треугольников, 2 текстурных сета по 1к, симметричные UV, огонь – плашки с альфой и рендер в Marmoset Toolbag.
И так, теперь с самого начала.
Как это обычно бывает в продакшене, я получил классный концепт арт от Марии Щербаковой.
Концепт арт
High Poly
Обсудив все нюансы и подводные камни с лидом и концепт художником, я приступил к работе.
Обычно весь процесс хай поли я делаю в Zbrush, изредка используя Maya. Так и в данном случае, я начал с ZSpheres, потом очень грубый проход анатомии и блокинг всех элементов персонажа. После этого я предпочитаю прорабатывать всего персонажа одновременно и слежу за тем, чтобы подольше оставаться на стадии блокаута и не вдаваться в мелкую детализацию до самого последнего момента. На концепте он выглядит достаточно сильно сгорбленным, но пообщавшись с риггером было решено делать его в прямой, устойчивой позе а сгорбленность добавиться на этапе анимации.
Процесс блокаута
По поводу процесса скульптинга, кажется, рассказывать особо нечего. Использую классические кисти ClayTubes, Standart, Dam.Standart и Smooth Directional. На последней можно остановится немного подробней, я часто использую эту кисть вместо обычного Smooth, она сглаживает только в направлении ваших штрихов, а не в направлении, перпендикулярном вашему ходу, что помогает сгладить неровности не теряя при этом объема и краев, ну и в целом по ощущениям получается более контролируемый процесс сглаживания. Саму кисточку можно найти в лайтбоксе.
Разница между Smooth и Smooth Directional
Из интересных моментов можно выделить пояс, он состоит из большого количества однотипных элементов, я сразу понимал что на этапе лоуполи для экономии места на текстуре, буду использовать всего два оригинальных элемента (череп и рука) которые буду дублировать и расставлять в нужные положение, но мне хотелось уже на этапе скульпта иметь полноценную композицию всех элементов дизайна. Поэтому я не поленился и сделал это на хайполи, плюс полезная практика с разными позами рук, канаты - Curve Tubes.
Финальный вариант пояса
Про остальные интересные моменты мне сказать нечего, так как я уже успел забыть особенности, связанные с их созданием, так что просто покажу вам пару скриншотов разных частей финальной хайпольки=)
Ну и в полный рост.
Или вот, немного в другом освещении и шейдере.
Low Poly
После завершения хайполи, на очереди всеми нелюбимые этапы: ретопология, UV развертка и запекание текстур=)
Ретопологию делал в Maya средствами Quad Draw tool. Поликаунт – 10к треугольников.
Тут особо нечего добавить, все по классике, больше поликов на местах деформаций и все что не влияет на силуэт оставить для текстур.
Low Poly
UV
Тут самый главный принцип — это максимально использовать все пространство текстурной карты. Все тело персонажа полностью симметрично, поэтому и ювишки я делал также. Я старался максимально выровнять все края UV-островов, чтобы при уменьшении текстур для разных девайсов не возникало артефактов в смещении пикселей. Так же через некоторые особенности движка, пришлось делать 2 UV сета на одном из которых содержались все элементы с прозрачностью, поэтому Texel Density у них немного разное.
UV Sets
Baking
Все текстуры запекал в Substance painter. За годы перепробовал много разных софтов для этого дела и SP мне подходит больше всего.
Хотя даже он не всегда справляется с первого раза. Часто бывает ситуация, когда запекание происходит в два прохода, с разными настройками (длина лучей, average/non-average normals и т.д.). В принципе это все можно делать интерактивно в Marmoset Toolbag, но мне неудобно работать там с рисованием кейджа (вообще не люблю я кейдж делать, только в очень особых случаях этим маюсь) и запеканием по именам, поэтому расскажу, как я совмещаю разные результаты бейка в SP. С данным персонажем я с такими проблемами не столкнулся, но все равно покажу процесс, думаю это будет полезно.
Покажу все на примере карты нормалей, так же я утрирую настройки бейка для очевидности.
И так, есть у нас две текстуры, с первого бейка (Т1), все запеклось без проблем кроме артефакта на ушах, очевидно, что длина лучей слишком большая. С второго бейка (Т2), хорошо запекся только нужный нам участок.
Т1
Т2
Теперь, первым делом меняем настройки смешивания нормалей с Combine на Replace.
Потом создаем 2 Fill слоя, на нижнем слое Т1 на верхнем Т2. Тут важно понимать какой API вы используете, OpenGL или Direct3D и поставить нужный в данной вкладке.
В слоях переключаемся на канал Normal и меняем в слое Т2 режим смешивания на Normal (так он будет игнорировать любую информацию под ним). Дальше создаем черную маску на Т2 и рисуем в тех местах, где это необходимо.
Также потом можно создать пустой слой и в режиме отображения нужной карты, закрашивать различные артефакты, пикая нужные значения цвета прямо с модельки.
Texturing
Начинаю с базовых цветов и материалов, в данном случае все было просто, потому как большинство материалов таких как ткань и металл я брал из библиотеки материалов, которую мы создали специально для данного проекта.
Так что остается кожа... и тут я попытался найти рабочие файлы процесса и не смог. Потому скажу только, что я работаю отдельно сначала с цветом, а уже потом с Roughness, всегда держу в голове особенности цвета и тона на разных участках тела. Кости, жир и кровеносные сосуды довольно ощутимо влияют на оттенки кожи даже в рамках одного цвета. Также я активно пользуюсь запеченными картами Curvature и Ambient occlusion для создания вариативности и выделения нужных мне участков в цвете и спекуляре. Вообще весь пайплайн по работе с кожей я подсмотрел у прекрасной художницы Magdalena Dadela. Очень советую ее урок на GDC 2017: Face Texturing in Substance Painter with Magdalena Dadela, который можно найти на ютубе, даже без знания английского там все очень доходчиво показано.
Базовый цвет и материал
Тут еще можно отметить только то, что, зная про огонь в клетках, я покрасил их внутренние части и самих пленников с Emissive свойствами, чтобы они помогали эффектом свечения.
Posing
С позой все было достаточно просто. Уже был создан скелет и несколько анимаций, так что я взял самый подходящий кадр анимации, накинул сверху блендшейп и немного потаскал вертексы пока не добился нужного мне положения.
Поза
Fire effects
Изначально я хотел сделать все по-честному, взять эмиттер, выпустить из него кучу плашек с секвенцией огня на них. Но провозившись с этим целый день я понял, что с моими знаниями в данной области, желаемого эффекта мне не добиться и что эффективнее и быстрей будет сделать все вручную.
И так, начал я с текстур огня и дыма которые нашел на сайте www.textures.com
Текстуры были в формате JPEG, так что прозрачности у них не было, поэтому я взял зеленый канал, немного подкрутил Levels и засунул это в альфа канал, сработало отлично.
Всего я использовал 11 разных элементов: 3 коротких базовых огня, 3 длинных огня, 3 текстуры дыма и 2 текстуры искр (их я нарисовал в фотошопе мягкой кисточкой).
Текстура огня и дыма
Потом создал соответственно 11 плейнов на которых эта текстура и использовалась.
Геометрия с текстурой (Плашки с искрами увеличены для скриншота)
Теперь из этого нужно собрать огонь, сам процесс очень прост, ставишь плейн в нужное положение, дублируешь, меняешь положение и т.д. Начал я с коротких огней для базовой формы внутри клетки. Потом длинные, уже работая и с силуэтом за пределами клетки, в целом я старался сделать огонь не под конкретный ракурс, а со всех сторон (Триде как никак :D), но все равно больше внимания уделял приоритетному ракурсу. Дальше добавил дым и искры (сделал 20-30 копий и растащил их скриптом Randomize Transforms).
Потом процесс пошел более хаотично, я сливал в один разные куски огня, накидывал FFD, как-то крутил его, правил артефакты пересечения и уже в конце на этапе рендера, финальные формы правил кистью Move.
Этапы создания огня
Rendering
Теперь пришло время Marmoset Toolbag. Мне нравится работать в данном “движке”, интуитивно понятный интерфейс, простота работы и качество результата сразу меня подкупили. За все время моих занятий в 3D я перепробовал много разных рендеров и движков, и понял, что мне намного интересней работать с Real - Time техниками. Мне нравится интерактивный процесс работы и моментальный отклик на изменения в шейдере, свете или атмосферных эффектах. Не сказать, конечно, что в рендерах этого нет, но тут уж, наверное, дело вкуса.
И так, теперь про свет. Я хотел создать темную, мрачную атмосферу, где ключевым источником света выступают клетки с огнем, с них я и начал. Сначала я настроил эффект свечения в самом шейдере, в целом шейдер огня у меня получился прям суперпростым, буквально одна карта для всего. Также можно заметить что цвет Glow в шейдере темно коричневый, если честно не совсем понимаю как работает данный параметр, сам эффект свечения больше контролируется параметром Color, а Glow как мне кажется похож на еще один слой который смешивается в режиме Overlay, поэтому поигравшись с ним, я выбрал темный цвет так как он добавлял ощутимого контраста. Кстати, для текстуры пола я использовал бесплатный материал(fantasy_elf_stone_floor) который нашел на Substance share.
Шейдер огня и его эффект в сцене
Glow, конечно, дал немного света, но было очевидно, что нужно засунуть источники прямо внутрь огня, что я и сделал. Для этого я использовал Omni Light которому придал форму цилиндра по размерам клетки и задал насыщенный оранжевый цвет.
Настройки источника света для огня
Результат с Omni источниками в клетках
После я создал один заполняющий источник сверху, чтобы вытянуть из темноты все элементы и один возле морды для акцента.
Fill light
Теперь осталось только добавить контровой свет, для отделения персонажа от фона и добавления нескольких акцентов.
Финальное освещение
Когда я приступал к настройке света, я понимал, что хочу вытянуть из мармосета максимум, чтобы обойтись минимальной постобработкой в фотошопе, поэтому источников света вышло многовато (9!), но я остался доволен результатом.
После я добавил туман, хотелось получить эффект помещения, насыщенного частицами пыли, но, по-моему, вышло немного слабовато, сейчас смотря на это я бы сделал туман более плотным.
Туман и его параметры
Теперь немного про настройки камеры. Тут могу выделить только один нюанс, это параметр Tone Mapping. Почти во всех случаях я меняю его с дефолтного Linear на Hejl, мне намного больше нравится как выглядят цвета в данном фильтре, он конечно резко затеняет сцену и делает все более контрастным, так что стоит компенсировать это увеличением экспозиции.
Разница между Linear и Hejl tone mapping
На счет постобработки в фотошопе, как я говорил выше, мне хотелось обойтись минимальным правками, что впринципе вышло, все что я сделал это добавил больше искр, немного подтянул цвета, добавил блюр на пол и небольшой темный градиент снизу-вверх.
Вот и все=)
Финальный результат
В заключении хочу сказать, что я получил огромное удовольствие работая над этим персонажем. На каждом этапе создания я сталкивался с сложными и очень интересными задачами, которые сначала хорошенько ломали мне мозг, но по их завершении я получал огромный буст гормонов счастья=). По времени если я не ошибаюсь работа над ним заняла около месяца и еще где-то неделю я делал огонь и рендер в свободное время.
Когда я только получил концепт, я не был уверен справлюсь ли я с ним на достаточном уровне, но как известно любая сложная вещь/процесс состоит из простых элементов. Так что не стоит бояться комплексных задач, а наоборот стараться разобрать их на отдельные простые и понятные тебе элементы, тогда и процесс будет идти намного эффективней и увлекательней.
Фух, это была моя первая статья, надеюсь она получилась хоть немного полезной и не слишком скучной. Буду рад Вашим мыслям и отзывам, как на счет самой статьи, так и работы в целом.
Если вам интересны мои работы, меня можно найти на Render.ru или ArtStation.
Всем Добра!)