别再死磕光线追踪了!用Unity Shader Graph 5分钟搞定皮肤/玉石SSS次表面散射效果
用Shader Graph零代码实现次表面散射5分钟打造皮肤与玉石质感次表面散射Subsurface Scattering简称SSS是光线穿透半透明材质后发生散射的物理现象它让皮肤呈现血色、玉石展现温润感、蜡烛散发柔和光晕。传统实现需要复杂的光线追踪或繁琐的数学公式而本文将展示如何完全通过可视化节点在Unity中快速搭建SSS效果。1. 核心原理与Shader Graph设计思路次表面散射的本质是光线在材质内部的旅行过程。当光线射入皮肤或玉石时部分光子会在材质内部多次反弹后从不同位置射出形成特有的光晕效果。专业渲染器通过蒙特卡洛模拟计算光子路径而实时渲染则需要简化模型。Shader Graph实现三大简化策略背光增强模拟光线穿透薄区域如耳廓的透光现象颜色偏移短波光蓝紫易被吸收长波光红黄散射更远边缘柔化明暗交界处添加渐变过渡避免生硬分界提示移动端推荐使用厚度图方案PC端可尝试屏幕空间模糊以获得更精确效果2. 厚度图方案实战配置2.1 准备厚度贴图厚度图存储模型各部位的相对厚度信息白色表示厚区域黑色对应薄区域。制作方法Blender烘焙# 在Blender的Shader Editor中连接节点 [Geometry Node] → [Pointiness] → [ColorRamp] → [Image Texture Bake]Substance Painter输出使用Thickness生成器导出时选择R8单通道格式2.2 Shader Graph节点搭建关键节点连接流程节点类型参数设置功能说明Dot ProductA: ViewDir, B: -LightDir计算基础背光强度PowerExponent: 3-5控制光晕衰减曲线Sample Texture 2DUV: 模型UV, Texture: 厚度图读取局部厚度数据MultiplyA: 背光强度, B: 厚度值合成最终散射强度// 等效代码逻辑仅示意实际用节点实现 float sss pow(saturate(dot(viewDir, -lightDir)), 4.0) * thickness;2.3 参数调试技巧颜色控制在Multiply后添加Color节点设置为粉红色皮肤或青白色玉石边缘锐度调整Power节点的指数值越大则光晕范围越小性能优化关闭厚度图的mipmap生成改用Bilinear过滤3. 预积分LUT方案进阶实现3.1 创建查找纹理预积分LUTLookup Texture将复杂计算提前烘焙到2D纹理中纹理坐标物理含义数值范围U轴N·L点积[-1, 1] → [0, 1]V轴表面曲率低曲率→0高曲率→1LUT制作步骤在PS中创建512x512纹理横向渐变左蓝右红纵向叠加顶部增加绿色通道3.2 动态曲率计算实时曲率通过法线变化率估算[Normal Vector] → [DDX] → [DDY] → [Length] → [Saturate]注意移动端可改用预烘焙的曲率贴图替代实时计算3.3 节点网络优化纹理采样LUT设置为Clamp寻址模式Filter Mode设为Bilinear混合策略用Lerp节点混合传统漫反射和SSS效果性能对比厚度图方案1次纹理采样 2次数学运算LUT方案2次纹理采样 3次数学运算4. 跨平台效果调优策略4.1 移动端适配方案Android/iOS最佳实践使用Half精度Shader Graph的Precision设置为Half合并厚度图与曲率图到RGBA两个通道禁用实时阴影接收用烘焙阴影替代参数推荐值- 背光强度0.3-0.5 - 散射范围0.2-0.4 - 颜色饱和度皮肤(1.2,0.8,0.8)玉石(0.9,1.1,1.3)4.2 PC端增强技巧添加屏幕空间模糊后处理需配合Stencil缓冲结合深度图实现动态厚度计算使用双面渲染Cull Off提升边缘透光感4.3 性能监测指标通过Frame Debugger观察Overdraw控制在1.5以下Shader复杂度ALUs不超过50带宽占用纹理采样不超过4次5. 材质实例皮肤与玉石对比实现5.1 人类皮肤特征还原三层结构模拟表皮层高光反射较强Specular 0.3-0.5真皮层主导次表面散射RGB(255,220,200)皮下组织影响厚度分布脸颊薄、鼻梁厚特殊处理耳廓区域单独标记厚度添加汗毛高光Anisotropic节点结合Micro Normal贴图增强细节5.2 玉石材质特性表现关键参数- 折射率(IOR): 1.6-1.7 - 散射系数: RGB(0.8,1.2,1.5) - 密度衰减: 指数曲线控制效果增强添加边缘色散Chromatic Aberration结合环境贴图反射使用顶点动画模拟内部纹理流动在最近的角色项目中将厚度图方案应用到手游角色皮肤在骁龙865设备上保持60fps的同时获得了接近主机级的透光效果。调试中发现将背光计算的Power值从4降到3能在中低端设备上获得更好的性能与视觉平衡。