Gamedev Andrey Apanasik
12 626

Краткая история 3D-текстурирования в видеоиграх

Долгий путь от имитации теней к нескольким картам бликов на одной модели.

В закладки

Старший художник окружения Insomniac Games Райан Бенно в своём треде в Твиттере рассказал об истории 3D-текстурирования в играх. Он привёл множество примеров того, какие проблемы возникали у разработчиков на протяжении всего пути, а также показал, как художники смогли справиться с множеством ограничений. Мы выбрали из треда главное.

Сперва немного об основах: рендеринг в реальном времени против пререндера. Первое используется в большинстве 3D-игр, и с помощью этого способа железо создаёт изображение в реальном времени. Пререндер требует много вычислительной мощности и времени, чтобы сделать один кадр.

Из-за этого получаются сцены с разным уровнем качества. Из-за интерактивности в играх нужна обработка в реальном времени. А статические элементы, например, синематики или статические фоны, могут быть созданы заранее. Различия между ними были ошеломляющими. Ниже представлен пример из Final Fantasy IX, которая вышла в 1999 году. Можно сравнить, насколько отличаются по качеству заранее отрендеренный фон и персонаж, обработанный в реальном времени.

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

С одной стороны был Star Fox, как ранний пример 3D в реальном времени на 16-битных консолях, а с другой Donkey Kong Country, в которой использовался предварительно отрендеренный CG, преобразованный в спрайты (с сильно упрощённой цветовой палитрой). Долгое время отрисовка в реальном времени на могла достичь подобного результата.

После появления подходящих 3D-консолей, например Nintendo 64 и PS1, стало понятно, чего в режиме реального времени не получится сделать. Нельзя было использовать источники света для запекания теней и света на сцене; не было отклика материала; отсутствовал bump mapping; а геометрия и текстуры были низкого разрешения. И художникам приходилось обходить эти ограничения.

В некоторых случаях информация об освещении (тени, блики, глубина) помещалась прямо в текстуры. Тени игроков обычно были простыми текстурами, которые следуют за персонажем. В то время не было возможности отбрасывать правильные тени.

Тогда можно было получить базовый шейдинг на моделях, но обычно информация об освещении была неправильной. Такие игры, как The Legend of Zelda: Ocarina of Time или Crash Bandicoot, использовали много информации об освещении в своих текстурах и отрисовке вершин на геометрии. Это было сделано, чтобы определённые области выглядели более светлыми, тёмными или окрашенными в определённый цвет.

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

Следующее поколение консолей PS2, Xbox и Gamecube попытались решить некоторые из этих проблем. В первую очередь улучшения коснулись разрешения текстур и освещения.

Silent Hill 2 была одной из определяющих игр. Самым большим прорывом 2001 года стало использование теней в реальном времени. Некоторая информация об освещении, которую раньше помещали в текстуры, могла быть удалена, но для большей части игр этого поколения они всё ещё активно использовались.

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

Это была ещё одна причина, по которой запекание информации в текстуры всё ещё было распространено. В пререндере это не было проблемой: ткань, стекло, волосы и кожа выглядели правдоподобно. У рендеринга в реальном времени такого не было. Но под конец поколения ситуация немного изменилась на Xbox.

Карты бликов и карты нормалей появлялись в таких играх, как Halo 2 и Doom 3. Карты бликов позволили поверхностям реагировать на свет более реалистично — металл стал блестящим и так далее. Нормали позволили добавить больше деталей в объекты с низким количеством полигонов.

Карта нормалей — это тип bump mapping, который позволяет поверхностям реагировать на свет с большей детализацией. Это важная технология, используемая практически во всех моделях вплоть до современности.

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

До этого множество текстур либо раскрашивались вручную, либо сшивались вместе в Photoshop, либо совмещали эти подходы. С наступлением эпохи Xbox 360 и PS3 этот способ создания текстур ушёл в прошлое, так как качество ассетов возросло с увеличением разрешения.

