Record data of bone animation from Animation Component, customize GPUSkinning rather than Unity built-in.
4 Ways to implement:
-
Compute bone hierarchy matrix of current frame in Application code -> push Matrix Array to GPU -> Skinning in Vertex Shader -> Next Frame(Goto first step)
-
Compute bone hierarchy matrix of all frames -> Store all matrices into a Texture2D -> Skinning in Vertex Shader(Extract all matrices of current frame to skinning)(Using "additionalVertexStreams" to get individual animtion)
-
Base on Way1 and Way2, Using GPU Instancing to get the minimum Batches, Using CullingGroup to implement Level of Detail to reduce triangle-rendering overhead.
-
Compute bone hierarchy matrix of all frames -> Store data into a ComputeBuffer -> Skinning in ComputeShader(DirectX 11)
screenshot
Adding a new feature that we can attach weapon to hand joint in this example.
http://chengkehan.github.io/GPUSkinning.html