Transfer Radiance Prakomputasi (Direct3D 9)

Menggunakan Transfer Radiance yang Telah Dikomputasi

Ada beberapa bentuk kompleksitas yang ada dalam adegan menarik, termasuk bagaimana lingkungan pencahayaan dimodelkan (yaitu, model pencahayaan area versus titik/arah) dan jenis efek global apa yang dimodelkan (misalnya, bayangan, interrefleksi, penyebaran di bawah permukaan.) Teknik penyajian interaktif tradisional memodelkan sejumlah terbatas kompleksitas ini. PRT memungkinkan efek ini dengan beberapa batasan signifikan:

  • Objek diasumsikan kaku (yaitu, tidak ada deformasi).
  • Ini adalah pendekatan yang ber sentris objek (kecuali objek dipindahkan bersama-sama, efek global ini tidak dipertahankan di antara mereka).
  • Hanya pencahayaan frekuensi rendah yang dimodelkan (menghasilkan bayangan lunak.) Untuk lampu frekuensi tinggi (bayangan tajam), teknik tradisional harus digunakan.

PRT memerlukan salah satu hal berikut, tetapi tidak keduanya:

  • model dan vs_1_1 yang sangat tessellated
  • ps_2_0

Pencahayaan Difus Standar versus PRT

Ilustrasi berikut dirender menggunakan model pencahayaan tradisional (n · l). Bayangan tajam dapat diaktifkan menggunakan pass lain dan beberapa bentuk teknik bayangan (peta kedalaman bayangan atau volume bayangan). Menambahkan beberapa lampu akan memerlukan beberapa pass (jika bayangan akan digunakan) atau shader yang lebih kompleks dengan teknik tradisional.

cuplikan layar ilustrasi yang dirender dengan menggunakan model pencahayaan tradisional

Ilustrasi berikutnya dirender dengan PRT menggunakan perkiraan terbaik dari satu cahaya arah yang dapat diatasi. Ini menghasilkan bayangan lembut yang akan sulit dihasilkan dengan teknik tradisional. Karena PRT selalu memodelkan lingkungan pencahayaan lengkap yang menambahkan beberapa lampu atau menggunakan peta lingkungan, Anda hanya akan mengubah nilai (tetapi bukan jumlah) konstanta yang digunakan oleh shader.

cuplikan layar ilustrasi yang dirender dengan menggunakan prt

PRT dengan Interrefleksi

Pencahayaan langsung mencapai permukaan langsung dari cahaya. Interrefleksi adalah cahaya mencapai permukaan setelah memantul dari beberapa permukaan lain beberapa kali. PRT dapat memodelkan perilaku ini tanpa mengubah performa pada durasi hanya dengan menjalankan simulator dengan parameter yang berbeda.

Ilustrasi berikut dibuat hanya menggunakan PRT langsung (0 pantulan tanpa interrefleksi).

cuplikan layar ilustrasi yang dirender dengan menggunakan prt langsung saja

Ilustrasi berikut dibuat menggunakan PRT dengan interrefleksi (2 pantulan dengan interrefleksi).

cuplikan layar ilustrasi yang dirender dengan menggunakan prt dengan interrefleksi

PRT dengan Sebaran Subsurface

Subsurface menyebar adalah teknik yang memodelkan bagaimana cahaya melewati bahan tertentu. Sebagai contoh, tekan senter menyala ke telapak tangan Anda. Cahaya dari senter melewati tangan Anda, memantul di sekitar (mengubah warna dalam proses), dan keluar dari sisi lain tangan Anda. Ini juga dapat dimodelkan dengan perubahan sederhana pada simulator dan tidak ada perubahan pada runtime.

Ilustrasi berikut menunjukkan PRT dengan tersebar di bawah tanah.

cuplikan layar ilustrasi yang dirender dengan menggunakan prt dengan tersebar di bawah lapisan bawah tanah

Cara Kerja PRT

Istilah berikut berguna untuk memahami cara kerja PRT, seperti yang diilustrasikan dalam diagram berikut.

Source Radiance: Radiasi sumber mewakili lingkungan pencahayaan secara keseluruhan. Dalam PRT, lingkungan arbitrer diperkirakan menggunakan dasar harmonis bulat - pencahayaan ini diasumsikan jauh relatif terhadap objek (asumsi yang sama yang dibuat dengan peta lingkungan.)

