这个文章只想记录一些效果图,GIF图,不想多做技术讨论(理论太长了,实际应用又太短)
2022年,增加一些ASE(连连看)截图
目录
技术分别有:
屏幕深度系数(深度图)
法线
折射
焦散
水体明暗
反射
高光
点光源
水面互动
抗锯齿
相关参考公式
无图,或者会后补吧
公式也是
技术分别有:
屏幕深度系数(深度图)
深度系数= pow( saturate ( 屏幕深度/ 过渡深度), 过渡系数)
水体基础颜色= lerp( 浅水颜色, 深水颜色, 深度系数)
小技巧
float waterDepthDfference01 = saturate(depthDifference / _DepthMaxDistance);
重点是,一个数(深度图Depth值)再除以一个可以无限大的分量,作用是??
法线
水面高度
比波浪公式重要
Fft海洋+曲面细分+反射+高光+白浪
折射
焦散
水体明暗
(待补充)
反射
高光
点光源
轻舟,渔火
水面互动
参考大佬的:
水波纹的生成
扩散方程
目前游戏内生成的水波纹的基础也就是获取触发水波纹的具体坐标,是通过水波纹的扩散公式,用两张rendertexture分别作为compute shader的输入和输出来循环计算的。
流程图如下所示
抗锯齿
(待补充)
海水半透明
ASE连线:
1.左上,先动过2个图(一深蓝,一浅蓝)+ 透明度(alpha)做一个见百年(alpha计算没标出)
2.右下,通过Swizzle节点(ASE编辑器),颜色通道(4通道)转 A通道(单通道)
为得出海水透明度,其实直接用 alpha(下图没标出) 也可以,但通过Swizzle节点取出的透明度,其实是颜色+深度透明度的混合,则最终结果比较符合实际原理
Alpha公式:
alpha = worldPos - eyeDepthScreenPos;//或者需要反相
海岸边白泡沫
其实关键就2个东西,Add 增加范围, Multipy 成颜色,但变量太多,又是渲染的中间部分,很容易出错
但也是这2个关键中的关键,说明还是程序的老套路,
1.变量命必须命名好;名字起的好,心中不会乱
2.变量的作用范围;该做保护的做保护,杜绝溢出,但不要过分validate