2013-03-21 10 views
7

Voglio fare acqua con bordi morbidi. quindi faccio un obiettivo di rendering per mantenere la profondità della scena, e quindi rendo la geometria dell'acqua.Utilizzo del buffer di profondità per rendere morbido il bordo dell'acqua

E lasciare che l'acqua alpha = (SceneDepth - WaterDepth) * Scale

guardando i risultati della seguente tabella, sul bordo dell'acqua è softed, ma sembra strano, come una scala.

quindi come comportarsi?

Grazie mille!

water alpha

+0

Che è, OpenGL o Direct3D ? –

+0

io uso Direct3D. – xfxsworld

+2

Potrebbe essere una mancanza di risoluzione nel buffer z. Hai provato a spingere un po 'di più il vicino aereo? – JasonD

risposta

1

ho lavorato su un problema simile di recente.

Uso la trasparenza per ammorbidire i bordi dell'acqua.

Al fine di utilizzare la profondità dell'acqua per determinare il valore alfa, Uso il HLSL smoothstep e clamp funzioni per restituire un valore di opacità tra 0.75f ​​e 1.0f:

// colour can be whatever your lighting equations compute 
float3 colour = (r, g, b); 

if (SeaDepth <= 0.2f) 
    discard; 

float opacity = clamp( 
    smoothstep(0.f, 12.f, SeaDepth ), 
    .75f, 1.f 
); 

return float4(colour.xyz, opacity); 
+0

Ottimo, grazie !! – mouse