Данный блог является переводом следующей серии статей:
www.adriancourreges.com/blog/2015/11/02/gta-v-gr..
Технологии рендеринга в Grand Theft Auto V
Серия Grand Theft Auto прошла длинный путь, начиная с первой части, выпущенной в 1997 году. Два года назад Rockstar выпустила GTA V. Игра имела колоссальный успех: было продано 11 миллионов копий в первые 24 часа и побито 7 мировых рекордов.
Поиграв на PS3, я был поражен тем, насколько игра технически «отполирована».
Ничто не портит погружение в игру так, как экран загрузки: в GTA V вы можете играть часами, объездить сотни километров огромного открытого мира не прерываясь. Учитывая подгрузку ресурсов и спецификации PlayStation 3 (256 Мб оперативной и 256 Мб графической памяти) я был удивлён, что игра не падает спустя 20 минут, это настоящее техническое чудо.
Здесь я расскажу о ПК-версии, запущенной с использованием DirectX 11. Игра использует несколько гигабайт как оперативной, так и графической памяти. Хотя мои наблюдения основаны на ПК версии, я уверен, что могу применить их к PS4 и, в некоторой степени, к PS3.
Часть 1. Построение кадра
Вот кадр, который мы будет исследовать: Майкл со своей Rapid GT на фоне Лос-Сантоса.
GTA V использует отложенный рендеринг, работая с HDR буферами. Их нельзя отобразить на мониторе «как есть», так что я обработал их оператором Рейнгарда, преобразовав к формату 8 бит на канал пикселя.
Кубическая карта окружения
Первым делом игра рисует кубическую карту окружения. Она генерируется в реальном времени каждый кадр и нужна для рендеринг реалистичных отражений. Карта рисуется в режиме непосредственного (forward) рендеринга.
Как же эта карта рисуется? Для тех, кто незнаком с этой техникой: представьте, что вы в реальном мире делаете панорамную фотографию: ваша камера стоит на штативе. Представьте, что вы стоите в центре большого куба и фотографируете шесть его сторон, каждый раз поворачиваясь на 90 градусов.
Именно так и поступает игра: каждая грань рисуется в HDR текстуру с разрешением 128×128 HDR. Первая сторона рисуется вот так:
+ ещё 1 картинка
Этот же процесс повторятся 5 раз для других сторон, и мы получаем кубическую текстуру:
На каждую сторону куба требуется примерно 30 вызовов отрисовки, рисуемые модели содержат очень малое количество полигонов, причём рисуется только «пейзаж»: ландшафт, небо, некоторые здания, персонажи и транспорт не рендерятся.
По этой причине вы видите только отражения окружения, но не машин и людей.
Преобразование кубической карты в дуально-параболическую
Кубическая текстура окружения преобразуется в дуально-параболическую.
Куб просто проецируется на другое пространство, проекция выглядит как sphere-mapping, но только с 2 “полусферами”.
Зачем такое преобразование? Я думаю, что это (как всегда) сделано для оптимизации: с кубической текстурой пиксельный шейдер может получить доступ к 6 граням с 128×128 текселями, дуально-параболическая карта – к 2 “полусферам” с 128×128 текселями. Даже лучше: поскольку камера большую часть времени проводит наверху машины, то будет больше обращений к верхней полусфере.
Параболическая проекция сохраняет детали отражений, направленных вверх и вниз. Для GTA это подходит идеально: крыши и капоты машин обычно направлены вверх, для них нужны хорошо выглядящие отражения верхней половины мира.
Кроме того, кубмапы имеют проблемы с рёбрами: если mip-уровни строятся для каждой стороны независимо от других, то могут возникнуть заметные швы на рёбрах, и старые поколения видеокарт не поддерживают фильтрацию между гранями. Дуально-параболические карты избавлены от этого недостатка.
Обновлено: как пишут в комментариях, в GTA IV также использовались параболические карты, но они строились без использования кубических текстур: модели искажались напрямую вершинным шейдером.
Отсечение и уровни детализации
Этот шаг выполняется вычислительным шейдером, поэтому у меня нет никаких иллюстраций.
В зависимости от расстояния до камеры, объект будет нарисован с низкой или высокой детализацией, или не будет нарисован вовсе.
К примеру, трава и цветы не будут нарисованы дальше определенной дистанции. На этом шаге определяется, будет ли нарисован объект, и с какой детальностью.
Здесь есть серьёзное отличие в конвейере рендеринга между PS3 (которая не поддерживает вычислительные шейдеры) и PC/PS4: на PS3 отбрасывание объектов выполняется на процессоре Cell и его SPU.
Построение геометрического буфера
Основная часть рендеринга происходит здесь. Все видимые модели отрисовываются друг за другом, но вместо непосредственного вычисления освещения, вызовы отрисовки выводят информацию, необходимую для расчёта света, в так называемый геометрический буфер (G-Buffer). GTA V использует множественные цели рендеринга (Multiple Render Targets), так что вызовы отрисовки могут записывать данные одновременно в 5 текстур, называемых рендер-таргетами.
Позже эти буферы комбинируются для окончательного расчёта освещения. "Отложенный рендеринг" противопоставлятеся “непосредственному”, где каждый вызов отрисовки вычисляет освещение для каждого пикселя.
Здесь рисуются только непрозрачные объекты, прозрачные модели типа стекла требуют особой обработки и будут рассмотрены позже.
+ ещё 1 картинка
Все рендер-таргеты имеют узкий динамический диапазон (LDR) (RGBA, 8 бит на канал) и хранят различную информацию, необходимую для расчёта освещения.
Буферы:
- Карта рассеяного света: хранит “внутренний цвет” модели. Он определяется свойствами материала и в теории не зависит от воздействия света. Но вы ведь заметили отблески на капоте автомобиля? Интересно, что GTA V вычисляет вклад освещения от солнца перед выводом diffuse map.
Альфа-канал содержит информацию для смешивания (blending) (об этом подробнее позже) - Карта нормалей: хранит нормаль каждого пикселя (R, G, B). Альфа канал также используется, хотя я не уверен, как: похоже, это двоичная маска для некоторых растений, расположенных близко к камере.
- Карта бликов: хранит информацию, относящуюся к бликам и отражениям:
- Красный: интенсивность бликов
- Зеленый: гладкость поверхности
- Синий: коэффициент Френеля (обычно константа для всех пикселей, принадлежащих одному материалу)
- Карта освещенности: Красный канал, кажется, хранит энергию, полученную пикселем от солнца (рассчитывается на основе нормали и позиции пикселя и направлении солнца). Не уверен на 100% насчёт зеленого канала, но, похоже, там хранится энергия от других источников освещения. Синий канал содержит коэффициент излучения пикселя (ненулевое значение для неоновых ламп и фонарей). Альфа-канал используется для того, чтобы отметить пиксели кожи и листвы.
Ранее я сказал, что вывод одновременно идёт в 5 рендер-таргетов, но показал только 4 из них. Последний рендер-таргет – это буфер глубины и трафарета. Выглядит он вот так:
- Буфер глубины: содержит расстояние каждого пикселя до камеры
Интутивно ожидается, что самые дальние пиксели должны быть белыми (глубина = 1), и они должны становиться темнее по мере приближения. Это не тот случай: GTA V использует инвертированный буфер глубины. Почему? По причине того, что из-за особенностей представления чисел с плавающей точкой точность возле нуля максимальна. Это позволяет кодировать расстояние до удалённых объектов с большей точностью, что очень хорошо помогает от Z-конфликта. Огромная дальности прорисовки в игре сделала данный трюк необходимостью. Здесь ничего нового, Just Cause 2, например, использовал похожую технику. - Трафарет: используется для определения различных рисуемых сеток путём присваивания одного ID всем пикселям отдельных категорий моделей. Некоторые примеры значений трафарета:
- 0x89: Персонаж, управляемый игроком
- 0x82: Транспорт, управляемый игроком
- 0x01: Неигровые персонажи
- 0x02: Транспорт: авто, мотоциклы и др.
- 0x03: Трава, деревья и прочая растительность
- 0x07: Небо
На создание этих буферов понадобилось примерно 1900 команд рисования.
Заметьте, что сцена рисуется в порядке “от ближнего к дальнему”, это способ для оптимизации рендеринга с помощью “раннего Z-отсечения”: в процессе рисования сцены всё больше и больше фрагментов проваливают тест глубины в силу того, что они преграждены пикселями, более близкими к камере. Видеокарта не запускает шейдер для тех пикселей, которые не проходят тест глубины. Когда у вас сложные пиксельные шейдеры, рисование “от дальнего к ближнему” (он же Алгоритм художника) – худший по производительности выбор, “от ближнего к дальнему” наиболее оптимален.
Продолжение следует…
GTA 5 RP сервер с бонусом — это ролевой сервер для GTA V (Grand Theft Auto V), который предлагает игрокам дополнительные преимущества или награды, чтобы улучшить игровой опыт. Эти бонусы могут принимать разные формы и предназначены для привлечения новых игроков, стимулирования активности существующих пользователей или просто добавления дополнительной ценности к игровому процессу.
Преимущества серверов с бонусами
Ускорение прогресса: Стартовые и регулярные бонусы помогают новым игрокам быстрее войти в игру и начать развивать своего персонажа.
Мотивация к регулярной игре: Награды за активность и участие в ивентах стимулируют игроков возвращаться на сервер и принимать участие в различных активностях.
Поддержка и развитие сервера: Бонусы для донаторов помогают финансировать сервер и поддерживать его развитие, что приводит к улучшению качества игры и добавлению нового контента.
4. Повышение интереса: Уникальные предметы и эксклюзивный контент делают игровой процесс более увлекательным и разнообразным.
GTA 5 RP сервер с бонусом предоставляет игрокам дополнительные преимущества, которые делают игровой процесс более интересным и увлекательным. Эти бонусы могут включать стартовые привилегии, награды за активность, участие в ивентах, премиум-опции для донаторов и реферальные вознаграждения. Такие серверы обеспечивают стимулирующую и мотивирующую среду, которая поддерживает интерес игроков и способствует развитию сообщества.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.