Radiance Keluar: Radiasi keluar adalah cahaya yang keluar dari titik di permukaan dari sumber yang mungkin (pantulan cahaya, permukaan bawah permukaan menyebar, emisi).

Transfer Vektor: Transfer vektor peta Source Radiance ke dalam radiasi keluar dan dikomputasi secara offline menggunakan simulasi transportasi cahaya yang kompleks.

diagram cara kerja prt

PRT memperhitungkan proses penyajian menjadi dua tahap, seperti yang ditunjukkan dalam diagram berikut:

  1. Simulasi transportasi ringan yang mahal melakukan prakomkomteksi koefisien transfer yang dapat digunakan pada durasi.
  2. Tahap run-time yang relatif ringan terlebih dahulu mempertaruhkan lingkungan pencahayaan menggunakan dasar harmonis bulat, kemudian menggunakan koefisien pencahayaan ini dan koefisien transfer yang telah dikomputasi (dari tahap 1) dengan shader sederhana, yang mengakibatkan cahaya keluar (cahaya meninggalkan objek).

diagram aliran data prt

Cara Menggunakan API PRT

  1. Komputasi vektor transfer dengan salah satu Komputasi... metode ID3DXPRTEngine.

    Berurusan langsung dengan vektor transfer ini membutuhkan sejumlah besar memori dan komputasi shader. Kompresi secara signifikan mengurangi jumlah komputasi memori dan shader yang diperlukan.

    Nilai pencahayaan akhir dihitung dalam shader puncak yang mengimplementasikan persamaan penyajian terkompresi berikut.

    persamaan penyajian prt

    Di mana:

    Parameter Deskripsi
    Rp Satu saluran radiasi keluar pada puncak p dan dievaluasi di setiap puncak pada jala.
    Markus Rata-rata untuk k kluster. Ini adalah vektor Koefisien Order².
    k ID kluster untuk vertex p.
    L' Perkiraan radiasi sumber ke dalam fungsi dasar SH. Ini adalah vektor Koefisien Order².
    j Bilangan bulat yang menjumlahkan jumlah vektor PCA.
    wpj Bobot PCA jth untuk titik p. Ini adalah koefisien tunggal.
    Bkj Vektor basis PCA jth untuk k kluster. Ini adalah vektor Koefisien Order².

     

    Ekstrak... Metode ID3DXPRTCompBuffer menyediakan akses ke data terkompresi dari simulasi.

  2. Menghitung radiasi sumber.

    Ada beberapa fungsi pembantu di API untuk menangani berbagai skenario pencahayaan umum.

    Fungsi Tujuan
    D3DXSHEvalDirectionalLight Perkiraan cahaya arah konvensional.
    D3DXSHEvalSphericalLight Perkiraan sumber cahaya bulat lokal. (Perhatikan bahwa PRT hanya berfungsi dengan lingkungan pencahayaan jarak.)
    D3DXSHEvalConeLight Perkiraan sumber cahaya area yang jauh. Contohnya adalah matahari (sudut kerujut yang sangat kecil).
    D3DXSHEvalHemisphereLight Mengevaluasi cahaya yang merupakan interpolasi linier antara dua warna (satu di setiap tiang bola).

     

  3. Menghitung radiasi keluar.

    Persamaan 1 sekarang harus dievaluasi di setiap titik menggunakan vertex atau pixel shader. Sebelum shader dapat dievaluasi, konstanta harus dikomputasi sebelumnya dan dimuat ke dalam tabel konstanta (lihat Sampel Demo PRT untuk detailnya). Shader itu sendiri adalah implementasi langsung dari persamaan ini.

    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;
    

Referensi

Untuk informasi selengkapnya tentang PRT dan harmonik bunyi, lihat makalah berikut ini:

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 

Topik tingkat lanjut

Persamaan PRT (Direct3D 9)

Mewakili PRT Dengan Tekstur (Direct3D 9)

ID3DXPRTBuffer

ID3DXPRTCompBuffer

ID3DXPRTEngine

ID3DXTextureGutterHelper

Fungsi Transfer Radiance yang Telah Dikomputasi

Fungsi matematika