2013-03-21 8 views
7

Ich möchte weichkantiges Wasser machen. Also mache ich ein Renderziel, um die Tiefe der Szene zu halten, und dann rendere ich Wassergeometrie.Mit Tiefenpuffer Wasserrand weich machen

Und lassen Wasser alpha = (SceneDepth - WaterDepth) * Scale

bei den Ergebnissen der folgenden Tabelle suchen, wird der Rand des Wassers softed, aber es seltsam erscheinen, wie eine Leiter.

also wie man damit umgehen?

Vielen Dank!

water alpha

+0

Welche es ist, OpenGL oder Direct3D ? –

+0

Ich benutze Direct3D. – xfxsworld

+2

Es könnte ein Mangel an Auflösung im Z-Puffer sein. Haben Sie versucht, das nahe Flugzeug etwas mehr hinauszuschieben? – JasonD

Antwort

1

Ich habe vor kurzem auf einem ähnlichen Problem gearbeitet.

Ich benutze Transparenz, um die Ränder des Wassers zu erweichen.

Um die Wassertiefe zu verwenden, um den Alpha-Wert zu bestimmen, verwende ich die HLSL smoothstep und clamp Funktionen einen Trübungswert zwischen 0.75f ​​und 1.0f zurück:

// 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

Großartig, danke !! – mouse