Skinning 類型 | 優勢 |
---|---|
CPU Skinning | 各平臺類似穩定 |
無 CPU/GPU 傳輸損耗 | |
---- | ---- |
GPU Skinning | 多核並行計算 |
訪存速度更快 | |
浮點運算能力更高 |
目前 Unity 擁有一套 GPU Skinning 的流程,經過勾選 Project Setting 中的 GPU Skinning 選項便可。在 GPU 要支持 Texture Float 格式( Sample2D_float )下,經過 Skinning Mesh Renderer 進行 Transform feedback 結合 Geometry Shader 對 Vertex Buffer 重寫來實現。html
Skinning 類型 | 優勢 |
---|---|
Unity GPU Skinning | 須要 OpenGL ES 3.0 |
CPU 計算骨骼信息 | |
GPU 蒙皮 | |
支持 Unity 原生工具鏈 | |
---- | ---- |
自定義 GPU Skinning | 須要 OpenGL ES 2.0 |
不須要計算骨骼信息 | |
GPU 蒙皮 |
總的來講,GPU Skinning 分紅兩部分:工具
第一部分經過離線採樣過程,把對應骨骼信息和動畫矩陣烘焙在一張 Texture 上性能
第二部分經過運行蒙皮過程,經過 Shader 實時計算頂點座標。動畫
(1)離線採樣過程3d
GPU Skinning Samplerorm
其中 GPU Skinning Animation 數據比較複雜,包含骨骼信息和動畫矩陣。htm
仔細觀察,以前介紹 Texture 上已經存在骨骼信息和動畫矩陣,這裏 Animation 包括多餘動畫矩陣數據,主要是爲了實如今 CPU 端獲取骨骼點實時位置,用於實現相似特效掛點之類。對象
(2)運行蒙皮過程blog
在 GPU 端獲取當前動畫幀和 Texture 上的動畫矩陣來計算頂點座標。排序
使用少許 DrawCall 一次性繪製大量相同 Mesh 且具備不一樣參數的對象。
Instance 接口 | 優勢 |
---|---|
DrawMesh | 簡單 |
---- | ---- |
DrawMeshInstanced | 材質改變時候能夠合批 |
深度排序時候能夠合批 | |
一次最多繪製 1023 個 |
MaterialPropertyBlock 相對於修改 Material.SetXXX 性能更優,並經過避免調用 Renderer.material 致使產生新 Material,從而節省內存。
實現 Instance 一般須要三個步驟:
UNITY_INSTANCING_BUFFER_START(name)
UNITY_DEFINE_INSTANCED_PROP(float4, _Property)
UNITY_INSTANCING_BUFFER_END(name)
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_SETUP_INSTANCE_ID(v)
UNITY_ACCESS_INSTANCED_PROP(name, property)