【從UnityURP開始探索遊戲渲染】專欄-直達
作用與原理
ParticlesUnlit是Unity通用渲染管線(URP)中專為粒子系統設計的無光照着色器,核心功能包括:
- 無光照計算:跳過複雜光照模型,僅通過紋理和頂點顏色實現高效渲染,適合火焰、煙霧等特效。
- 混合模式控制:支持Additive(亮度疊加)、Multiply(顏色相乘)等混合方式,適應不同粒子效果需求。
- 性能優化:針對移動設備優化,減少GPU計算負擔。
- 粒子專用功能:支持翻頁動畫(Flipbook)、軟粒子(Soft Particles)和相機淡入淡出(Camera Fading)等特性。
其原理基於頂點/片元着色器架構,通過ShaderLab語言組織渲染流程,利用GPU並行計算處理粒子數據。
發展歷史
- Unity 5.x時期:首次引入標準粒子着色器,區分於通用Standard Shader。
- 2019年URP發佈:重構為URP專用版本,整合計算着色器支持,優化CommandBuffer調度。
- 2020年至今:持續增強功能,如深度紋理交互、Orthographic投影支持等。
具體使用示例
shader
Shader "Universal Render Pipeline/Particles/Unlit"
{
Properties {
_BaseMap("Base Texture", 2D) = "white" {}
[HDR] _BaseColor("Base Color", Color) = (1,1,1,1)
_BlendMode("Blend Mode", Float) = 0 // 0=Alpha, 1=Additive
}
SubShader {
Tags { "RenderType"="Transparent" "Queue"="Transparent" }
Blend SrcAlpha OneMinusSrcAlpha
Pass {
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
// 頂點/片元着色器實現...
ENDHLSL
}
}
}
應用場景:創建火焰粒子時,設置Blend Mode為Additive,使用HDR顏色增強發光效果。
火焰/煙霧效果
- 材質設置:使用透明混合模式(Blending Mode選擇Alpha或Additive),並加載帶有透明度漸變的火焰貼圖。
- 顏色控制:通過Color Mode屬性疊加粒子顏色與材質顏色,例如選擇Additive模式增強亮度。
- 頂點擾動:在Shader中添加噪聲節點擾動頂點座標,模擬火焰動態扭曲。實現示例:創建Transparent材質,Shader選URP/Particles/Unlit,貼圖使用Alpha漸變的火焰紋理,開啓Additive混合。
閃電/能量束效果
- 拖尾與噪聲:啓用Trail和Noise模塊,設置高頻噪聲參數模擬閃電分支。
- 動態變細:勾選Size over Lifetime,曲線設為1到0使末端逐漸消失。
- 高亮材質:使用Unlit Transparent Shader,材質亮度值超過1以觸發Bloom光暈。實現示例:粒子系統啓用Trail,材質Shader設為URP/Particles/Unlit,貼圖為窄漸變條紋。
卡通風格粒子
- Ramp貼圖:通過程序生成漸變紋理控制漫反射顏色分層,實現風格化着色。
- 硬邊裁剪:啓用Alpha Clipping並設置Threshold,實現卡通化硬邊緣。實現示例:使用腳本動態生成Ramp貼圖,Shader中採樣貼圖控制粒子顏色過渡。
消融/溶解效果
- 頂點裁剪:基於頂點Y座標與閾值比較,通過Alpha Clip丟棄像素。
- 邊緣噪聲:疊加Simple Noise擾動裁剪邊界,增強顆粒感。
- 動態混合:使用滑塊控制溶解進度,混合原始顏色與邊緣高光色。實現示例:Shader Graph中連接Position節點Y分量與Step節點,驅動Alpha Clip和顏色混合。
通用配置要點
- 渲染面:根據需求選擇Front Face(默認)或Both(如樹葉)。
- 性能優化:避免過度使用粒子數量,優先通過材質和Shader增強表現力。
以上效果均需結合Particle System組件調整發射參數(如形狀、速度)以實現完整動態。
Shader Graph應用示例
-
創建節點流程:
- 添加Texture Sample節點讀取粒子貼圖
- 使用Vertex Color節點混合粒子顏色
- 通過Blend節點控制混合模式。
-
關鍵節點配置:
- [Particle Vertex Color] → [Multiply] ← [Texture Sample]
↓
[Blend] → [Output]
通過Flipbook節點實現序列幀動畫,配合Time節點控制播放速度。
- [Particle Vertex Color] → [Multiply] ← [Texture Sample]
注意事項
- 移動端需禁用Soft Particles以提升性能。
- 正交相機需特殊處理深度比較邏輯。
- URP版本差異可能導致參數命名變化(如_BaseMap替代_MainTex)
【從UnityURP開始探索遊戲渲染】專欄-直達
(歡迎點贊留言探討,更多人加入進來能更加完善這個探索的過程,🙏)