2013-03-21 35 views
7

Tôi muốn tạo ra nước mềm. vì vậy tôi làm cho một mục tiêu render để giữ độ sâu của cảnh, và sau đó tôi vẽ hình học nước.Sử dụng bộ đệm độ sâu để làm cho mép nước mềm mại

Và để nước alpha = (SceneDepth - WaterDepth) * Scale

nhìn vào kết quả của bảng xếp hạng sau, mép nước softed, nhưng nó có vẻ kỳ lạ, giống như một chiếc thang.

cách xử lý?

Cảm ơn rất nhiều!

water alpha

+0

Đó là nó, OpenGL hoặc Direct3D ? –

+0

tôi sử dụng Direct3D. – xfxsworld

+2

Có thể thiếu độ phân giải trong bộ đệm z. Bạn đã thử đẩy máy bay gần hơn một chút chưa? – JasonD

Trả lời

1

Gần đây tôi đã làm việc trên một vấn đề tương tự.

Tôi sử dụng độ trong suốt để làm mềm các cạnh của nước.

Để sử dụng độ sâu của nước để xác định giá trị alpha, tôi sử dụng HLSL smoothstepclamp chức năng để trả lại một giá trị opacity giữa 0.75f ​​và 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

Tuyệt vời, cảm ơn !! – mouse