【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"
        ENDHLSL
        Pass {
            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开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,🙏)

posted @ 2025-11-28 09:24  SmalBox  阅读(3)  评论(0)    收藏  举报