这个文章只想记录一些效果图,GIF图,不想多做技术讨论(理论太长了,实际应用又太短)

2022年,增加一些ASE(连连看)截图

目录

技术分别有:

屏幕深度系数(深度图)

法线

折射

焦散

水体明暗

反射

高光

点光源

水面互动

抗锯齿

相关参考公式


无图,或者会后补吧

公式也是

技术分别有:

屏幕深度系数(深度图)

深度系数= pow( saturate ( 屏幕深度/ 过渡深度), 过渡系数)

水体基础颜色= lerp( 浅水颜色, 深水颜色, 深度系数)

UNITY 3D 海底管线 unity海水效果_UNITY 3D 海底管线

小技巧

float waterDepthDfference01 = saturate(depthDifference / _DepthMaxDistance);

重点是,一个数(深度图Depth值)再除以一个可以无限大的分量,作用是??

法线

水面高度

比波浪公式重要

Fft海洋+曲面细分+反射+高光+白浪

UNITY 3D 海底管线 unity海水效果_深度图_02

UNITY 3D 海底管线 unity海水效果_海水_03

折射

UNITY 3D 海底管线 unity海水效果_Unity渲染_04

焦散

UNITY 3D 海底管线 unity海水效果_深度图_05

水体明暗

(待补充)

反射

UNITY 3D 海底管线 unity海水效果_深度图_06

高光

UNITY 3D 海底管线 unity海水效果_海水_07

点光源

轻舟,渔火

水面互动

参考大佬的:

水波纹的生成

扩散方程

目前游戏内生成的水波纹的基础也就是获取触发水波纹的具体坐标,是通过水波纹的扩散公式,用两张rendertexture分别作为compute shader的输入和输出来循环计算的。

流程图如下所示

UNITY 3D 海底管线 unity海水效果_UNITY 3D 海底管线_08

抗锯齿

(待补充)

海水半透明

UNITY 3D 海底管线 unity海水效果_海水_09

ASE连线:

1.左上,先动过2个图(一深蓝,一浅蓝)+ 透明度(alpha)做一个见百年(alpha计算没标出)

2.右下,通过Swizzle节点(ASE编辑器),颜色通道(4通道)转 A通道(单通道)

为得出海水透明度,其实直接用 alpha(下图没标出) 也可以,但通过Swizzle节点取出的透明度,其实是颜色+深度透明度的混合,则最终结果比较符合实际原理

Alpha公式:

alpha  = worldPos - eyeDepthScreenPos;//或者需要反相

UNITY 3D 海底管线 unity海水效果_Unity渲染_10

海岸边白泡沫

UNITY 3D 海底管线 unity海水效果_深度图_11

 

UNITY 3D 海底管线 unity海水效果_海水_12

其实关键就2个东西,Add 增加范围, Multipy 成颜色,但变量太多,又是渲染的中间部分,很容易出错

但也是这2个关键中的关键,说明还是程序的老套路,

1.变量命必须命名好;名字起的好,心中不会乱

2.变量的作用范围;该做保护的做保护,杜绝溢出,但不要过分validate