【從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設為TransparentBlending 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開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)