Также стало понятно, как работают материалы с пререндерным шейдингом. Это изменило правила игры для многих художников — материалы стали намного сложнее, чем раньше. Это демо 2005 года отличалось от всего, что было на тот момент. Xbox 360 ещё даже не вышла.

Также в то время появился новый способ освещения сцены — ambient occlusion. Это было слишком затратно для рендеринга в реальном времени, поэтому художники просто добавили его в текстуры. АО воссоздаёт непрямые тени от света.

Даже сегодня АО не на 100% обрабатывается в реальном времени. Во многом стало лучше, благодаря SSAO или DFAO. Запечённые карты AO всё ещё используются сегодня, но, вероятно, когда-нибудь исчезнут, так как рендеры станут ещё лучше.

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

Но были и некоторые недостатки: низкое разрешение моделей и текстур, новые шейдеры, которые требуют большого количества ресурсов и так далее.

Другой проблемой была карта бликов. Тогда на один объект была одна карта того, насколько «блестящим» он был. Из-за этого материалы не воспринимались реальными. Поэтому некоторые разработчики начали разделять карты бликов. Такое было, например, в Bioshock Infinite.

Карты бликов после этого стали разделяться, например, на тип материала (дерево, золото, бетон и так далее) и его состояние (царапины, износ и так далее). Это совпало и с появлением нового типа модели шейдинга — Physically Based Rendering (PBR).

PBR стал стандартом для многих игр. Техника, популяризированная Pixar, стандартизировала способ создания правдоподобных материалов в компьютерной графике. И это может быть применено в режиме реального времени.

Кроме того, появились и дополнительные улучшения, например, tone mapping и color grading. На предыдущем поколении потребовалась бы целая вечность корректирования текстур, чтобы добиться таких эффектов.

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

Оригинальный твит:

Wanted to do a little thread this morning on the history of 3D video game texturing. We have come a long way since the early days of real time 3D used in home consoles but there are still practices used today to make game textures that go all the way back to those early days. https://t.co/ayEBsExo3f

Перевод всей ветки:

#3d #моделирование #лонг

Материал дополнен редакцией
{ "author_name": "Andrey Apanasik", "author_type": "self", "tags": ["\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","long","\u043b\u043e\u043d\u0433","3d"], "comments": 24, "likes": 156, "favorites": 266, "is_advertisement": false, "subsite_label": "gamedev", "id": 48837, "is_wide": false, "is_ugc": true, "date": "Thu, 02 May 2019 15:09:07 +0300" }
{ "id": 48837, "author_id": 1922, "diff_limit": 1000, "urls": {"diff":"\/comments\/48837\/get","add":"\/comments\/48837\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/48837"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954, "last_count_and_date": null }

24 комментария 24 комм.

Популярные

По порядку

Написать комментарий...
20

Простите, но перевод просто...очень топорный.
Часть смысла утеряна, там даже некоторые части пропущены.

нет рельефного текстурирования

Bump Mapping - это бамп маппинг, не надо его переводить.
более детальной детализации

улучить

но это обычно было лишено правильной информации

Риал тайм

реалтайм
прям в текстуры

Но для людей далёких от геймдева и не дружащих с английским - сойдёт.

Ответить
5

Пытался как мог (。•́︿•̀。) Спасибо за рекомендации.

Bump Mapping - это бамп маппинг, не надо его переводить.

Но, к примеру, ru вариант статьи про бамп мапинг это и выдаёт: https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D1%8C%D0%B5%D1%84%D0%BD%D0%BE%D0%B5_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D1%83%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Ответить
3

Вот смотрите...
Рельефное текстурирование - это Bump Mapping, Normal, Parallax, POM и Displacement Mapping.
Так какое имелось ввиду в оригинале? (есть случаи когда, наоборот, в русском языке термин более узкий)

Ответить
2

Каюсь, я в 3d не силён, в целом, вообще больше по бекенду. Но тред показался интересным. Ну, думаю, редакция сейчас всё поправит )

Ответить
7

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

Ответить
0

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

Ответить
0

Современные инструменты для создания текстур работают сразу на уровне материала и генерируют все нужные карты, разработку это не делает дороже

Я не думаю что сейчас кто-то в крупных студиях на потоке делает все отдельные карты в фотошопе, есть Substance Painter/Designer, а для динозавров есть Quixel для фотошопа

Ответить
3

Ох, помню, как в своё время часто пересматривал то самое демо UT3 (тогда ещё UT2007) на PS3 (вроде, было на диске "Игромании"), и просто не мог поверить своим глазам.

Но как же обидно было видеть тот бесстыдный даунгрейд, который провернули с игрой, это просто стыдоба... :(( Оптимизации оптимизациями, но вместо революционной по визуалу UT2007 на выходе получили унылый и мрачный UT3. Потому что "Как в Gears of War!", вот только 1ым Гирям эта эстетика очень шла к лицу, в отличие от Турнира.

На видео: геймплей UT (тогда ещё) 2007 с какой-то презентации (точных данных, увы, не помню).

Ответить
1

Я никак не пойму, тут на сетке в упор не могу увидеть достаточное количество вертексов чтобы сделать такую плавную их покраску. А если это карта теней, то для чего окно выделять отрезками?

Ответить
2

Эм, а как вертексы с покраской связаны? Я прост такое экстремальное лоуполи и не делал никогда. Всеж от текселя зависит.

Ответить
5

Вертексы могут хранить в себе rgb, и эти значения можно вытаскивать в шейдере и отображать

Во многих играх на PS1 тени на статических объектах делаются не картами теней и не запечены прямо в текстуру, а сделаны именно покраской вертексов - в Vagrant Story, например, так - я проверял текстурные атласы игры специально для этого, в них нет никакой информации для теней, кроме, разве что, теней решеток от каминов и т.п., то есть всякой мелочи, которую проще нарисовать в текстуру

На это принципе работает блендинг текстур в многослойном материале, только там вместо rgb вертекса рисуется та или иная текстура

Ответить
4

Вы не просили, но я вам побольше скриншотиков принёс (делал с мобилки).

Ответить
2

Скриншотам из Vagrant Story я всегда рад, что за игра!

Ответить
2

И вдогоночку с самым красивым местом игры

Ответить
1

Интересно, там тени по вертекс колору вручную красятся, или есть какой-то аналог бейка лайтмапы, который просчитывает свет и назначает вертексам цвета?

Ответить
1

Да, сам бы хотел знать как это делали. Я думаю что просчитывание света с тем количеством вертексов, что были доступны PS1, не было бы достаточно эффективным, поэтому я склонен считать что художники вручную добавляли детализацию к определенным частям меша, чтобы вручную покрасить

Ответить
0

О как, прообраз полипеента, спасибо.

Ответить
2

PolyPaint это по сути и есть раскраска вертексов, только в зибраше все красится так красиво, потому что полигонов очень много

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

Слева 289 вертексов, справа 66к вертексов, для сравнения

Ответить
2

А, я кажется понял, там наверное используется более светлая текстура, и дополнительные полигоны созданы для UV

Хитрый ход!

Ответить
1

Vertex color так и работает же - на полигоне между вертексами с разным цветом идет плавный градиент. Вот кубик для наглядности, 2 вертекса покрашены в черный

Ответить
0

Можете попробовать прям в треде спросить, автор скорей всего ответит.
https://twitter.com/BryanRenno/status/1122883590230929408

For one lighting information was either painted into the textures (shadows, highlights, depth), painted on each vertice of a triangle, or a combination of both. Player shadows usually were a simple texture that followed the character. You had no ability to cast proper shadows https://t.co/mvTb3W53oz
Ответить
0

Я не хочу в твиттер, там страшно (´・ω・`)

Ответить
1

Я там по большей части сижу ради подобных тредов. Так сказать, из первых уст )

Ответить
1

Отличная статья!

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Гейб Ньюэлл наконец-то анонсировал то,
чего все так долго ждали
Подписаться на push-уведомления