What is Tydra?
September 3, 2026 ยท View on GitHub

LightUSD does not support Hydra interface in pxrUSD at the moment. We think Hydra(multi-purpose sceneDelegate/renderDelegate interface) is too much for LightUSD usecases(AR, lightweight 3D viewer/runtime, DCC exchange, etc).
Instead, we'd like to propose Tydra(Tiny Hydra), something like a three-headed monster(Please imagine Gidorah: https://en.wikipedia.org/wiki/King_Ghidorah), which directly converts(publishes) USD scene graph(Stage. Prim hierarchy) to a renderer-friendly data structure or published data format(imagine glTF). API design of Tydra is completely different from Hydra.
Currently Tydra is considering following three usecases in mind:
- Runtime publishment(e.g. to glTF), DCC conversion and exchange for realtime graphics(AR, VR, MR, games, etc).
- Scene conversion to GL/Vulkan renderer(e.g. WebGL rendering)
See
../../examples/tydra_to_renderscene - Scene conversion to Ray tracing renderer(e.g. Vulkan/OptiX ray tracing)
See
../../examples/sdlviewer/for SW raytracing example.
Status
Production-ready for OpenGL/Vulkan/Three.js rendering pipelines. API is mostly stable but may still evolve.
RenderScene
Scene graph representation suited for OpenGL/Vulkan/WebGL renderer.
Status
- Node xform
- Triangulate mesh
- Subdivision surface support(subdivide mesh using OpenSubdiv)
- Resolve Material binding
- GeomSubset material binding
- Collection material binding
- Load and setup Texture
- Colorspace conversion
- sRGB <-> Linear
- rec709 <-> Linear
- displayP3 Linear <-> sRGB Linear
- ACEScg(AP1, Linear) <-> sRGB Linear
- Rec.2020 <-> sRGB Linear
- Adobe RGB <-> sRGB Linear
- CIE XYZ-D65 <-> sRGB Linear
- Gamma 2.2 / 1.8 -> Linear
- Colorspace conversion
- Skinning (LBS and Dual Quaternion)
- BlendShape
- Animation(SkelAnimation) - joint TRS, blend shape weights
- Xform animation(timesamples XformOps)
- Lights (SphereLight, RectLight, DistantLight, DomeLight)
MaterialX Support
- OpenPBR Surface shader conversion
- Autodesk Standard Surface shader conversion (via OpenPBR)
- UsdPreviewSurface shader conversion
- NodeGraph traversal with texture/normal/tangent extraction
- MaterialXConfigAPI metadata support
- See doc/materialx.md for full details
Tangent Computation and Quantization
Multiple tangent-space computation methods:
| Method | Speed | Quality |
|---|---|---|
| Lengyel | ~16 MTri/s | Good (1-5 deg from reference) |
| MikkTSpace | ~0.7 MTri/s | Reference |
| FastMikkTSpace | ~2.0 MTri/s | Identical to MikkTSpace |
| Hybrid | ~3.5 MTri/s | Identical to MikkTSpace |
GPU-friendly packed formats:
| Format | Bytes/vertex | Max Error |
|---|---|---|
| INT_2_10_10_10_REV | 4 | 0.08 deg |
| SNorm8x4 | 4 | 0.34 deg |
| FP16x4 | 8 | 0.03 deg |
Normal quantization (INT_2_10_10_10_REV) also supported for 67% storage savings.
See doc/tydra-tangent.md for details.
Memory Estimation
-
RenderMesh::estimate_memory_usage()- points, indices, normals, tangents, texcoords, joint data, blend shapes -
RenderScene::estimate_memory_usage()- meshes, textures, nodes, materials, animations, skeletons
Configuration (MeshConverterConfig)
| Option | Default | Effect |
|---|---|---|
tangent_method | FastMikkTSpace | Tangent computation algorithm |
tangent_storage | Packed1010102 (WASM) / PackedFp16 (native) | Tangent quantization format |
normal_storage | Packed1010102 (WASM) / Float3 (native) | Normal quantization format |
defer_tangent_computation | false (true in WASM) | Defer tangent work to reduce initial load |
lowmem | false (true in WASM) | Free source GeomMesh after conversion |
preserve_texel_bitdepth | false (true in WASM) | Keep uint8 textures, avoid float32 bloat |
Key Source Files
| File | Purpose |
|---|---|
render-data.hh | RenderScene, RenderMesh, RenderMaterial, MeshConverterConfig |
render-data.cc | ConvertToRenderScene, tangent computation, memory estimation |
scene-access.hh | Scene traversal and query APIs |
texture-util.hh | Texture loading and colorspace conversion |
fast-mikktspace.hh | FastMikkTSpace and Hybrid tangent implementations |
tangent-quantize.hh | Packed tangent/normal formats for GPU |
materialx-to-json.hh | MaterialX to JSON conversion |
Documentation
- doc/materialx.md - MaterialX pipeline details
- doc/skinning.md - UsdSkel skinning equations and Tydra export
- doc/tydra-tangent.md - Tangent computation algorithms and quantization
- doc/threejs.md - Three.js animation and material integration
- doc/memory-and-performance.md - Memory profiling and optimization
Remaining work
- Data structure suited for realtime DCC.
- Data structure suited for Ray tracing
- ValueClip support (clip scheduling, time remapping)
- Vertex animation (points timeSamples)
- Dedicated typed material/camera/light animation targets and exporter mappings
beyond the current generic
CustomPropertytracks. - Keep current Tydra and
tydra/nextrender extraction behavior aligned for material, texture, skeleton, and animation data.
The maintained next-core and Tydra-next API documentation is in
doc/lightusd-next.md. This README describes
the established legacy RenderScene API; it is not a release checklist.