Художник по окружению из CD Projekt Red о дизайне Боклера — центральной локации дополнения «Кровь и вино».
В мае 2017 года на GDC выступил художник по окружению Кацпер Непокольчицкий (Kacper Niepokólczycki), который подробно рассказал о процессе создания города Боклер: от раннего моделирования до работы с материалами.
Мы перевели выступление.
Основные вызовы
Как считает Кацпер, главная сложность при создании «Крови и вина» была в том, что DLC к игре оказалось сравнимо по объёму с иными ААА-блокбастерами. За короткое время нужно было создать столько контента, на сколько обычно у разработчиков уходит около года.
Сеттинг «Крови и вина» значительно отличается от основной игры: мир «Ведьмака 3» — это, как выразился Непокольчицкий, «место, где вы точно не захотите провести отпуск». И его оформление это подчёркивает. А графство Туссент и его столица Боклер — красочная, живая местность, где живут счастливые и вечно хмельные люди.
Создавая графство, разработчики вдохновлялись живописными уголками Франции и Италии, но в то же время им надо было сохранить дух «Ведьмака» в дополнении. В конце концов, Геральт — охотник на монстров, так что они должны водиться даже в таких живописных местах.
Также CD Projekt Red нужно было создать новый полноценный город — как атмосферой, так и контентом отличающийся от Новиграда, центрального города базовой игры.
И все эти нововведения должны были быть технически реализуемы. Во многом это выступление посвящено как раз тому, как разработчики умудрились создать Боклер, отведя на него лишь 700 мегабайт оперативной памяти.
Препродакшн
Двумя основными задачами на старте препродакшна были:
- создать город, в котором игроку будет легко ориентироваться;
- использовать важные локации из книг.
Из литературной основы взяли сам город, гору Горгону и княжеский дворец. Последние два заметны практически из любой точки Туссента и служат игроку ориентирами.
На изображении выше — первый набросок города. Разработчики разделили его на четыре района, по одному на каждую из сторон света, чтобы город выглядел логично, а также чтобы проще было разделять работу между разными художниками по окружению.
После чернового моделирования разработчики стали тестировать город. На гифке ниже видно, что гора Горгона возвышается над ним, как и подобает ориентиру.
А здесь Геральт находится на точке 6, откуда видно и гору, и шпиль дворца.
От ворот шпиль дворца тоже виден.
Также разработчикам очень помогло то, что город располагается на склоне. Игрок легко понимает, что чем выше по склону поднимается, тем в более богатые районы попадает. К тому же, все локации (дворец, зажиточные и бедные кварталы, гавань) различаются по архитектуре.
Всё сделано, здания расположены, но что-то всё равно не так. Из некоторых мест города не видно ориентиры, так что игрок может легко в них потеряться. Красивые виды, которые должны открываться из разных точек, делать дорого. Так что разработчикам пришлось заново заняться блокаутом.
Кроме того, они решили ввести внутренние городские ориентиры. Дворец стал более заметен из любой точки города, появилась ратуша с высокой башней и шпилем, и были увеличены пропорции храма, находящегося в южной части города.
И это сработало. Игрок даже с большого расстояния мог увидеть храм и понять, что находится вблизи южной части города. А когда из одной точки видны три или четыре ориентира, игрок оказывается как бы на перепутье, и решает, в какую сторону пойти.
Роль дворца стала ещё важнее — разработчики даже поменяли форму многих улиц, чтобы они вели в его сторону. А ратуша обозначает центр города с главной площадью, и её тоже видно из большинства ключевых мест города.
Блокаут
Наступила новая стадия проекта: стали понятны технические ограничения. Например, выяснилось, что большие открытые пространства с видами тяжело обрабатываются «железом», и от них избавились. В конце длинной улицы, которая раньше заканчивалась открытым пространством, разработчики ставили стену с зигзагообразным проходом, чтобы ограничить поле зрения игрока.
Приём применяли несколько раз — всё для того, чтобы скрыть процесс отрисовки мешей. Самой сложной локацией города стала главная площадь, что немудрено: это большое открытое пространство со множеством деталей.
По сюжету, в городе происходит фестиваль вина, поэтому на площади множество NPC, украшений, столиков с едой, палаток, артистов и всего такого прочего. По периметру площади находятся здания.
Красным отмечены строения с проработанными интерьерами, а зелёным — специально созданное для блокирования обзора игрока. Обработка одной только площади требовала значительных мощностей компьютера — пока игрок проходил сквозь здание, у движка появлялось время на то, чтобы её сгенерировать.
Этим разработчики пользовались часто. В конце улицы из примера выше они поставили здание, которое улица огибает. Оно преграждает обзор и даёт время на генерацию находящегося за ним пространства.
Одними зданиями дело не ограничилось. Поскольку Боклер — город с частыми перепадами высот, разработчики использовали лестницы и подъёмы, чтобы скрыть от игрока генерацию.
Похожим образом работает этот коридор: во время движения по нему игрок не видит то, что находится ниже бортика перед ним.
Разработчики постоянно смешивали эти приёмы, и в итоге сейчас в Боклере очень сложно заметить, как что-то появляется из воздуха. Кроме того, они часто искривляли улицы, что тоже разбивало поле зрения игрока.
Непокольчицкий также упоминает важность постоянной обратной связи от других команд — занимающихся квестами, диалогами и так далее, — с их помощью дизайн города стал ещё лучше.
На гифке выше — результат реакции на отклик. Раньше, чтобы попасть из точки «А» в точку «Б» или наоборот, требовалось пройти по красному маршруту, что занимало слишком много времени и было попросту скучно. Коллеги предложили раздвинуть дома и сделать проход между ними, что оказалось отличным решением.
Особенно примечателен этот фрагмент. Раньше, чтобы добраться от центра города в гавань, приходилось делать огромный крюк, а теперь из точек «А» и «Б» к гавани можно быстро попасть по новым дорогам. Проложить их было непросто, но оно того стоило — игрокам стало гораздо проще передвигаться по городу.
В итоге получился такой план города. Примечательно, что положение ключевых локаций не изменилось — разработчики просто постарались сделать пространство между ними наиболее интересным для игрока.
Непокольчицкий напоминает главные принципы разработки города: в первую очередь он — часть игры, поэтому красоты красотами, но в нём должно быть интересно находиться. К этому же относится навигация, поскольку игроку вряд ли будет весело, если он потеряется в Боклере.
Хорошо показало себя управление видимостью: создание искусственных преград и небольшие корректировки улиц позволили сэкономить ресурсы. А обратная связь от коллег помогла улучшить то, что уже было сделано. Разработчики постоянно искали проблемы и неточности, даже на этапе первоначального моделирования.
Меши
Затем настало время наполнить город деталями и создать красивый экстерьер.
Весь город был разделён на четыре района: дворец, верхний город, нижний город и гавань. У каждого из них были отдельные ассеты и дизайн, над ними даже работали разные художники по окружению.
Таков был технический бюджет на город для художников:
Пункт «текстуры» разделён на две части потому, что 200 мегабайт отданы под удалённые объекты: горы, леса, деревни и так далее. Ведь «Ведьмак 3» — игра с открытым миром, и они всегда видимы для игрока.
Первым делом команда Непокольчицкого решила разобраться с наиболее сложными частями Боклера и, в зависимости от того, сколько они займут, оптимизировать остальные. Первые трудности вызвала гавань — из-за рынка со множеством мелких декораций и NPC. Вторым по трудоёмкости работы шёл нижний город, третьей — верхний, затем — главная площадь, храм и «Мандрагора» — место, где по сюжету проходит вечеринка богачей.
Каждую неделю художники по окружению получали вот такие отчёты. Красным отмечено превышение технического «бюджета».
Возьмём для примера один дом из верхнего города.
Только один двухэтажный дом отнимал по 25% процентов от бюджета на текстуры и меши, а от бюджета на статичные треугольники — все 40. Поскольку в Боклере должно было быть не два с половиной дома, а несколько сотен, пришлось выкручиваться.
Разработчики решили не изобретать велосипед и использовать то, что уже работало в «Ведьмаке 3», немного поменяв технологии. Решение было простое: стриминг данных плюс LOD’ы и пара трюков.
Если игрок в 50 метрах от условного дома, в память загружается только прокси. Когда он приближается на расстояние между 50 и 20 метрами, загружается LOD 1. А вблизи дома загружается ещё и LOD 0. Это базовая схема, она немного менялась в зависимости от длины улиц, но в целом всё работало так.
Также разработчики использовали эффект параллакса, чтобы создать иллюзию видимости интерьера.
Вроде бы всё, но нет — нужно было ещё добиться хорошего FPS и разобраться с рисками, связанными с масштабными пейзажами и насыщенными сценами.
Чтобы ускорить рендеринг видов, разработчики использовали Umbra. Её работу тоже можно разобрать на примере того же дома.
Если игроку видна только верхняя его часть, Umbra выводила лишь крышу и соответствующую часть стены — всего 3 448 треугольников.
Со средним уровнем получалось уже 6 279 треугольников.
Весь меш же состоял примерно из 13 тысяч треугольников.
Также разработчики собирали дома из готовых кусков, экономя на мешах, но, тем не менее, создавая достаточно разнообразные строения.
Непокольчицкий резюмирует: важно знать заранее, какой технический бюджет выдан на проект и понимать его границы. Только отталкиваясь от них, можно придумывать различные трюки и решать, какие инструменты использовать. Особенно он выделяет Umbra, которая помогла разработчикам значительно сэкономить на памяти и ускорить время рендеринга.
Текстуры
Разработчики хотели, чтобы плотность текселей была в два раза выше, чем в оригинальном «Ведьмаке 3», а дома выглядели бы особенно. К тому же, нужно было покрыть текстурами большие поверхности вроде стен.
В движке «Ведьмака» одна текстура занимает 0,6 мегабайта. В итоге все четыре стены дома занимали бы 72 мегабайта, а это опять почти четверть от всего бюджета.
Поэтому разработчики отказались от кастомных текстур и стали искать новые методы для создания оригинального облика объектов. В этом художникам очень помогли сотрудники технологического отдела, которые придумали вот такое решение:
Это блендинговый шейдер. Текстуры перекрываются чёрно-белыми масками, а поверх им можно придавать любой цвет. Кроме того, помимо цвета, можно задавать декали — отдельные решения для того, чтобы объект в итоге выглядел уникально.
Метод оказался очень удобным — он работает как с крупными ассетами, так и с небольшими.
Сначала объекты «красились» в 3DS Max, а затем переносились в движок. Именно этот жёлтый дом Непокольчицкий выбрал для примера потому, что в нём используется множество разных вариантов текстур. К тому же, он выглядит уникальным: потрёпанный, но всё равно богато украшенный.
В движке можно выбирать абсолютно любой цвет для текстур и слоёв материала, добавлять иллюзию AO, а также выбирать разные варианты оформления — грязные, изношенные и так далее. В итоге объект действительно становился непохожим на остальные, что достигалось с помощью сравнительно несложных приёмов.
В домах на картинке выше используются одни и те же материалы, но выглядят здания по-разному.
Резюмируя, Непокольчицкий снова говорит о важности осознания технических ограничений, потому что именно от них отталкивается дальнейшая разработка методов и всего прочего. Также он советует не жертвовать художественным видением проекта, а находить способы его реализации в жёстких условиях.
Живой мир
Теперь нужно было добавить контента в созданное окружение, только в этот раз ограничения были не техническими, а временными — приближался релиз дополнения. Художники же привыкли работать вручную над каждой деталью мира, чтобы он выглядел уникально и естественно, и жертвовать этим они не хотели.
Базовым решением стала система сущностей (entities), встроенная в движок. Сущность — это по сути группа ассетов, которую очень легко настраивать.
Например, зелёные объекты в этой сцене — части, созданные специально для этого дома. Они «упаковывались» в одну сущность, которую другие члены команды могли менять в зависимости от своих нужд.
Так получалось делать весьма разнообразные сцены за меньшее количество времени.
Вручную создавать каждую палатку в гавани было бы очень долго, так что разработчики сделали инструмент, позволяющий просто перетаскивать в сцену готовые объекты, чтобы затем настраивать по необходимости.
За три минуты Непокольчицкий выстроил площадь, которая выглядит вот так:
Кажется, что всё сделано вручную: контента много и он разнообразен.
Выводы из опыта
- Во время грамотного препродакшна становится понятно, на что обратить внимание. В случае Непокольчицкого это была навигация в городе.
- Идентифицировать и решать технические проблемы нужно уже на стадии прототипирования.
- Ограничения — основа выбора инструментов и методов.
- Не нужно жертвовать видением в пользу технической реализуемости.
- И главное — не стоит бояться множества итераций одних и тех же элементов. Делать одно и то же не очень приятно, но так значительно улучшается качество продукта.
Вопросы и ответы
Расскажите поподробнее о том, как вы создавали LOD’ы.
Когда нужна было создать особенные объекты, мы делали их вручную, в других случаях — с помощью Simplygon.
В конце разработки всегда приходится идти на жертвы. Как вы поддерживали мораль команды на высоком уровне?
Времени на то, чтобы сделать всё, что тебе хочется, всегда не хватает. Нужно уметь говорить себе и коллегам «Хватит. Всё уже достаточно хорошо». Что касается морали: основную игру приняли очень хорошо, так что нам нужно было держать планку качества. Мне кажется, большинство из нас постоянно думали: «Нужно оправдать ожидания фанатов». Так что да, работа была тяжёлая, но мы знали, что в итоге она окупится.
Дизайном уровней занимались художники или дизайнеры?
Мы работали совместно — городом занималась так называемая Location Team, которая состоит как из художников, так и из дизайнеров.
Источник: DTF