GPU Instancing & Boids
GPU Instancing 是一項大量重複的物件繪製的時候一種優化的方式。原理是在 相同的3D模型 一次性渲染多次,利用GPU的並行處理能力,極大地減少了CPU和GPU之間的溝通成本,進而提高了渲染效率。 適用於大量重複的物件。對於不同的物件,還是需要進行單獨的渲染。其次,雖然GPU Instancing可以減少CPU和GPU之間的通信開銷,但如果物件數量不夠多,可能無法發揮出其優勢。因此,在使用 GPU Instancing 時,需要根據具體的場景和需求進行適當的優化和調整。 這邊使用了 群鳥移動 Boids 的演算法來演示在大量物件情形中配合 GPU Instancing 的製作。 群鳥移動 Boids 是一種模擬大量物體之間運動的一種算法,有興趣的可以再爬文了解,這邊就不詳細說明。從畫面看,魚群體會在已經限制的範圍內做模擬的群體運動,同時個體之間也會保有間距不重複。 而在GPU Instancing的 魚群當中,我們也可以做出個別的差異。例如 顏色/頂點位移 的偏移。 UNITY_INSTANCING_BUFFER_START(Props) UNITY_DEFINE_INSTANCED_PROP(float4, _MaskColor) UNITY_DEFINE_INSTANCED_PROP(float, _VertOffset) UNITY_INSTANCING_BUFFER_END(Props) 當中 _MaskColor 可以讓 GPU Instancing 的 Shader 當中設定顏色,_VertOffset 則是設定頂點運動的偏移值。 在頂點運動上的方式: fixed voffset = UNITY_ACCESS_INSTANCED_PROP(Props, _VertOffset); float4 offset = float4(0,0,0,0); offset.y = _speedRange0 * sin(_Time.y * _speedRange1 + voffset) * mask * mask2 ;