Direct3D 9 (사전 계산 Radiance Transfer)

사전 계산 Radiance Transfer 사용

조명 환경을 모델링 하는 방법 (즉, 면적 조명 모델과 점/방향 1)과 모델링 되는 글로벌 효과의 종류 (예: 그림자, 상호 반사, subsurface 분산)를 비롯 한 다양 한 형태의 복잡성이 흥미로운 장면에 있습니다. 기존의 대화형 렌더링 기술은 이러한 복잡성의 제한 된 크기를 모델링 합니다. PRT는 다음과 같은 몇 가지 중요 한 제한 사항으로 이러한 효과를 줍니다.

  • 개체는 고정 된 것으로 가정 합니다 (즉, deformations).
  • 개체를 중심으로 하는 방법입니다. 개체를 함께 이동 하지 않으면 이러한 전역 효과가 유지 되지 않습니다.
  • 빈도가 낮은 조명만 모델링 됩니다 (소프트 그림자를 생성 함). 고주파음 (선명한 그림자)의 경우 기존 기술을 사용 해야 합니다.

PRT에는 다음 중 하나가 필요 합니다.

  • 매우 공간 분할 모델 및 vs _ 1 _ 1
  • ps _ 2 _ 0

표준 확산 조명 및 PRT

다음 그림은 기존 (n · l) 조명 모델을 사용 하 여 렌더링 됩니다. 다른 패스를 사용 하 여 어두운 그림자를 사용 하도록 설정 하 고 그림자 (그림자 깊이 맵 또는 섀도 볼륨)를 만들 수 있습니다. 여러 조명을 추가 하려면 여러 패스 (그림자를 사용 해야 하는 경우) 또는 기존 기법을 사용 하는 더 복잡 한 셰이더가 필요 합니다.

기존 조명 모델을 사용 하 여 렌더링 된 그림의 스크린샷

다음 그림은 확인할 수 있는 단일 방향성 광원의 가장 근사치를 사용 하 여 PRT로 렌더링 됩니다. 이로 인해 기존 기술로 생성 하기 어려운 소프트 섀도우가 발생 합니다. PRT는 항상 여러 조명을 추가 하거나 환경 맵을 사용 하 여 전체 조명 환경을 모델링 하므로 셰이더에 사용 되는 상수 값 (숫자 아님)만 변경 합니다.

prt를 사용 하 여 렌더링 된 그림의 스크린샷

Interreflections 사용

직접 조명은 광원에서 직접 화면에 도달 합니다. 상호 반사는 몇 번의 다른 화면을 바운스 한 후 표면에 도달 하는 빛입니다. PRT는 다른 매개 변수를 사용 하 여 시뮬레이터를 실행 함으로써 런타임에 성능을 변경 하지 않고이 동작을 모델링할 수 있습니다.

다음 그림은 직접 PRT를 사용 하 여 생성 됩니다 (상호 반사가 없는 0 바운스).

direct prt만 사용 하 여 렌더링 된 그림의 스크린샷

다음 그림은 interreflections를 사용 하는 PRT를 사용 하 여 생성 됩니다 (상호 반사가 있는 두 바운스).

interreflections 포함 된 prt를 사용 하 여 렌더링 된 그림의 스크린샷

Subsurface 분산이 있는 PRT

Subsurface 분산은 특정 재질을 통과 하는 빛을 모델링 하는 기술입니다. 예를 들어 손 모양에 대해 lit 손전등을 누릅니다. 손전등의 빛은 손을 통과 하 고 (프로세스에서 색 변경) 손으로 바운스 하 고 다른 쪽에서 종료 합니다. 이는 시뮬레이터에 대 한 간단한 변경 내용과 런타임을 변경 하지 않고 모델링할 수도 있습니다.

다음 그림에서는 subsurface 분산이 있는 PRT를 보여 줍니다.

subsurface 분산이 있는 prt를 사용 하 여 렌더링 된 그림의 스크린샷

PRT 작동 방법

다음 용어는 다음 다이어그램에 설명 된 것 처럼 PRT가 작동 하는 방식을 이해 하는 데 유용 합니다.

