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 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… Phase 5 · Slice 19 Unity.Mathematics A Unity.Mathematics assembly (same name and namespace as the package): the vector and matrix types over bool, int, uint, float, double and half come from dotnet/Unity.Mathematics/generate.py (constructors, conversions… Phase 5 · Slice 18 Off-mesh links Links reach the native side (NavMesh.AddLink/RemoveLink, the NavMeshLink component, API 31): paths search a graph whose nodes are the start, the end and the links' ends, with walks… Phase 5 · Slice 17 2D shadows and normal maps ShadowCaster2D casts: its outline (a shape path; a sprite renderer's bounds, where Unity's editor takes the sprite's own outline; or, as Unity falls back, its renderer's bounds or… Phase 5 · Slice 16 2D lights Sorting layers are real: the project's TagManager layers (Unity scenes, the MCP's projects, the conformance project), with Unity's IDs (saved unsigned), names and values relative to Default; renderers… Phase 5 · Slice 15 Navigation A new tassix_navigation crate vendors Recast Navigation 1.6.0 (zlib: Recast and Detour, unmodified) behind our own C shim. It bakes as Unity's bakes show: voxels a third of… Phase 5 · Slice 14 Particles ParticleSystem simulates on the CPU in managed code, after LateUpdate: the main module, emission by time and distance with bursts (cycles, intervals, probability), and the common shapes; velocity,… Phase 5 · Slice 13 URP post-processing New assemblies with Unity's names: Unity.RenderPipelines.Core.Runtime: Volume, VolumeProfile, VolumeComponent, every common VolumeParameter type, VolumeManager and VolumeStack; Unity.RenderPipelines.Universal.Runtime… Phase 5 · Slice 12 Cubemaps and reflection probes Cubemap: six faces in Unity's order with row 0 at the top; SetPixel/GetPixel/SetPixels/GetPixels store colors as the format does (8-bit rounding, half floats); mipmaps; Apply uploads half floats,… Phase 5 · Slice 11 The editor’s RenderSettings and skyboxes The MCP editor keeps a scene's RenderSettings: a set_render_settings command (undoable and reviewable, checked against RenderSettings' property names; null resets one); scene_open reads them from .unity scenes and… Phase 5 · Slice 10 PBR maps and RenderSettings Material maps: normal maps (with _BumpScale / glTF's scale), in a tangent frame computed per mesh on upload with Unity's handedness; metallic maps (Standard's and URP's R metallic,… Phase 5 · Slice 9 Text entry and dropdowns InputField and TMP_InputField, sharing one editing core: typing with validation by content type (integer, decimal, alphanumeric, name, email; TMP's digit, regex and custom validators) and the character limit;…