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.

Phase 6 · Slice 10 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,… Phase 6 · Slice 9 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,… Phase 6 · Slice 8 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… Phase 6 · Slice 7 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… Phase 6 · Slice 6 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… Phase 6 · Slice 5 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… Phase 6 · Slice 4 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… Phase 6 · Slice 3 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,… Phase 6 · Slice 2 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… Phase 6 · Slice 1 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.… Phase 6 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… Phase 5 · Slice 32 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… Phase 5 · Slice 31 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… Phase 5 · Slice 30 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),… Phase 5 · Slice 29 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… Phase 5 · Slice 28 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… Phase 5 · Slice 27 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… Phase 5 · Slice 26 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… Phase 5 · Slice 25 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… Phase 5 · Slice 24 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… Phase 5 · Slice 23 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),… Phase 5 · Slice 22 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… Phase 5 · Slice 21 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… Phase 5 · Slice 20 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…