本文首發於「洪流學堂」微信公眾號。
洪流學堂,讓你學Unity快人幾步
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。
如果這會影響到你,你有一些選擇:
加權切線(動畫曲線)動畫團隊已加入對加權切線的支持,以支持Unity中的所有曲線編輯。這意味著你也可以在粒子系統中使用這個新功能!
加權切線用法Unity:世界領先的遊戲,VR/AR引擎
《鄭洪智的Unity2018課》,傾盡我8年的開發經驗,結合最新的Unity2018,帶你從入門到精通。
目前預售拼團,5.5折!