博客 / 詳情

返回

【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開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.