v2.0.0
Turian 2.0.0 introduces per-submesh materials. Imported glTF/GLB models now cook every mesh and primitive (1.x kept only the first primitive of the first mesh), and each submesh can bind its own material.
What changed
- Cooked mesh format (TMSH v2) — mesh assets gained a submesh table (per-primitive index ranges and material slots).
- Scene files — the mesh renderer field
material_guid(a single string) becamematerial_guids(an array). MeshRendererComponent— the singlematerialfield became amaterialsarray (up to 32 entries) plus amaterial_count, bound positionally:materials[i]renders submeshi.- Import behavior — multi-mesh/multi-primitive glTF and GLB files import completely. OBJ import is unchanged (single submesh).
Who is affected
Any project with scenes that assign materials to mesh renderers, and any game
code that reads or writes MeshRendererComponent.material.
Upgrade steps
1. Update to 2.0.0
Download the 2.0.0 SDK. SDKs are self-contained, so you can keep the 1.x SDK installed side by side while you migrate (see the release policy).
2. Let assets recook
The importer version bump forces every imported model to recook into the new mesh format automatically. There is nothing to do — just expect the first project open (or first CLI build) to take longer on model-heavy projects.
3. Migrate your scene files
Old scenes keep loading: the legacy material_guid field is converted in
memory and a warning is logged. To persist the conversion across the whole
project in one pass:
turian-cli migrate path/to/project
The command scans every scene, rewrites only the ones still using the legacy field, and reports what it touched. Commit the resulting diff. (Re-saving a scene in Studio migrates it too — the CLI is just the batch version.)
4. Update game code
If your code assigned or read the renderer's material directly:
// 1.x
renderer.material = my_material_ref;
// 2.0.0
renderer.materials[0] = my_material_ref;
renderer.material_count = 1;
materials[i] binds to submesh i of the mesh. Meshes without a submesh
table (procedural primitives, OBJ imports) render entirely with
materials[0]. An unset or out-of-range slot falls back to the default
material.
5. Check scenes using imported models
Models that always contained multiple meshes or primitives were silently truncated by 1.x — after recooking they render completely. Review scenes built around such models: geometry you never saw before may now appear, and its material slots can be assigned in the Inspector.
Do not downgrade afterwards
Scenes saved by 2.0.0 store material_guids, which 1.x does not read — opening
the migrated project with an older version silently drops material assignments
on save. Migrate a project once, in one direction; if you need to experiment
first, do it on a branch.