使用深度缓冲使水边柔软

时间:2013-03-21 06:07:09

标签: 3d directx game-engine

我想制作软边水。所以我制作一个渲染目标来保持场景的深度,然后我渲染水几何。

让水alpha = ( SceneDepth - WaterDepth ) * Scale

看下面图表的结果,水的边缘被软化了,但它看起来很奇怪,就像一个梯子。

那么如何应对?

非常感谢!

water alpha

1 个答案:

答案 0 :(得分:1)

我最近一直在研究类似的问题。

我使用透明度软化水的边缘。

为了利用水的深度来确定alpha值,我使用HLSL smoothstepclamp函数返回0.75f和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);