Status: WIP, I’m looking for feedbacks and doing final touches.
Try on Performance Sample on Browser or Windows: Ica Skinned Mesh Renderer Sample by ica-dev
Ica Skinned Mesh
Ica Skinned Mesh is a compute shader based skinner that focused on skinning high quality digital humans.
Its a replacement for the built in “Skinned Mesh Renderer” component, that enables state of the art skinning techniques that used by many AAA games.
When To Use
- You are working realistic character for games or cinematic projects.
- Your character model have a lot of blendshapes and reducing performance (10-300+).
- You want dynamic, physics-driven elements for secondary motion.
Dual Quaternion Skinning (DQS) with Scale
Say goodbye to volume loss with DQS, the gold standard for realistic deformation. DQS solve the volume loss issue on skinned meshes, mostly seen at joints. You probably already familiar with DQS since it standard in 3d Modelling applications.
Optimized Blend Shape Processing
Process all blend shapes in a single compute shader dispatch, improving performance by 2x to 4x compared to Unity’s built-in Skinned Mesh Renderer, when a lot of blendshapes is active at same time.
Perfect for character models that have high amount of blend shapes.
Accurate Normal & Tangent Recalculation
Fix inaccurate lighting caused by multiple blend shapes affecting the same vertex.
Utilizes a compute shader pipeline for runtime recalculation of normals and tangents, ensuring correct results at every frame.
Verlet Simulation for Realistic Secondary Motion
Bring life to characters with physics-driven secondary motion for mesh parts.
Based on Verlet integration, providing natural, dynamic movement while maintaining performance.
Easily configurable via vertex colors and stiffness, damping levels to suit your character’s design.
Runs Editor time
All IcaSkinnedMesh components works on edit time too, what you see in edit time is what you get in runtime Also fast play mode options are supported.
Attachment Skinner
Attachment Skinner is alternative way of skinning for meshes that meant to follow a base mesh, for example clothing, 3d decals.
It does not use bone or blend shape information, instead an attachment follows their base shape whenever it deforms.
This results much faster computation, for applicable meshes. Also reduces both vram and disk consumption.
Also since it does not required to have weight painting and blend shapes, it simplifies asset creation pipeline significantly.
Why Choose This Asset?
- Built for Performance: IcaSkinnedMesh built high performance from very first iteration, based on experience of author previous DOTS based normal recalculation asset. Its prioritize use of compute shaders whenever algorithms allows, and using DOTS on CPU side.
- Ongoing Support: Tested with one large-scale project and also used author every day.
- Non-Disruptive Integration: IcaSkinnedMesh read bone transforms and handles the skinning and rendering part, it does not not interfere with other plugins that work on IK, Animation, Shader etc.
Package Includes
Three Components:
- IcaSkinnedMeshRendererSystem: process all other IcaRenderers in the scene
- IcaSkinnedMeshRenderer: Main component of the asset and a replacement for built in SMR. It lives next to disabled built in SMR component and uses its parameter to render the mesh.
- IcaAttachmentRenderer: Attachment skinner that follows parent IcaSkinnedMeshRenderer
For Advanced Users: There is also helpers assets that also can be used if user wants to
- A compute shader based 3d Kd tree system.
- Skinned Mesh Renderer Utils
- Advanced Mesh Api Utils
Supported Platforms
- Compute Shader enabled Platform
- Might not be suitable for mobile! (This asset focuses delivering high quality visuals, and mobile platform not tested at all)
Requirements
- Unity 6000.0.32f or higher
How It Works
- At LateUpdate IcaSkinnedMeshSystem iterate all IcaSMR’s.
- It reads and calculate necessary bone matrices on CPU side via job system, then upload to GPU buffers.
- Then, a compute shader dispatched for blendshapes, bone skinning, and verlet physics.
- Another dispatch fired to calculate triangle normals-tangents, then another one vertex normals-tangents.
- Then mesh rendered by the system.
- If there are IcaAttachmentRenderers use that IcaSMR, they will be skinned similar to IcaSMR by using 3 compute dispatch.
Current Caveats
- 4 Bones per Vertex Only*
- Mesh index type should be 32 bit*
- Not all SMR api methods provided in IcaSMR*
(*) Planned to me fixed or improved.