网站301了不知道在哪做的,成都网站设计制作公司,无锡网络公司设计,企业申报网站1 前言 水波特效 中通过屏幕后处理实现了环形水波效果#xff0c;本文通过 Shader Graph 实现了模拟水面特效#xff0c;包含以下特效细节。
深水区和浅水区颜色差异#xff1b;水面有波纹#xff0c;并且在移动#xff1b;水面起伏波动#xff1b;水面边缘有水泡#…1 前言 水波特效 中通过屏幕后处理实现了环形水波效果本文通过 Shader Graph 实现了模拟水面特效包含以下特效细节。
深水区和浅水区颜色差异水面有波纹并且在移动水面起伏波动水面边缘有水泡水中物体因折射而扭动。 本文完整资源详见→Unity3D水面特效。 2 水面特效实现 由于本文需要使用 Scene Color 节点的颜色缓冲区信息模拟水面折射现象而 Scene Color 节点只能在 URP 或 HDRP 管线下才能正常工作详见→Shader Graph节点因此本文选择在 URP 管线下实现模拟水面特效。
2.1 场景搭建及环境配置 1场景搭建 在 URP 项目中搭建场景如下。 说明水面模型是一个长方形并且网格不能太稀疏否则对顶点的上下波动将不太自然。 2配置 Universal Render Pipeline Asset 由于实验中使用了 Scene Depth 和 Scene Color 节点获取深度缓冲区和颜色缓冲区信息需要在 Universal Render Pipeline Asset 中勾选 Depth Texture 和 Opaque Texture如下。 3主图配置 由于水面是透明的需要在主图的 Graph Settings 中将 Surface Type 属性设置 Transparent并且取消勾选 Cast Shadows投射阴影和 Receive Shadows接受阴影如下。 2.2 水面 Shader Graph 1主图 Water.shadergraph WaterDepth、FinalWaterColor、WaterNormal、WaterPosition 都是自定义节点释义如下Smoothness 用于调整水面光滑度。
WaterDepth 节点水面到水底的深度计算FinalWaterColor 节点水面最终的颜色混合深浅水颜色、泡沫颜色、背景折射颜色WaterNormal 节点水面法线WaterPosition 节点水面坐标。 2WaterDepth 子图 WaterDepth.shadersubgraph 说明WaterDepth 子图用于计算水面深度Scene Depth 节点用于获取不透明物体的深度值水底深度Screen Position 节点输出的 w 分量是水面的深度两者相减就是水面到水底的深度值。SubtractDepth、DepthStrength 释义如下。
SubtractDepth深度减去的参数其值越大浅水区越大DepthStrength深度加强的参数其值越大浅水区越小。 如果将 Water Depth 子图的输出直接连到主图片元着色器的 Base Color 上显示效果如下。从图中可以看到Water Depth 节点能够较好得识别物体的边缘。 3FinalWaterColor 子图 FinalWaterColor.shadersubgraph 说明FinalWarterColor 子图用于计算水面最终的颜色混合深浅水颜色、泡沫颜色、背景折射颜色WaterColor 节点用于计算水面颜色混合深浅水颜色、泡沫颜色WaterRefraction 节点用于计算背景折射颜色。 4WaterColor 子图 WaterColor.shadersubgraph 说明WaterColor 子图用于计算水面颜色混合深浅水颜色、泡沫颜色BubbleColor 节点用于计算泡沫颜色ShallowColor、DeepColor、WaterDepth 的释义如下。
ShallowColor浅水区的颜色DeepColor深水区的颜色WaterDepth水面到水底的深度用于混合深水区和浅水区的颜色。 5BubbleColor 子图 BubbleColor.shadersubgraph 说明BubbleColor 子图用于计算泡沫颜色BubbleSpeed、BubbleDensity、BubbleFilter1、BubbleFilter2、BubbleBrightness、WaterDepth 的释义如下。
BubbleSpeed水泡移动的速度BubbleDensity水泡的密度其值越大水泡越小且越密集BubbleFilter1水泡过滤参数其值越大水泡越稀疏BubbleFilter2水泡过滤参数其值越大水泡越稀疏BubbleBrightness水泡亮度WaterDepth水面到水底的深度用于过滤气泡只有浅水区才有气泡。 6WaterNormal 子图 WaterNormal.shadersubgraph 说明WaterNormal 子图用于计算水面法线NormalStrength、WaterDepth 的释义如下。
NormalStrength法线最大强度WaterDepth水面到水底的深度用于调整法线强度深水区波纹较深浅水区波纹较浅。 7WaterPosition 子图 WaterPosition.shadersubgraph 说明WaterPosition 子图用于模拟水面起伏效果通过调整顶点坐标的 y 分量实现WaveHeight 用于调整水面起伏的最大高度。由于 WaterPosition 子图的输出连在顶点着色器上而 WaterDepth 是在片元着色器中计算的因此不能使用 WaterDepth 对 WaveHeight 进行混合即深水区水面起伏大浅水区水面起伏小。 8WaterRefraction 子图 WaterRefraction.shadersubgraph 说明WaterRefraction 子图用于计算背景折射颜色RefractionStrength 用于调整折射偏移强度Screen Position 节点用于获取屏幕顶点的 uv 坐标Scene Color 节点用于获取颜色缓冲区纹理仅在 URP 或 HDRP 管线下才能正常工作详见→Shader Graph节点。
2.3 运行效果