Updates
Progress, a slice at a time.
Every slice that lands is written up in the plan with what it does, how it was checked, and what's next. These are those write-ups, newest first.
Binding compatibility
cargo xtask api-coverage also writes docs/compatibility/api-bindings.md: every public member of a Unity type Tassix has, checked by the signature compiled code binds to (declaring type or a base,…
Corpus: scenes and Json.NET
A project without build scenes plays one of its scenes (a menu or main scene when there is one, logged; Unity's editor would play the last scene open,…
Vertex colors
Meshes carry vertex colors to the GPU: Mesh.colors/colors32 upload (a new mesh_set_colors, native API 40) when there's one per vertex, into MeshData::colors (RGBA8, empty for white). Every vertex…
Unity 6000.3 baseline, lines and trails
Recordings move to Unity 6000.3.27f1, the 6.x LTS (conformance/UNITY_VERSION; xtask also finds editors in the Hub's custom install location). All 56 scenarios re-recorded. What 6000.3 changed: three new…
The project corpus
corpus/projects.json pins 14 MIT-licensed Unity projects (Unity 5.3 to 6000.2); cargo xtask corpus fetches them into target/corpus, plays each headless for 300 frames and ranks what their logs…
Common API gaps
3D physics (physics_queries): SphereCastAll/BoxCastAll/CapsuleCastAll on PhysX's sweepMultiple and their NonAlloc forms, OverlapBox/OverlapCapsule NonAlloc, the CapsuleCast overload without a hit; initial overlaps…
MonoBehaviour.Invoke
Invoke, InvokeRepeating, CancelInvoke (all or by name) and IsInvoking (Scripting/DelayedCalls.cs), from a new invoke scenario recorded in Unity: calls run after Update (after the coroutines) once due before…
Documentation and the compatibility matrix
docs/: an index, getting started, Unity projects (what is read, how scripts compile, porting checks), packaging (the folder, cooking, NativeAOT with its numbers and limits), agents and MCP,…
NativeAOT builds
dotnet/Tassix.Native: the managed runtime published with NativeAOT as one shared library. Bootstrap's [UnmanagedCallersOnly] entry points carry export names (tassix_initialize, tassix_frame...), exported from the…
Packaged players
L3 was already in place (Phase 4 slice 10): plugins built against Unity's module assemblies bind to Tassix through Roslyn-generated type-forwarding facades, covered by an e2e fixture plugin.…
Splash screen with the Tassix logo
A windowed player (development or packaged) opens its window first: the render thread draws the splash on its own (every 16 ms while no game frame comes) while…
Bindless materials
crates/render/src/bindless.rs: on devices with texture binding arrays and non-uniform indexing (requested when the adapter has them; TASSIX_BINDLESS=0 opts out), the surface pipelines read every material texture from…
Mesh LODs
crates/render/src/simplify.rs: our own simplifier, quadric error metrics with half-edge collapses (a vertex merges into a neighbor, so every level indexes the original vertices). Border and seam vertices stay…
TextMeshPro distance field effects
A font asset's SDF atlas: glyphs rasterized at 48 px with 6 px of padding, turned into signed distances by an exact Euclidean distance transform (Felzenszwalb and Huttenlocher),…
Particle collision, noise and trails
Collision module (Planes and World): a particle crossing a plane or a collider (a raycast along its step, offset by its radius) stops at the contact, its velocity's…
Input System interactions
IInputInteraction and InputInteractionContext (Started, Performed and its stay-started/stay-performed forms, Canceled, Waiting, SetTimeout, ControlIsActuated, ComputeMagnitude): interactions listed on bindings and…
Animator layers, interruption, behaviours and root motion
A new Unity scene (NEAnimAdvanced, built by SceneSetup) and the animator_advanced scenario recorded in Unity, matched exactly (48 scenarios pass): StateMachineBehaviours (loaded from the controller, copied per…
Sprite lights and soft 2D shadows
Sprite lights (Light2D.LightType.Sprite) draw their lightCookieSprite: the sprite's colors and alpha over its box (pivot, pixels per unit, the light's scale and rotation), with no falloff; a point…
Agent avoidance
NavMeshAvoidance.cs: after all agents step, overlapping agents are pushed apart along the navmesh (a few relaxation passes), then each agent picks its next velocity by adaptive sampling around…
Cooked assets and streaming
crates/assets (tassix_assets): imported models (nodes, meshes, materials, textures with shared images) and decoded images are written as rkyv archives behind a small header (magic, cook version, kind), and…
Benchmark budgets and Unity comparison
bench/scenes: 10,000 scripted spinning cubes (simulated, and rendered at 1280x720), a city of 5,184 towers flown through at street level (rendered with shadows, with and without GPU culling),…
GPU culling and indirect draws
crates/render/src/cull.rs and cull.wgsl: each frame the shared opaque runs' instances go through a compute pass per view: bounding spheres (mesh bounds computed at upload, scaled by the instance's…
LODGroups and culling masks
Draw items carry a view mask: the renderer shares one set of opaque runs for items every view draws and gives the others runs per view; shadows come…
The C# Job System and Collections
tassix_jobs grows a dependency-ordered job scheduler (handles): a job's batches run on the rayon pool once the jobs it depends on finish; handles complete, combine and are never…