中級Shader教程16 水渲染

2021-08-19 11:00:55 字數 1656 閱讀 3001

layout: post

title: 「中級shader教程16 水渲染」

date: 2018-04-23 16:09:03

author: jiepeng tan

categories:

1.noise和fbm請參考這篇文章中給出的鏈結

2.ranymarching 框架

1.基本形狀構造

這裡利用了noise本身隨機的同時也連續的特性來模擬水面的變動

1.使用fbm來實現水面的基本形狀

2.水的動態是通過在noise中使用time作為乙個維度,來實現水的擾動

2.著色

1.水渲染需要考慮的有diffuse,specular,reflect,refract,fresnel這幾種不同的效應

1.波浪

1.使用fbm 來模擬水的波動 (利用的是其隨機性和連續性)

2.在noise中使用time作為其中的一維度來模擬水的動態

float

watermap

( fixed3 pos )

float3 waternormal

(float3 pos,

float rz)

1.折射反射效果模擬

1.反射

1.反射是根據入射rd以及法線nor,計算反射rdrfl

2.通過反射rdrfl和入射點p 重新發射一條新的ray 進行raymarching

2.折射

1.在進行raymarching 的過程中先忽略水面的檢測這樣可以直接獲得碰撞點p

2.計算p到水面的距離 來融合水的顏色和背景色,模擬折射效果

這裡使用了取巧的方式只是改變了p的法線來模擬水面的擾動,正確的應該根據水面法線重新raymarching,

float4 processraymarch

(float2 uv,float3 ro,float3 rd,inout float scenedep,float4 scenecol)

float sundot =

clamp

(dot

(rd,_lightdir)

,0.0

,1.0);

float rz =

raycastterrain

(ro,rd)

;float firstinsertrz =

min(rz,watert)

;float fresnel =0;

float3 refractcol =

float3(0.

,0.,0.

);bool reflected = false;

// hit the water

if(rz >= watert && rd.y <

-0.01

)//渲染背景

if(rz >= maxt)

else

// 融合折射和反射效果

if( reflected == true )

mergeunityintoraymarching

(firstinsertrz,col,scenedep,scenecol)

; scenecol.xyz = col;

return scenecol;

}

中級Shader教程19 動態霧

layout post title 中級shader教程19 動態霧 date 2018 04 23 16 09 03 author jiepeng tan categories 1.noise和fbm請參考這篇文章中給出的鏈結 2.ranymarching 框架 1.利用fbm來模擬空間霧的密度分...

中級Shader教程05 2D雪花

layout post title 中級shader教程05 2d雪花 date 2018 03 27 16 09 03 author jiepeng tan categories 本篇主要技術點有 grid 空間劃分 2d模擬3d中 分層 的概念 透視模擬 在前面中介紹了2d模擬3d中的一些小技巧...

中級Shader教程06 2D火焰粒子

layout post title 中級shader教程06 2d火焰粒子 date 2018 03 27 16 09 03 author jiepeng tan categories grid 空間劃分 2d模擬3d中 分層 的概念 透視模擬 基於grid的隨機變化 旋轉,位移,閃爍 sin 週期...