Поделиться через


Предварительная компиляция передачи радианса (Direct3D 9)

Использование предкомпьютерной передачи сияния

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

  • Предполагается, что объекты являются жесткими (т. е. без деформаций).
  • Это объектно-ориентированный подход (если объекты не перемещаются вместе, эти глобальные эффекты не поддерживаются между ними).
  • Моделировается только низкочастотное освещение (в результате чего мягкие тени).) Для высокочастотных огней (острые тени), традиционные методы должны быть использованы.

ДЛЯ PRT требуется один из следующих вариантов, но не оба:

  • модели с высокой степенью тесселяции и vs_1_1
  • ps_2_0

Стандартное диффузное освещение и PRT

На следующем рисунке показана традиционная модель освещения (n · l). Острые тени можно включить с помощью другого прохода и некоторых форм теневого метода (карты глубины тени или теневые тома). Добавление нескольких светов потребует либо нескольких проходов (если тени будут использоваться) или более сложных шейдеров с традиционными методами.

снимок экрана, отрисованный с помощью традиционной модели освещения

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

снимок экрана, отрисованный с помощью prt

PRT с interreflections

Прямое освещение достигает поверхности непосредственно от света. Межрефлекты — это свет, достигающий поверхности после отскоки от какой-то другой поверхности несколько раз. PRT может моделировать это поведение, не изменяя производительность во время выполнения, просто выполняя симулятор с различными параметрами.

На следующем рисунке используется только прямая функция PRT (0 отскоков без переопределения).

снимок экрана, отрисованный с помощью прямого prt только

Следующая иллюстрация создается с помощью PRT с межрефлексиями (2 отскоки с межрефлексиями).

снимок экрана, отрисованный с помощью prt с

PRT с подстраховкой разброса

Подземная разбросовка является техникой, которая моделирует, как свет проходит через определенные материалы. Например, нажимайте фонарик на ладонь руки. Свет от фонарика проходит через руку, отскакивает (меняя цвет в процессе) и выходит из другой стороны руки. Это также можно моделировать с простыми изменениями в симуляторе и без изменений в среде выполнения.

На следующем рисунке показано, как prT с разбросом подстраховки.

снимок экрана, отрисованный с помощью prt с разбросанным подстраховкой

Как работает PRT

Следующие термины полезны для понимания работы PRT, как показано на следующей схеме.

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

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

Перенос векторов: перенос векторов сопоставляет исходную сияние источника в сияние выхода и предварительно компилируется в автономном режиме с помощью сложного моделирования транспорта света.

схема работы prt

PRT факторы процесса отрисовки на два этапа, как показано на следующей схеме:

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

схема потока данных prt

