【URP】Unity[内置Shader]复杂光照ComplexLit
【从UnityURP开始探索游戏渲染】专栏-直达
ComplexLit是Unity URP(Universal Render Pipeline)中的一种内置Shader,主要用于处理复杂材质的光照效果,支持多光源交互、高光反射、法线贴图等高级渲染特性。以下是其详细解析:
作用与原理
- 核心功能:通过PBR(基于物理的渲染)模型实现金属/非金属材质的真实光照,支持直接光、间接光和环境光遮蔽计算。
- 技术实现:采用BRDF(Bidirectional Reflectance Distribution Function)计算表面反射,结合法线贴图增强细节表现。
- 性能优化:相比Built-in管线的Standard Shader,URP的ComplexLit通过简化光照模型和剔除冗余计算提升移动端性能。
发展历史
- 起源自Unity 2019的SRP(Scriptable Render Pipeline)重构,替代传统Built-in管线的Standard Shader。
- 2020年随URP正式发布,成为跨平台开发的标准PBR解决方。
- 2022年后持续优化多光源管理和移动端适配。
具体使用示例
Shader "URP/ComplexLitExample" {Properties {_BaseMap("Albedo", 2D) = "white" {}_Metallic("Metallic", Range(0,1)) = 0.5_Smoothness("Smoothness", Range(0,1)) = 0.5}SubShader {Tags { "RenderPipeline"="UniversalPipeline" }HLSLINCLUDE#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"ENDHLSLPass {HLSLPROGRAM#pragma vertex LitPassVertex#pragma fragment LitPassFragment// 此处添加ComplexLit核心光照计算代码ENDHLSL}}
}
Complex Lit 对比 Lit
两种基于物理渲染(PBR)的着色模型,主要区别体现在功能复杂度、硬件要求及适用场景上
功能特性对比
- 高级材质支持
- Complex Lit在Lit基础上增加了更复杂的材质特性(如视差映射、各向异性高光等),部分特性需要Shader Model 4.5支持且计算开销较大。而Lit仅包含基础PBR功能(金属/高光工作流、法线贴图等),适用于大多数常规材质。
- 渲染路径兼容性
- Complex Lit在延迟渲染路径中会被强制转为前向渲染,若硬件不支持其特性则会自动降级为Lit。而Lit在所有URP支持的硬件上均可稳定运行。
- 透明效果处理
- 两者均支持透明表面类型(Alpha混合、预乘等)和Alpha裁剪,但Complex Lit提供了更精细的混合模式控制,适合复杂透明材质(如多层玻璃)。Lit的透明处理更轻量,适合简单半透物体。
性能与适用场景
- Complex Lit
- 适用于需要高级材质表现的高端设备,例如写实风格的角色皮肤、复杂金属表面等。其特性可能导致性能下降,尤其在移动端需谨慎使用。
- Lit
- 作为URP默认PBR着色器,兼顾效果与性能,适合大部分场景(如环境物体、常规角色材质)。支持SRP批处理优化,适合大规模场景。
工作流差异
- 两者均支持金属/高光工作流切换,但Complex Lit的检查器面板包含更多细分选项(如高级表面参数),Lit则保持简洁的标准化配置
Shader Graph应用
- 创建流程:
- 新建Shader Graph选择"URP > Complex Lit"
- 连接Albedo、Normal、Metallic等输入节点
- 示例配置:
- 主纹理采样节点 → Base Color输入
- 法线贴图节点 → Normal输入
- 滑块节点 → Metallic/Smoothness输入
Complex Lit 支持的高级材质效果
次表面散射(SSS)
用于皮肤、蜡质等半透明材质的光线渗透效果:
- 创建材质并选择
Universal Render Pipeline > Complex Lit
- 在
Surface Inputs
中启用Subsurface Scattering
选项 - 使用
Thickness Map
控制光线穿透深度(灰度图,白色表示更薄区域) - 调整
Scattering Radius
参数(建议值0.1-0.5) - 通过
Subsurface Color
设置散射光色调(如皮肤用橙红色)
各向异性高光
模拟金属拉丝、头发等方向性反光:
- 在
Surface Inputs
启用Anisotropy
开关 - 指定
Anisotropy Map
(黑白纹理控制强度分布) - 调整
Anisotropy Rotation
参数(0-1对应0-360度旋转) - 配合
Specular Workflow Mode
获得更精确控制
清漆涂层效果
实现表面透明涂层的双层材质:
- 启用
Coat Mask
选项(使用黑白贴图,白色区域显示涂层) - 设置
Coat Smoothness
(0.7-1.0模拟光滑涂层) - 调整
Coat Specular
强度(0.25-0.5保持物理合理性) - 基础材质使用金属工作流增强对比度
高级透明混合
保留透明区域的高光细节:
Surface Type
设为Transparent
Blending Mode
选择Premultiply
- 确保纹理包含预乘Alpha通道(PS中启用"预乘Alpha"导出)
- 使用
Alpha Clip Threshold
实现硬边透明(如树叶边缘)
镜面反射分离
独立控制金属/非金属高光:
Workflow Mode
选择Specular
- 分别设置
Specular Color
(非金属高光)和Metallic
参数 - 使用
Specular Map
精细控制反射强度分布 - 配合
Ambient Occlusion
贴图增强立体感
注意事项
- 需要Unity 2021.3+版本和Shader Model 4.5支持
- 在移动端需测试性能,建议烘焙SSS和清漆效果
- 透明材质在延迟渲染路径下会自动转为前向渲染
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)