https://github.com/Unity-Technologies/com.unity.demoteam.mesh-to-sdf
A light and fast real-time SDF generator, primarily for animated characters. The dynamic SDF can be used for all sorts of VFX. Also enables hair-to-character collisions in the new hair package.
https://github.com/Unity-Technologies/com.unity.demoteam.mesh-to-sdf
billing-3020 owner-unity-demo-team
Last synced: 8 days ago
JSON representation
A light and fast real-time SDF generator, primarily for animated characters. The dynamic SDF can be used for all sorts of VFX. Also enables hair-to-character collisions in the new hair package.
- Host: GitHub
- URL: https://github.com/Unity-Technologies/com.unity.demoteam.mesh-to-sdf
- Owner: Unity-Technologies
- License: other
- Created: 2022-06-15T10:15:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-17T06:42:48.000Z (about 1 year ago)
- Last Synced: 2025-05-24T06:12:04.416Z (6 months ago)
- Topics: billing-3020, owner-unity-demo-team
- Language: C#
- Homepage:
- Size: 7.76 MB
- Stars: 643
- Watchers: 15
- Forks: 42
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
- anything_about_game - mesh-to-sdf
README
# Package: com.unity.demoteam.mesh-to-sdf
A real-time Signed Distance Field generator. Use a Mesh or a dynamically deforming SkinnedMesh as input to generate a 3D SDF texture every frame.
The SDF can be used by the VFX Graph, the Hair system, and other effects relying on SDFs.
\

The generator is real-time - to achieve better performance, it sacrifices robustness and the ability to handle large meshes. Typical resolutions would be a 5-8k triangle mesh in a 16^3-64^3 voxel volume. If your mesh is much larger or messy (holes, spiky shapes, etc.), it's best to use a cleaner low-res proxy mesh instead. Note that the SDF generator shipping with the VFX Graph has a more robust handling of larger or messy meshes, but it's slower.
The generator works by first splatting distances into voxels in a small area around each triangle, then using either a linear flood or jump flood to fill the rest of the volume.
## Performance
Tested with a 32^3 voxel volume, 5k triangle mesh
- jump flood: RTX3090 0.22ms
- linear flood, 8 iterations: RTX3090 0.18ms, RTX2080Super 0.21ms
## Requirements
- Unity 2021.2+ (mesh buffer access in compute shaders)
- Compute shaders supported on target platform
## Installation
Use [*Add package from git URL*](https://docs.unity3d.com/Manual/upm-ui-giturl.html) (in the Package Manager):
```https://github.com/Unity-Technologies/com.unity.demoteam.mesh-to-sdf.git```
or
Declare the package as a git dependency in `Packages/manifest.json`:
```
"dependencies": {
"com.unity.demoteam.mesh-to-sdf": "https://github.com/Unity-Technologies/com.unity.demoteam.mesh-to-sdf.git",
...
}
```
## Documentation
[Quickstart](Documentation~/index.md)
## Examples
Samples included with the package show basic setup and are described in the doc above.
The [mesh-to-sdf examples](https://github.com/robcupisz/mesh-to-sdf-examples) project is a vfx demo, with the dynamic SDFs driving VFX Graph effects and a raymarching shader:
https://user-images.githubusercontent.com/6276154/201238758-cc87ec4a-a65a-4cb2-b3cc-123576ab9ea2.mov
## Acknowledgements
The core functionality of the generator (initial splatting of distances around mesh faces) uses the implementation from [TressFX](https://github.com/GPUOpen-Effects/TressFX) published by AMD under the MIT license. Thank you!
## Known issues
[Limitations and known issues](Documentation~/index.md#limitations-and-known-issues)