Использование API PRT

  1. Вычисление векторов передачи с помощью одного из вычислительных ресурсов... методы ID3DXPRTEngine.

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

    Конечные значения освещения вычисляются в шейдере вершин, реализующем следующее сжатое уравнение отрисовки.

    уравнение отрисовки prt

    Где:

    Параметр Описание
    Rp Один канал выходного сияния на вершине p и оценивается на каждой вершине сетки.
    Mk Среднее значение для кластера k. Это вектор Order 2.
    k Идентификатор кластера для вершины p.
    L' Приближение исходного сияния к базовым функциям SH. Это вектор Order 2.
    j Целое число, которое суммирует число векторов PCA.
    wpj Вес Jth PCA для точки p. Это один коэффициент.
    Bkj Базовый вектор Jth PCA для кластера k. Это вектор Order 2.

     

    Извлечение... Методы ID3DXPRTCompBuffer предоставляют доступ к сжатым данным из имитации.

  2. Вычислить исходную сияние.

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

    Функция Цель
    D3DXSHEvalDirectionalLight Приблизит обычный направленный свет.
    D3DXSHEvalSphericalLight Приблизительные локальные сферические источники света. (Обратите внимание, что PRT работает только с средами освещения расстояния.)
    D3DXSHEvalConeLight Приближается к удаленному источнику света. Примером будет солнце (очень маленький угол конуса).
    D3DXSHEvalHemisphereLight Вычисляет свет, представляющий собой линейную интерполяцию между двумя цветами (по одному на каждом полюсе сферы).

     

  3. Вычислить сияние выхода.

    Уравнение 1 теперь должно оцениваться в каждой точке с помощью вершины или шейдера пикселей. Перед вычислением шейдера константы должны быть предварительно компьютированы и загружены в постоянную таблицу (дополнительные сведения см. в демонстрационных примерах PRT). Сам шейдер является простой реализацией этого уравнения.

    struct VS_OUTPUT
    {
        float4 Position   : POSITION;   // vertex position 
        float2 TextureUV  : TEXCOORD0;  // vertex texture coordinates 
        float4 Diffuse    : COLOR0;     // vertex diffuse color
    };
    
    VS_OUTPUT Output;   
    Output.Position = mul(vPos, mWorldViewProjection);
    
    float4 vExitR = float4(0,0,0,0);
    float4 vExitG = float4(0,0,0,0);
    float4 vExitB = float4(0,0,0,0);
    
    for (int i=0; i < (NUM_PCA_VECTORS/4); i++) 
    {
       vExitR += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*0];
       vExitG += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*1];
       vExitB += vPCAWeights[i] * 
           vClusteredPCA[iClusterOffset+i+1+(NUM_PCA_VECTORS/4)*2];
    }
    
    float4 vExitRadiance = vClusteredPCA[iClusterOffset];
    vExitRadiance.r += dot(vExitR,1);
    vExitRadiance.g += dot(vExitG,1);
    vExitRadiance.b += dot(vExitB,1);
    
    Output.Diffuse = vExitRadiance;
    

Ссылки

Дополнительные сведения о PRT и сферических гармониях см. в следующих статьях:

Precomputed Radiance Transfer for Real-Time Rendering in Dynamic, 
Low-Frequency Lighting Environments 
P.-P. Sloan, J. Kautz, J. Snyder
SIGGRAPH 2002 

Clustered Principal Components for Precomputed Radiance Transfer 
P.-P. Sloan, J. Hall, J. Hart, J. Snyder 
SIGGRAPH 2003 

Efficient Evaluation of Irradiance Environment Maps 
P.-P. Sloan 
ShaderX 2,  W. Engel 

Spherical Harmonic Lighting: The Gritty Details 
R. Green 
GDC 2003 

An Efficient Representation for Irradiance Environment Maps 
R. Ramamoorthi, P. Hanrahan 

A Practical Model for Subsurface Light Transport 
H. W. Jensen, S. R. Marschner, M. Levoy, and P. Hanrahan 
SIGGRAPH 2001 

Bi-Scale Radiance Transfer 
P.-P. Sloan, X. Liu, H.-Y. Shum, J. Snyder
SIGGRAPH 2003 

Fast, Arbitrary BRDF Shading for Low-Frequency Lighting Using Spherical 
Harmonics 
J. Kautz, P.-P. Sloan, J. Snyder
12th Eurographics Workshop on Rendering 

Precomputing Interactive Dynamic Deformable Scenes 
D. James, K. Fatahalian 
SIGGRAPH 2003 

All-Frequency Shadows Using Non-linear Wavelet Lighting Approximation 
R. Ng, R. Ramamoorth, P. Hanrahan 
SIGGRAPH 2003 

Matrix Radiance Transfer 
J. Lehtinen, J. Kautz
SIGGRAPH 2003 

Math World 
E. W. Weisstein, Wolfram Research, Inc. 

Quantum Theory of Angular Momentum 
D. A. Varshalovich, A.N. Moskalev, V.K. Khersonskii 

дополнительные разделы

уравнения PRT (Direct3D 9)

представления PRT с текстурами (Direct3D 9)

ID3DXPRTBuffer

ID3DXPRTCompBuffer

ID3DXPRTEngine

ID3DXTextureGutterHelper

предварительно компьютированные функции передачи сияния

математические функции