Vertex program:
1.計算 projected(目的是為了無限大:參考了Habib's Water Shader及Ceto Ocean System
2.計算 projected position
3.計算 Perlin noise on GPU(目的是為了加速計算大量的點位移-高度)
4.計算 Vertex Normal (之後會拿來當normal map的world space)
5.Animated UV(normal and foam map)
Fragment(Pixel)Program:
1.計算深度(高度及透視深度的混合,參考Ceto Ocean System,有點類似霧氣擴散的效果)
2.將Normal map轉換成World Space
3.計算diffuse
4.計算specular
5.計算distortion(refraction或reflection參數分開)
6.計算泡沫效果,並將其與refraction混合(只有岸邊淺水的地方才有邊緣泡沫)
7.計算水顏色,淺水、深水與refractoin依照深度及折射率進行混色,之後再依照反射率跟reflection進行混色,完成了所謂的SeaColor。
8.簡單模擬Fersnel Terms(依照一張Fersnel map,混合沒有考慮Diffuse及有考慮Diffuse的狀況,進行混色):
fixed3 SpecAndDiffuse = SeaColor * Diffuse + Specular;
fixed3 SpecNoDiffuse = SeaColor + Specular;
fixed4 OutColor = fixed4(lerp(SpecAndDiffuse, SpecNoDiffuse, FresnelRatio), 1.0);
9.再加上海浪模擬(依照Normal與Up軸的dot值,決定海浪貼圖顯示的強弱)
10.最後再加上fog的顏色,便大功告成
成果如下:
Dream continues in...
沒有留言:
張貼留言