【從UnityURP開始探索遊戲渲染】專欄-直達
作用與原理
ParticlesSimpleLit是Unity URP(Universal Render Pipeline)中專門為粒子系統設計的簡化光照着色器,主要用於實現高性能的粒子渲染效果。其核心原理是通過簡化光照計算模型,犧牲部分物理準確性來換取更高的渲染效率,特別適合移動端或低端設備使用。
該着色器不計算物理正確性和能量守恆,而是採用一個簡單的近似照明模型,這使得它在渲染時可以忽略複雜的物理計算。ParticlesSimpleLit主要包含三個關鍵部分:
- Surface Options:控制材質的基本渲染方式,如顏色和光照模式
- Surface Inputs:描述表面特性,如濕度、粗糙度等
- Advanced選項:提供更底層的渲染設置如陰影和反射
發展歷史
ParticlesSimpleLit隨着URP的發展經歷了多個版本迭代:
- 最初作為URP核心着色器之一引入,替代了傳統Built-in渲染管線中的簡單粒子着色器
- 在URP 7.x版本中進行了性能優化,特別針對移動平台
- URP 12.0版本後增加了對Shader Graph的支持
- 最新版本(如URP 16.0.6)進一步優化了變體管理和GPU實例化支持
具體使用方法
基本應用示例
在Unity中使用ParticlesSimpleLit的步驟如下:
- 創建或選擇粒子系統
- 在粒子系統的Renderer模塊中指定材質
- 創建新材質或選擇現有材質
- 在材質Inspector窗口的Shader下拉菜單中選擇"Universal Render Pipeline > Particles > Simple Lit"
代碼説明:這個C#腳本示例展示瞭如何通過代碼動態為粒子系統應用ParticlesSimpleLit着色器。
-
ParticleSimpleLitExample.cs
// 在代碼中動態設置材質Shader的示例 using UnityEngine; public class ParticleShaderSetter : MonoBehaviour { public ParticleSystem particleSystem; void Start() { var renderer = particleSystem.GetComponent<ParticleSystemRenderer>(); Material mat = new Material(Shader.Find("Universal Render Pipeline/Particles/Simple Lit")); renderer.material = mat; } } // 以下是Shader Graph的節點設置參考: /* 1. 添加Texture2D節點作為Base Map輸入 2. 添加Color節點作為Base Color輸入 3. 添加Slider節點控制Specular(0-1範圍) 4. 添加Slider節點控制Smoothness(0-1範圍) 5. 連接這些節點到PBR Master的對應輸入 6. 在PBR Master節點中禁用高級光照計算 */
參數配置
ParticlesSimpleLit提供了多個可調參數:
- Base Map:基礎紋理,定義粒子外觀
- Base Color:基礎顏色,與紋理相乘
- Specular:控制高光強度
- Smoothness:控制表面光滑度
- Emission:控制自發光強度和顏色
Shader Graph中的應用
在Shader Graph中使用ParticlesSimpleLit需要以下步驟:
- 創建新的Shader Graph
- 在Graph Inspector中將"Target"設置為"Universal Render Pipeline"
- 使用"PBR Master"節點並調整設置以匹配SimpleLit特性
- 添加必要的紋理和參數輸入
代碼説明:這個偽代碼描述了在Shader Graph中重建ParticlesSimpleLit基本功能所需的節點配置。
-
ParticleSimpleLitExample.cs
// 在代碼中動態設置材質Shader的示例 using UnityEngine; public class ParticleShaderSetter : MonoBehaviour { public ParticleSystem particleSystem; void Start() { var renderer = particleSystem.GetComponent<ParticleSystemRenderer>(); Material mat = new Material(Shader.Find("Universal Render Pipeline/Particles/Simple Lit")); renderer.material = mat; } } // 以下是Shader Graph的節點設置參考: /* 1. 添加Texture2D節點作為Base Map輸入 2. 添加Color節點作為Base Color輸入 3. 添加Slider節點控制Specular(0-1範圍) 4. 添加Slider節點控制Smoothness(0-1範圍) 5. 連接這些節點到PBR Master的對應輸入 6. 在PBR Master節點中禁用高級光照計算 */
高級應用示例
結合粒子系統的其他模塊,如Lights模塊和Trails模塊,可以創建更復雜的效果。例如創建一個帶有拖尾效果的火焰粒子:
- 啓用粒子系統的Trails模塊
- 使用ParticlesSimpleLit材質並設置適當的Emission值
- 調整Base Color為橙黃色漸變
- 根據需要啓用Lights模塊為部分粒子添加點光源效果
ParticlesSimpleLit因其高效的性能表現,特別適合需要大量粒子的場景,如魔法效果、煙霧、火焰等視覺效果
火焰與煙霧效果
通過調整Surface Type為Transparent並選擇Additive混合模式,配合噪聲紋理實現動態火焰形態。關鍵參數包括_Emission控制發光強度、_MainTex設置火焰貼圖序列幀,同時需啓用Color over Lifetime模塊實現顏色漸變。具體實現步驟:
- 創建Particle System,材質選擇Universal Render Pipeline > Particles > Simple Lit
- 在Surface Options中設置Blending Mode為Additive
- 通過腳本控制_Emission強度模擬燃燒波動
雨雪天氣效果
採用Opaque表面類型提升性能,結合GPU實例化實現大面積粒子渲染。需配置_MainTex為雨滴/雪花貼圖,使用_SoftParticlesNearFade控制粒子淡入距離,並通過Rotation over Lifetime模塊添加隨機旋轉。典型參數:
- _MainTex: 雨滴Alpha貼圖
_SoftParticlesNearFade: 0.5
_RenderFace: Both
魔法粒子特效
利用Color Mode的Overlay選項實現材質與粒子顏色混合,配合_Cutoff參數製作閃爍效果。通過腳本動態修改_HitPos和_HitSize數組可實現受擊時的波紋擴散。核心代碼邏輯包括:
- 聲明Shader屬性:
_HitPos("HitPos", Vector) = (0,0,0,0) - 在片段着色器中計算距離衰減:
float dist = distance(i.worldPos, _HitPos)
落葉/花瓣效果
需啓用Alpha Clipping並設置合適閾值(通常0.3-0.5),結合粒子系統的Shape模塊設置為Box發射器覆蓋樹木範圍。通過Size over Lifetime實現下落過程中的尺寸變化,使用Texture Sheet Animation模塊添加飄動動畫。
受擊閃白效果
複製ParticlesSimpleLit着色器後添加受擊邏輯,通過Lerp函數混合原始顏色與白色,使用_SinTime控制恢復速度。關鍵實現參考受擊閃白動畫方案:
- 添加屬性:
_FlashAmount("Flash Amount", Range(0,1)) = 0 - 顏色混合:
finalColor = lerp(originalColor, white, _FlashAmount)
所有效果均需在URP設置中開啓Depth Texture和Opaque Texture選項以保證深度交互正常。對於複雜效果,建議結合Shader Graph進行原型設計後再轉換為代碼實現.
【從UnityURP開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)