博客 / 詳情

返回

【URP】Unity[內置Shader]粒子簡單光照ParticlesSimpleLit

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

發佈 評論

Some HTML is okay.