Ja sam uradio na sledeci nacin ( ovo je samo deo shadera):
Code:
// Shader.fx
float3 lightPos[3]; // za 3 svetla
// u vertex shaderu proracunavam poziciju vertexa u world koordinatama (posW) i prosledjujem ga pixel shaderu
float4 PixelShader( float3 posW : TEXCOORD0 ) // ovde idu i normala u world koordinatama, texCoords....
{
float3 lightVec0 = normalize( lightPos[0] - posW);
float3 lightVec1 = normalize( lightPos[1] - posW);
float3 lightVec2 = normalize( lightPos[2] - posW);
// dalje sledi racunanje diffuse, specular
}
// Shader.fx
float3 lightPos[3]; // za 3 svetla
// u vertex shaderu proracunavam poziciju vertexa u world koordinatama (posW) i prosledjujem ga pixel shaderu
float4 PixelShader( float3 posW : TEXCOORD0 ) // ovde idu i normala u world koordinatama, texCoords....
{
float3 lightVec0 = normalize( lightPos[0] - posW);
float3 lightVec1 = normalize( lightPos[1] - posW);
float3 lightVec2 = normalize( lightPos[2] - posW);
// dalje sledi racunanje diffuse, specular
}
Posto zelim Per-Pixel shading ( nacin za per-vertex mi je poznat ) da li je ovo preskup shader za multilight ( napominjem da mi je cilj da ovaj shader bude per-object i da me trenutno zanima samo ova tehnika - pored multipass i deferred koji su izvan ove diskusije ) i da li je moguce uraditi neke optimizacije kao sto je prebacianje nekog dela proracuna na vertex shader ili mozda postoji neki drugi 'trik'?
EOF