В этом посте я расскажу об истории текстурирования в трёхмерных видеоиграх. С момента первого появления 3D реального времени на домашних консолях мы прошли долгий путь, но и сегодня при создании игровых текстур применяются некоторые практики, уходящие корнями в те ранние годы.
Для начала давайте немного поговорим об основах — о различиях рендеринга в реальном времени (real time rendering) от пререндеренных (pre-rendered) сцен. Рендеринг в реальном времени используется в большинстве 3D-игр. Машина в этом случае отрисовывает изображение в реальном времени. Для создания одного кадра пререндеренной сцены требуется большие вычислительные мощности.
Из-за этого мы получаем разные уровни качества. Рендеринг в реальном времени нужен играм для интерактивности. Такие статичные элементы, как кинематографические вставки или неподвижные фоны, можно создавать пререндерингом. Разница результатов была огромной. Вот пререндеренный фон и персонаж реального времени из игры 1999 года:
Пререндеринг позволял создавать кучу затратных в рендеринге сцен, для отрисовки единственного кадра которых могли требоваться часы или даже дни. Для картинки или фильма это вполне нормально. Но играм нужно постоянно рендерить 30-60 кадров в секунду. Поэтому в ранних 3D-играх приходилось идти на большие упрощения.
На 16-битных консолях одним из первых примеров 3D реального времени была игра Star Fox, но ещё на них была Donkey Kong Country, в которой пререндеренная трёхмерная графика была преобразована в спрайты (с сильно упрощёнными цветовыми палитрами). Долгое время ничто другое не могло выглядеть так же хорошо в реальном времени.
Когда мы перешли к консолям с настоящим 3D (таким как N64 и PS1), то наконец увидели, на что не способен рендеринг в реальном времени. Нельзя использовать источники освещения, чтобы запекать тени или освещение в сцену, материалы не реагируют на свет, нет никакого «рельефного текстурирования» (bump mapping), только геометрия и текстуры низкого разрешения. Как же художникам удавалось с этим cправляться?
Например, информация об освещении или рисовалась на текстурах (тени, засветы, глубина), или рисовалась на каждой вершине треугольника, или же использовались оба подхода. Тени персонажей обычно были простыми текстурами, которые следовали за персонажем. Реализовать отбрасывание правильных теней было невозможно.
Можно было добиться простейшего затенения на моделях, но ему обычно недоставало правильной информации об освещении. В таких играх, как Ocarina of Time и Crash Bandicoot, использовалось много информации об освещении, которая записывалась в текстуры и рисованием по вершинам геометрии. Это позволяло делать различные области светлее, темнее, или придавать им определённый оттенок.
В те времена для преодоления подобных ограничений требовался большой объём творческой работы. В разной степени рисование или запись информации об освещении в текстуры используются и сегодня. Но поскольку рендеринг в реальном времени становится лучше, потребность в подобных техниках снижается.
Итак, следующим поколениям «железа» нужно было решить ещё множество проблем. Следующее поколение консолей — PS2, Xbox и Gamecube — попытались с некоторыми из них справиться. Первым заметным скачком в качестве стало повышение разрешения текстур и улучшение освещения.
Одной из важных в этом плане игр стала Silent Hill 2. Самым серьёзным прорывом этой игры 2001 года стало использование отбрасывания теней в реальном времени. Это означало, что часть записанной в текстуры информации об освещении можно было исключить, но по большей части в этом поколении она активно применялась.
Определяющим для этой и других игр той эры стало разрешение. Благодаря большему количеству пикселей в них можно было хранить намного больше микродеталей. Но пока это была только информация о цвете и рассеянном освещении. Bump-карты и карты отражений использовались тогда редко. Добиться от материалов правильной реакции на свет было невозможно.
Была и ещё одна причина популярности запекания информации в текстуры. В пререндеренных сценах это не было проблемой, в них одежда действительно выглядела как ткань, а стекло, волосы и кожа казались убедительными. Для рендеринга в реальном времени требовалось рельефное текстурирование, и оно появилось, но только ближе к концу этого поколения (только на xbox).
Карты отражений и нормалей появились в таких играх, как Halo 2 и Doom 3. Карты отражений (specular maps) позволяли поверхностям реагировать на освещение намного естественнее, например, металл мог действительно блестеть, и так далее. Карта нормалей позволяет записать намного больше деталей, которых бы нельзя было добиться в объектах с таким низким количеством полигонов.
Если вы работаете с 3D, то знаете, что такое карта нормалей (normal map). Это тип рельефного текстурирования, позволяющий поверхностям реагировать на освещение гораздо детальней по сравнению со сложностью модели. Это важнейшая текстура, которая используется практически в каждой игре, вышедшей после этого поколения.
После появления карт нормалей подход художников к созданию текстур изменился. Для изготовления карт нормалей приходится тратить на создание модели гораздо больше времени. Стало нормой использование таких инструментов скульптинга, как Zbrush, позволяющих запекать высокополигональные модели в текстуры, которые можно использовать в низкополигональных объектах.
До появления этой технологии большинство текстур или рисовалось вручную, или создавалось из фотографий в Photoshop. В эпоху Xbox 360 и PS3, этот способ для многих игр ушёл в прошлое, потому что вместе с повышением разрешения повысилось и качество моделей.
Кроме того, благодаря предварительно вычисляемому затенению сильно улучшилось поведение материалов. Для многих художников это оказалось поворотным моментом. Материалы становились намного сложнее, чем раньше. Это демо 2005 года превосходило всё, что было до него. В то время ещё даже не было Xbox 360.
Также появился новый подход к освещению сцены — модель Ambient occlusion. Рендерингу реального времени снова приходилось догонять пререндер. AO слишком затратна для рендеринга в реальном времени, поэтому художники просто начали записывать её в текстуры! AO воссоздаёт непрямые тени от источников освещения, слишком мелкие для детального отображения.
Даже сегодня AO реального времени достижима не на 100%, но мы к этому уже близки! Благодаря таким процессам, как SSAO и DFAO, ситуация сильно улучшилась по сравнению с тем, что было 10 лет назад. Запечённые карты AO до сих пор используются, но, вероятно, когда рендереры станут лучше, от них откажутся.
Подведём итог: в эру PS3 и X360 мы увидели ещё больший скачок разрешения по сравнению с предыдущим поколением, а для поверхностей с затенением появились новые текстуры. И, разумеется, повысилось качество освещения! Можно было получить тени реального времени для всей сцены или запечь освещение для повышения детализации.
Кажется, всё просто отлично? Но всё равно остаются недостатки. Низкое разрешение моделей и текстур, плюс высокие затраты из-за новых шейдеров И не стоит забывать разрешение, выдаваемое играми. Всего 720p! (Кроме того, стали проблемой оттенки шрифтов на ЭЛТ-телевизорах).
Ещё одной проблемой оставались карты отражений (specular maps). В то время у каждого объекта была только одна карта его «блестящести». Это большое ограничение. Материалы выглядели нереальными. Поэтому некоторые разработчики начали разделять карты отражений. Одним из первых примеров стала игра Bioshock Infinite.
Карты отражений теперь разделялись по типам материалов (дерево, золото, бетон и т.д.) и по «старости» (трещины, износ и т.д.). Это событие совпало по времени с появлением нового типа модели затенения — Physically Based Rendering, PBR (физически корректный рендеринг).
Это приводит нас в сегодняшний день и к текущему поколению. PBR стал стандантом для многих игр. Эту технику популяризировала студия Pixar, стандартизировав его как способ создания правдоподобных материалов в компьютерной графике. И его можно применять в реальном времени!
Кроме того, отрасль усовершенствовала конвейер, появившийся в предыдущем поколении — экранные эффекты. Такие аспекты, как тональная коррекция и цветокоррекция, в текущем поколении улучшились. В предыдущем поколении для этого пришлось бы долго настраивать текстуры.
Если вам интересно узнать больше о старых играх и их техниках рендеринга, то крайне рекомендую серию DF Retro на канале digitalfoundry. Автор проделал фантастическую работу по анализу отдельных игр, например Silent Hill 2.
Просто для сравнения я покажу, как выглядели первые 3D-игры и какой труд сегодня необходим для создания единственной текстуры в игре.
Давайте также вкратце упомянем некоторые из техник, разработанных в предыдущих эпохах, которые применяются и сейчас! Есть множество «стилизованных» текстур, в которые записывается информация об освещении. Наиболее активно это использует Blizzard.
Эта компания соединяет технические ограничения с продуманным отношением к графике, и добивается потрясающих результатов. Возможно, в них не используется та же куча текстур, что и в других AAA-играх, но результаты никак нельзя назвать плохими.
А иногда благодаря технике PBR и нарисованным вручную/упрощённым текстурам можно зайти очень далеко. Этому способствует и наличие современного движка со множеством функций.
Автор: PatientZero