Unity2018.1中對粒子系統進行了重大改進,包括功能、性能很多方面,快來看看吧!
GPU網格實例化
粒子系統現在支持GPU實例化來渲染網格。粒子系統使用Procedural Instancing,可以在此處詳細解釋:https://docs.unity3d.com/Manual/GPUInstancing.html
實例化支持已添加到“Particle Standard Shaders”中,並將在所有新內容中默認啟用。舊版內容升級到Unity 2018.1后,可以使用Renderer模塊中的復選框啟用GPU實例化。
還可以將粒子實例化功能添加到自定義的着色器中。這是一個簡單的例子:
Shader "Instanced/ParticleMeshesCustom" { Properties { _MainTex("Albedo", 2D) = "white" {} [Toggle(_FLIPBOOK_BLENDING)] _FlipbookBlending("Flipbook Blending", Int) = 0 } SubShader { Tags{ "RenderType" = "Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile __ _FLIPBOOK_BLENDING #pragma multi_compile_instancing #pragma instancing_options procedural:vertInstancingSetup #include "UnityCG.cginc" #include "UnityStandardParticleInstancing.cginc" struct appdata { float4 vertex : POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; fixed4 color : COLOR; float2 texcoord : TEXCOORD0; #ifdef _FLIPBOOK_BLENDING float3 texcoord2AndBlend : TEXCOORD1; #endif }; sampler2D _MainTex; float4 _MainTex_ST; fixed4 readTexture(sampler2D tex, v2f IN) { fixed4 color = tex2D(tex, IN.texcoord); #ifdef _FLIPBOOK_BLENDING fixed4 color2 = tex2D(tex, IN.texcoord2AndBlend.xy); color = lerp(color, color2, IN.texcoord2AndBlend.z); #endif return color; } v2f vert(appdata v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); o.color = v.color; o.texcoord = v.texcoord; vertInstancingColor(o.color); #ifdef _FLIPBOOK_BLENDING vertInstancingUVs(v.texcoord, o.texcoord, o.texcoord2AndBlend); #else vertInstancingUVs(v.texcoord, o.texcoord); #endif o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i) : SV_Target { half4 albedo = readTexture(_MainTex, i); return i.color * albedo; } ENDCG } } }
使用Instancing可以渲染更多的粒子網格,並且CPU性能更好。
這里有10,000個球體網格,使用舊的非實例化技術,10fps:

這里有100,000個球面網格,使用新的實例技術,可以達到100fps:

軌道粒子速度
Unity 2018.1為Velocity over Lifetime模塊添加了一些新選項,使您可以使粒子相對於定義的中心點移動。默認情況下,中心與transform對齊,但可以在模塊內修改。可以使用Orbital參數使粒子繞中心點行進,並使用Radial參數離開/朝向中心點。

紋理形狀模塊
Shape模塊中的所有形狀類型現在都支持紋理。紋理可用於:
- 控制粒子顏色
- 控制粒子alpha
- 根據設置的的閾值和紋理通道丟棄粒子

子發射器
在Unity 2018.1中有兩種新的產生子發射器的方法。第一種是通過觸發模塊,其工作方式類似於子碰撞模塊產生子發射器的方式。只需在子發射器模塊中選擇觸發器作為子發射器類型,然后當觸發器模塊內部滿足條件時(例如粒子進入碰撞體積),相應的子發射器將被觸發。
觸發子發射器的第二種新方法是通過腳本。添加了一個名為TriggerSubEmitter 的新API ,可用於為單個粒子,粒子列表或所有粒子觸發子發射器。在子發射器模塊中,您可以選擇Manual作為生成類型,該生成類型告訴粒子系統該發射器只能通過腳本中的調用觸發。也可以使用現有的類型(例如Collision 或Death ),並通過腳本為這些子發射器添加其他觸發器。
舊粒子系統退役
繼續維護舊粒子系統成了每個Unity版本的開發負擔。新引擎功能(如VR和多線程渲染)需要花費更多時間來確保引擎的兼容性。當添加新的引擎功能時,需要花很多時間維護傳統粒子系統代碼。
這促使Unity開發團隊采取下一步措施來淘汰舊粒子系統。因此,在Unity 2018.1中將刪除它的Script Bindings。
自Unity 5.4以來,舊粒子系統已被完全棄用,Unity官方的統計顯示幾乎不存在使用情況。Unity團隊的目標是到Unity 2018.3完全刪除Legacy Particle System。
如果這會影響到你,你有一些選擇:
- 將遺留粒子系統遷移到Shuriken
- 使用自動更新腳本來嘗試自動轉換(https://forum.unity.com/threads/release-legacy-particle-system-updater.510879/)
- 通過(https://forum.unity.com/threads/legacy-particle-system-deprecation.420351/)尋求幫助。
加權切線(動畫曲線)
動畫團隊已加入對加權切線的支持,以支持Unity中的所有曲線編輯。這意味着你也可以在粒子系統中使用這個新功能!

