Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Usando transferência de radiação pré-computada
Existem várias formas de complexidade presentes em cenas interessantes, incluindo como o ambiente de iluminação é modelado (ou seja, modelos de iluminação de área versus modelos pontuais/direcionais) e que tipo de efeitos globais são modelados (por exemplo, sombras, interreflexões, dispersão subsuperficial). As técnicas tradicionais de renderização interativa modelam uma quantidade limitada dessa complexidade. A PRT permite estes efeitos com algumas restrições significativas:
- Os objetos são assumidos como rígidos (isto é, sem deformações).
- É uma abordagem centrada em objetos (a menos que os objetos sejam movidos juntos, esses efeitos globais não são mantidos entre eles).
- Apenas a iluminação de baixa frequência é modelada (resultando em sombras suaves). Para as luzes de alta frequência (sombras nítidas), teriam de ser utilizadas técnicas tradicionais.
A PRT requer um dos seguintes, mas não ambos:
- modelos e vs_1_1 altamente tessellated
- ps_2_0
Iluminação difusa padrão versus PRT
A ilustração a seguir é renderizada usando o modelo de iluminação tradicional (n · l). Sombras nítidas podem ser ativadas usando outra passagem e alguma forma de técnica de sombreamento (mapas de profundidade de sombra ou volumes de sombra). Adicionar várias luzes exigiria várias passagens (se as sombras forem usadas) ou sombreadores mais complexos com técnicas tradicionais.
A próxima ilustração é renderizada com PRT usando a melhor aproximação de uma única luz direcional que pode resolver. Isso resulta em sombras suaves que seriam difíceis de produzir com técnicas tradicionais. Como o PRT sempre modela ambientes de iluminação completos adicionando várias luzes ou usando um mapa de ambiente, você alteraria apenas os valores (mas não o número) de constantes usadas pelo sombreador.
PRT com Interreflexões
A iluminação direta atinge a superfície diretamente da luz. Interreflexões são a luz que atinge a superfície depois de saltar de alguma outra superfície algumas vezes. PRT pode modelar esse comportamento sem alterar o desempenho em tempo de execução, simplesmente executando o simulador com parâmetros diferentes.
A ilustração a seguir é criada usando apenas PRT direto (0 saltos sem interreflexões).
A ilustração a seguir é criada usando PRT com interreflexões (2 saltos com interreflexões).
PRT com dispersão subsuperficial
A dispersão subsuperficial é uma técnica que modela como a luz passa através de determinados materiais. Por exemplo, pressione uma lanterna acesa contra a palma da mão. A luz da lanterna passa pela sua mão, quica (mudando de cor no processo) e sai do outro lado da sua mão. Isso também pode ser modelado com alterações simples no simulador e sem alterações no tempo de execução.
A ilustração a seguir demonstra PRT com dispersão subsuperficial.
Como funciona o PRT
Os termos a seguir são úteis para entender como o PRT funciona, conforme ilustrado no diagrama a seguir.
Brilho da fonte: O brilho da fonte representa o ambiente de iluminação como um todo. Em PRT um ambiente arbitrário é aproximado usando a base harmônica esférica - esta iluminação é assumida como distante em relação ao objeto (a mesma suposição que é feita com mapas de ambiente).
Radiação de saída: Radiação de saída é a luz que sai de um ponto na superfície de qualquer fonte possível (brilho refletido, dispersão subsuperficial, emissão).
Vetores de transferência: Os vetores de transferência mapeiam o brilho da fonte para o brilho de saída e são pré-calculados off-line usando uma simulação complexa de transporte de luz.
A PRT considera o processo de renderização em duas etapas, como mostra o diagrama a seguir:
- Uma simulação de transporte leve cara pré-calcula coeficientes de transferência que podem ser usados em tempo de execução.
- Um estágio de tempo de execução relativamente leve primeiro se aproxima do ambiente de iluminação usando a base harmônica esférica, depois usa esses coeficientes de iluminação e os coeficientes de transferência pré-calculados (do estágio 1) com um sombreador simples, resultando em brilho de saída (a luz que sai do objeto).
Como usar a API PRT
Calcule os vetores de transferência com um... métodos de ID3DXPRTEngine.
Lidar diretamente com esses vetores de transferência requer uma quantidade significativa de memória e computação de sombreador. A compactação reduz significativamente a quantidade de memória e a computação de sombreador necessária.
Os valores finais de iluminação são calculados em um sombreador de vértice que implementa a seguinte equação de renderização compactada.
Em que:
Parâmetro Descrição Rp Um único canal de radiação de saída no vértice p e é avaliado em cada vértice na malha. Mk A média para o cluster k. Este é um vetor de coeficientes Order². k O ID do cluster para o vértice p. L' A aproximação do brilho da fonte nas funções de base SH. Este é um vetor de coeficientes Order². j Um inteiro que soma sobre o número de vetores PCA. wpj O peso do jth PCA para o ponto p. Trata-se de um coeficiente único. Bkj O vetor de base jth PCA para o cluster k. Este é um vetor de coeficientes Order². O extrato... métodos de ID3DXPRTCompBuffer fornecem acesso a dados compactados da simulação.
Calcule o brilho da fonte.
Há várias funções auxiliares na API para lidar com uma variedade de cenários de iluminação comuns.
Calcule o brilho de saída.
A equação 1 agora tem que ser avaliada em cada ponto usando um vértice ou sombreador de pixel. Antes que o sombreador possa ser avaliado, as constantes devem ser pré-calculadas e carregadas na tabela constante (consulte o de demonstração PRT de para obter detalhes). O sombreador em si é uma implementação direta desta equação.
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;
Referências
Para obter mais informações sobre PRT e harmônicos esféricos, consulte os seguintes documentos:
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
Tópicos relacionados