원본 Radiance: 소스 Radiance는 전체 조명 환경을 나타냅니다. PRT에서 임의의 환경은 구면 조화를 사용 하는 것으로 간주 됩니다 .이 조명은 개체를 기준으로 멀리 떨어져 있는 것으로 간주 됩니다. 환경 맵과 동일한 가정이 있습니다.

Exit Radiance: Exit Radiance는 가능한 소스 (반사 된 Radiance, subsurface 분산, 내보내기)에서 표면의 지점에 있는 광원입니다.

전송 벡터: 전송 벡터는 원본 Radiance를 exit Radiance에 매핑하고, 복잡 한 전송 시뮬레이션을 사용 하 여 사전 계산 오프 라인 상태입니다.

prt 작동 방법 다이어그램

PRT는 다음 다이어그램에 표시 된 것 처럼 렌더링 프로세스를 두 단계로 나눕니다.

  1. 런타임에 사용할 수 있는 저렴 한 전송 시뮬레이션 precomputes 전송 계수입니다.
  2. 비교적 간단한 실행 시간 단계는 먼저 구형 조화를 사용 하는 조명 환경에 근사치를 두고 이러한 조명 계수와 1 단계에서 만든 사전 계산 전송 계수를 간단한 셰이더를 사용 하 여 종료 radiance (개체의 조명)를 수행 합니다.

prt 데이터 흐름 다이어그램

PRT API를 사용 하는 방법

  1. 계산 중 하나를 사용 하 여 전송 벡터를 계산 합니다. ID3DXPRTEngine의 메서드.

    이러한 전송 벡터를 직접 처리 하려면 상당한 양의 메모리와 셰이더 계산이 필요 합니다. 압축 하면 필요한 메모리 및 셰이더 계산의 양이 크게 줄어듭니다.

    최종 조명 값은 다음 압축 된 렌더링 수식을 구현 하는 꼭 짓 점 셰이더에서 계산 됩니다.

    prt 렌더링 수식

    위치:

    매개 변수 Description
    성공한 꼭 짓 점 p에서 종료 radiance의 단일 채널이 메시의 모든 꼭 짓 점에서 계산 됩니다.
    프로토콜로 클러스터 k의 평균입니다. 계수의 주문에 대 한 것입니다.
    k 꼭 짓 점 p의 클러스터 ID입니다.
    L' 원본에서의 근사값은 SH radiance 함수에 있습니다. 계수의 주문에 대 한 것입니다.
    j PCA 벡터의 수를 합산 하는 정수입니다.
    wpj 지점 p에 대 한 jth PCA 가중치입니다. 이는 단일 계수입니다.
    Bkj 클러스터 k에 대 한 jth PCA 기반 벡터입니다. 계수의 주문에 대 한 것입니다.

    추출 ... ID3DXPRTCompBuffer 메서드는 시뮬레이션에서 압축 된 데이터에 대 한 액세스를 제공 합니다.

  2. 원본 radiance 계산 합니다.

    다양 한 일반적인 조명 시나리오를 처리 하는 API에는 몇 가지 도우미 함수가 있습니다.

    함수 용도
    D3DXSHEvalDirectionalLight 기존 방향성 광원을 대략적으로 계산 합니다.
    D3DXSHEvalSphericalLight 현지 구면 광원의 근사치를 계산 합니다. (PRT는 거리 조명 환경 에서만 작동 합니다.)
    D3DXSHEvalConeLight 원거리 면적 광원을 대략적으로 계산 합니다. 예를 들어 sun (매우 작은 원뿔 각도)이 있습니다.
    D3DXSHEvalHemisphereLight 두 색 사이의 선형 보간 인 조명을 계산 합니다 (구의 각 극에 하나씩).
  3. 종료 radiance을 계산 합니다.

    이제 수식 1은 꼭 짓 점 또는 픽셀 셰이더를 사용 하 여 모든 지점에서 계산 되어야 합니다. 셰이더를 평가 하려면 먼저 상수를 사전 계산 하 고 상수 테이블로 로드 해야 합니다 (자세한 내용은 PRT Demo 샘플 참조). 셰이더 자체는이 수식의 간단한 구현입니다.

    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

사전 계산 Radiance Transfer 함수

수학 함수