Unity ShaderGraph实战:用一张法线贴图,5分钟搞定你的第一个动态水面(附完整节点图)

Unity ShaderGraph实战:用一张法线贴图,5分钟搞定你的第一个动态水面(附完整节点图) Unity ShaderGraph极简实战单张法线贴图打造动态水面效果水面效果是游戏开发中常见的视觉元素但很多初学者面对复杂的Shader节点网络时往往望而却步。今天我要分享的是一个极简实现方案——仅用一张法线贴图配合最基础的节点组合就能创建出令人满意的动态水面效果。这种方法特别适合资源有限或刚接触ShaderGraph的开发者。1. 准备工作与环境配置在开始之前确保你的Unity项目已经准备好以下基础条件Unity 2019.4或更高版本支持ShaderGraph安装Universal RP或HDRP渲染管线一张法线贴图任何水波纹样式的法线贴图均可提示如果没有现成的法线贴图可以在Unity Asset Store搜索Water Normal Map找到免费资源或者使用在线工具生成简单的波纹图案。创建ShaderGraph的步骤非常简单在Project窗口右键点击选择Create → Shader → PBR Graph双击新建的Shader文件打开编辑界面2. 核心节点布局与连接2.1 基础法线贴图采样我们将从最基础的法线贴图采样开始// 创建Texture 2D Asset节点并设置为公开属性 // 命名为WaterNormalMap类型设置为Normal // 连接Sample Texture 2D节点的RGB输出到Master节点的Normal这样就能得到一个静态的水面法线效果。但我们需要让它动起来关键技巧在于动态UV偏移。2.2 实现动态UV偏移动态效果的核心是让法线贴图随时间移动。这里我们使用极简的两节点组合// 创建Time节点 // 创建Vector2节点(例如X0.1, Y0.05) // 使用Multiply节点将两者相乘 // 将结果连接到Tiling And Offset节点的Offset输入 // 最后将Tiling And Offset的输出连接到Sample Texture 2D的UV参数调节技巧Vector2的X/Y值决定水流方向0.1,0.05表示斜向流动可以公开Vector2为属性方便在材质面板实时调整2.3 增强视觉效果的单贴图复用技巧专业水面Shader通常使用多张贴图混合但我们可以用一张贴图通过以下技巧增强效果二次采样技巧复制整套采样节点为第二套采样设置不同的UV缩放和移动速度使用Normal Blend节点混合两个法线结果// 第一套采样Tiling0.1, Speed0.3 // 第二套采样Tiling0.2, Speed-0.2 // 使用Normal Blend节点混合两者法线强度控制在Normal Blend前添加Normal Strength节点公开Strength参数方便调节波纹强度3. 视觉增强与参数优化3.1 基础颜色设置虽然法线贴图已经能产生不错的效果但添加基础颜色可以进一步提升真实感// 创建Color节点作为基础色 // 创建Fresnel Effect节点模拟边缘高光 // 使用Lerp混合基础色和边缘色推荐参数基础色RGBA(0, 120, 200, 255)边缘色RGBA(255, 255, 255, 255)Fresnel强度3.03.2 表面光泽控制水面需要适当的光泽反射// 创建Vector1节点控制Smoothness // 直接连接到Master节点的Smoothness调节建议平静水面Smoothness0.8波浪水面Smoothness0.5暴风水面Smoothness0.33.3 参数联动技巧为了让效果更自然可以建立参数之间的关联参数关联参数推荐比例SpeedStrength1:2TilingSmoothness1:0.5注意这些比例只是起点建议实际效果取决于具体法线贴图和场景光照4. 实战应用与性能优化4.1 场景适配技巧将Shader应用到实际场景时有几个实用技巧网格选择对大面积水面使用细分较多的平面小水池可以使用简单四边形摄像机角度低角度拍摄能更好展现法线细节俯视角度需要更强的波纹强度光照配合添加平行光模拟太阳反射使用反射探针增强环境反射4.2 性能优化建议虽然这个Shader已经很精简但在移动平台仍需注意控制法线贴图分辨率512x512通常足够减少实时参数调节频率在远处水面使用简化的Shader变体// 移动平台优化版可以移除Fresnel效果 // 或降低Normal Blend的复杂度4.3 效果扩展思路当掌握基础实现后可以考虑添加顶点偏移使用相同法线贴图驱动顶点动画泡沫效果基于法线强度添加边缘泡沫焦散效果通过投影技术模拟水下光斑我在一个移动端项目中实际应用这个技术时发现保持节点简洁不仅易于维护在性能敏感场景下也能保持稳定60fps。特别是在需要大量水面实例的场景中这种极简方案的优势更加明显。