[ glorius @ 24.02.2010. 14:07 ] @
Zanima me da li je moguce uraditi osvetljenje u single-pass za vise svetala na nacin koji nece toliko opterecivati pixel shader.

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
}



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'?
[ tosa @ 24.02.2010. 14:42 ] @
Nije to skup shader, ima malo vise racunanja ali to je (prakticno) nebitno jer moderniji GPU-ovi su i onako pravljeni da mogu da proracunaju dosta al' im je problem da imaju dosta texture samplova. Generalno ja se ne bih mnogo opterecivao performansama shader-a koji ces svakako promeniti u buducnosti, ima tu jos dosta posla.