Открыть сервис

G-буфер

G-буфер (от англ. geometry buffer — буфер геометрии) — это набор текстур (изображений), в которых для каждого пикселя сцены сохраняется информация о геометрии и материалах объектов: нормали, глубина, цвет (альбедо), координаты и другие свойства. G-буфер является ключевым элементом отложенного рендеринга (deferred shading) — метода, при котором освещение вычисляется не для всех треугольников сцены, а только для видимых пикселей, что значительно ускоряет обработку большого числа источников света.

Назначение и принцип работы

В классическом (прямом) рендеринге каждый объект обрабатывается вместе со своим освещением. Если в сцене присутствуют десятки источников света, каждый объект приходится освещать многократно, что создаёт высокую вычислительную нагрузку. Отложенный рендеринг решает эту проблему в два этапа:

  1. Проход геометрии — сцена отрисовывается без освещения, а все необходимые данные о поверхности записываются в G-буфер.
  2. Проход освещения — на основе данных из G-буфера для каждого пикселя вычисляется итоговое освещение с учётом всех источников света.

Такой подход позволяет отделить сложность геометрии от сложности освещения: количество объектов влияет только на первый этап, а количество источников света — только на второй.

Состав G-буфера

Типичный G-буфер содержит несколько текстур (целевых буферов рендеринга), каждая из которых хранит определённый тип данных:

  • Альбедо (диффузный цвет) — базовый цвет поверхности без учёта освещения;
  • Нормали — векторы, перпендикулярные поверхности, заданные в пространстве экрана или мира;
  • Глубина — расстояние от камеры до поверхности (часто хранится в Z-буфере);
  • Спекулярный цвет и степень блеска — параметры зеркального отражения;
  • Позиция — мировые координаты пикселя (иногда вычисляются из глубины);
  • Материальные свойства — шероховатость, металличность, коэффициент преломления;
  • Поток (motion vectors) — данные о движении пикселя для пост-эффектов, таких как размытие в движении.

Точный состав G-буфера зависит от используемого алгоритма освещения и требований проекта. Например, в физически корректном рендеринге (PBR) обязательными являются карты шероховатости и металличности.

Преимущества и недостатки

Основное преимущество G-буфера — производительность при большом количестве динамических источников света. Отложенный рендеринг широко применяется в современных игровых движках (Unreal Engine, Unity, CryEngine) и в интерактивных приложениях реального времени.

К недостаткам относятся:

  • Высокое потребление памяти — несколько полноэкранных текстур с высокой разрядностью (обычно 32 бита на канал) занимают значительный объём видеопамяти;
  • Сложность с прозрачными объектами — отложенный рендеринг плохо работает с полупрозрачными поверхностями, для них приходится использовать отдельный прямой проход;
  • Ограниченная поддержка аппаратного сглаживания — классические методы MSAA (мультисемплинг) несовместимы с G-буфером, требуются пост-обработочные методы;
  • Трудности с большим количеством уникальных материалов — данные о материалах приходится упаковывать в ограниченное число текстур.

Применение

G-буфер используется не только для освещения, но и для реализации различных пост-эффектов: глубины резкости, тумана, окклюзии окружающей среды (SSAO), контурного выделения объектов, а также в алгоритмах трассировки лучей для ускорения пересечения лучей с геометрией. В научной визуализации и при создании спецэффектов в кино G-буфер применяется для композитинга — объединения трёхмерных элементов с живыми съёмками.

История

Концепция отложенного рендеринга была предложена в конце 1980-х годов, но широкое распространение получила лишь в середине 2000-х, когда возможности видеокарт позволили использовать несколько целевых буферов рендеринга (MRT) одновременно. Одной из первых массовых игр, использующих G-буфер, стала Stalker: Тень Чернобыля (2007). В дальнейшем технология стала стандартом для игр класса AAA.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →