Страница 6: VXGI (Voxel Global Illumination)

Реалистичный расчет освещения по-прежнему остаётся серьёзной проблемой. Самый качественный результат дала бы полная трассировка лучей, но прежде чем она станет возможна в нынешних разрешениях, пройдёт ещё немало лет. В качестве промежуточного шага NVIDIA предлагает технологию воксельного глобального освещения VXGI (Voxel Global Illumination).

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

С технологией VXGI NVIDIA выполняет динамический анализ сцены с учётом отражений прямых и непрямых источников света, в том числе от предыдущих отражений, а также рассеянного света.

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

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

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

На пути к VXGI и трассировке лучей первой остановкой были карты освещения (Light Mapping), но с ними поверхность давала одинаковые отражения со всех направлений. В результате можно было добавлять красивые отражающие поверхности, но они не имели какой-либо структуры или характеристик отражения.

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

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

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

Технология Ambient Occlusion обеспечивала реалистичное освещение сложной геометрии, но не с помощью трассировки пути, а через более простые и приближённые вычисления, симулирующие освещение. В игре Watch_Dogs NVIDIA как раз недавно объявила поддержку улучшенного алгоритма HBAO+ (Horizon Based Ambient Occlusion). Современные способы освещения обычно сочетают приведённые выше технологии.

С новым методом VXGI NVIDIA желает сделать ещё один шаг вперёд, в сторону трассировки лучей. Для этого NVIDIA вводит ряд упрощений. Так, непрямой свет всегда считается несфокусированным, и он учитывается в расчете только первого отражения, то есть базовой интенсивности. Теоретически VXGI может выполнять расчеты и более одного отражения, но в таком случае объём вычислений значительно возрастает, и в реальном времени их провести проблематично.

VXGI (Voxel Global Illumination)
VXGI (Voxel Global Illumination)

Технология VXGI разделяет освещенное 3D-пространство на 3D-воксели. Они представляют собой простые 3D-объекты, которым можно привязать два свойства: прозрачность для света, а также в каком направлении и в каком цвете воксель излучает свет. Для разделения пространства на воксели требуется выполнение определенных процедур семплирования, которые опираются на выделенные аппаратные блоки, доступные только в архитектуре Maxwell. Они также входят в состав DirectX 12, где Maxwell тоже себя хорошо показывает. Но подробнее об этом позже.

VXGI (Voxel Global Illumination)VXGI (Voxel Global Illumination)

VXGI (Voxel Global Illumination)

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

VXGI (Voxel Global Illumination)VXGI (Voxel Global Illumination)

VXGI (Voxel Global Illumination)

Направление и длина конуса описывают путь света, с данного направления свет падает на поверхность. Толщина конуса определяет рассеяность света: чем толще конус, тем более рассеянный получается свет. Сегодня на пиксель обычно используются 3-4 конуса. Это число можно менять, оно тоже соответствует уровню детализации освещения.

Для лучшего ознакомления с технологией мы рекомендуем посмотреть следующий видеоролик Youtube: