nishi code wiki / research / craft roadmap
Nishi Craft: the SOTA roadmap
FPS farming-life sim · compiled 2026-08-01 · six parallel research sweeps + a live measurement of the running engine · phases A–E · falsifiable exit criteria
synthesises: voxelrender · charphys · npcmind · worldsim · stylelens · autosci family tree: research_map
nx_wasm_craft_gate is 39/39 GREEN, nx_page_verify is GREEN, and a live headless-browser screenshot renders terrain, biome banding, snow caps, clouds, sun, hotbar and crosshair correctly — while the public edge at :443 drops ~20% of connections (interleaved same-moment sampling: 39 OK / 11 hard-fail on :443 vs 50 / 0 on :8443). Roughly one connection in five lands on a co-bound SO_REUSEPORT socket that never completes the handshake. Banked as debt 1785614026 (sev 6); the remedy needs an operator decision because the blast radius includes the DSM web UI.0. Where we actually are (measured today, not asserted)
https://nishifamily.com/world/craft works. Verified this session:
nx_wasm_craft_gate39/39 GREEN (world mix, ray-vs-grid ground truth, determinism, break/place, caves 16,840 cells, ores coal 15,852 / iron 6,829 / gold 3,052, save roundtrip + corrupt-refuse, 12 mobs with genomes and inheritance, streaming origin 0→320→0 regen-identical, edit journal).nx_page_verifyGREEN — every referenced asset fetches and decodes.- Live headless-browser screenshot: terrain, biome banding, snow caps, volumetric-ish clouds, sun, hotbar, crosshair all render correctly.
- NPC assets live:
/world/ref8.nxa3,310,288 B and/world/ref9.nxa3,317,000 B, both HTTP 200.
The one real defect is not in the game — it is in front of it. Interleaved same-moment sampling:
| endpoint | OK | hard-fail | rate |
|---|---|---|---|
https://nishifamily.com/world/craft (:443) | 39 | 11 | ~22% fail |
https://nishifamily.com:8443/world/craft | 50 | 0 | 0% |
~180 total samples put :443 at 19–22% and :8443 at zero. Successful :443 handshakes serve the correct Let's Encrypt CN=nishifamily.com cert — identical to :8443 — and failures return no cert at all. So this is not the “DSM serves a self-signed cert” theory: roughly one connection in five lands on a co-bound SO_REUSEPORT socket that never completes the handshake. knowledge/portdup_watch.conf documents that DSM runs an 8-worker pool on :443 by design and the sovereign edge deliberately co-binds it — which is exactly why :443 is excluded from the port-dup watch list, and why every existing gate is blind to this. Banked as debt 1785614026 (sev 6). Remedy needs an operator decision because the blast radius includes the DSM web UI.
Capability matrix — the honest per-axis position
| axis | what exists | honest gap |
|---|---|---|
| Rendering | integer DDA raycast, per-texel hash textures, bump/micro-relief, corner AO, sun shadow march, projected sun disc, smooth clouds, water transparency, fog. Groundtruth 983 vs saturated ceiling 1000; det 110 vs Veloren 148 | critic saturates — no headroom left on this ruler. capability_level_permil 140–175 (CLAY) on the perceptual axis. No temporal reuse, no GI, no denoiser |
| World | 128×48×128 window streaming over unbounded land, caves, depth-ordered ores, biome banding, 8192-slot absolute-coord edit journal | no seasons, no day/night, no soil state, no water cycle |
| Physics | player gravity/jump/step/swim, nx_collide2d swept continuous (8/8, mutation-proven), nx_softdyn general secondary-dynamics solver 7/7 | softdyn is not bound to any geometry — nothing visibly jiggles. No ragdoll, no active ragdoll, no IK |
| NPCs/bodies | NXA format: 14,164 verts / 28,092 tris / 104 joints / 17.9 s mocap, LBS in vertex shader, instanced, 4,400 hair locks, skinned dress, 60fps with 8–9 skinned NPCs | minds are a design cardinal only — unbuilt |
| Behavior | 20-bit appearance genome, inherited bold↔shy personality bits, WANDER/SOCIALIZE/REST/FORAGE/FLEE, meet/disguise/wardens, daughters field-crossed from parents | no needs, no schedules, no memory, no gossip, no economy |
| Weather | drifting cloud plane, gradient sky, projected sun, fog, water shimmer | no rain, no snow, no seasons, no day/night, no wind |
| Animals | 12 humanoid mobs, terrain-following, player-curious | no fauna, no husbandry, no herds |
| Styles | silhouette outlines, DAZ-cue skin, VN sprite compositor | no NPR/cel pipeline at all |
| Save | v6 image, atomic, corrupt/version refuse, localStorage + native, survives reload | was the #1 gamebench gap — now closed; sole remaining PARTIAL is character-gen-parametric |
nx_gamebench: capability coverage 980‰, demand-weighted 995‰, HAVE 25 / PARTIAL 1 / GAP 0.
1. Where SOTA is (July 2026) and what is adoptable
The stack constraint decides everything: WebGL2 / GLSL ES 3.0 fragment+vertex only, no compute shaders, integer core, no third-party engines. That single filter kills most AAA headline tech and leaves a surprisingly strong adoptable set.
Rendering
Every shipping AAA renderer now renders at 25–50% internal resolution and reconstructs (DLSS 4.5, FSR 4 Redstone); native-res rendering is dead at the high end. Path tracing became a product tier in 2026 (RE Engine ReSTIR GI, PRAGMATA, 007 First Light). Neural texture compression shipped as SDKs but no released game ships it. WebGPU is now baseline in all major browsers (~82–87% desktop, ~71% mobile) — but at 71% mobile, WebGL2 stays the floor through ~2027. The voxel-specific news is the important part: NAADF (Eurographics 2026, TU Wien) — per-cell axis-aligned distance fields give 3–5× faster ray traversal than DAGs, reference code public; and Radiance Cascades (shipped in Path of Exile 2) give noiseless diffuse GI at a cost independent of scene complexity and light count — which sidesteps our biggest constraint, because noiseless output needs no ML denoiser.
Body physics
Motion matching is the shipped SOTA (UE 5.4 production-ready, battle-tested on 100 Fortnite players). Euphoria-class active ragdoll remains a Rockstar monopoly. No shipped title uses a learned physics policy as primary character control. Research moved fast — SONIC (NVIDIA, Nov 2025) scales motion tracking to 42M params with 1–2 ms policy inference — but the bottleneck for us is not the policy, it is that every one of these is trained in a float rigid-body sim. Meanwhile Photon Quantum ships full deterministic physics on Q48.16 fixed point in real titles, so the arithmetic regime is production-proven. AVBD (SIGGRAPH 2025) is the current best paper-recipe for unified rigid+soft with real joint limits.
NPC minds
The decisive datapoint is inZOI (Krafton, Mar 2025): ships an on-device 0.5B Mistral NeMo Minitron that picks actions from needs/personality/relationships, emits rationales, and does sleep-time reflection — the LLM decorates a utility-AI life simulation, it does not tick it. Cloud NPC-as-a-service is in retreat: Inworld pivoted to local runtimes, Replica shut down, Ubisoft's NEO NPCs have shipped nothing, and Fortnite's Darth Vader was jailbroken into slurs within hours. Generative Agents cost $2,000+ for 25 agents over 2 game days; Lyfe Agents and Affordable Generative Agents cut that 10–100× by caching stable lifestyle policies. Classical depth is cheap and proven: The Sims' smart-object advertisements, RimWorld's thought ledger, Shadows of Doubt's per-NPC 24h schedules with AI-LOD by player proximity, and Talk of the Town's belief records with sources — the last of which no shipped competitor has, making it a genuine differentiator.
World sim
Vintage Story is the existence proof that a voxel engine can simulate seasons, N/P/K soil, snow accumulation, food spoilage and husbandry simultaneously. Minecraft's crop model is the cheapest useful one and it is pure integer arithmetic: p = 1/(floor(25/speed)+1), where speed comes from own-voxel hydration plus a 3×3 neighbour stencil. Hillaire 2020 sky needs only two small 2D LUTs and scales to mobile. Nubis³ volumetric clouds cost 4–6 ms per cloud type and need compute — defer.
Style
Hi-Fi Rush (GDC 2024) proves the architecture: style lives in deferred passes over a semantic G-buffer, not in per-material forward shaders. The strongest precedent for us is Minecraft + Iris shaderpacks — the same voxel world rendered photoreal or cel purely by swapping a data pack. Ghost of Yōtei (Oct 2025) ships three director “lenses” over one unchanged simulation. Real-time neural stylization is not feasible at 60fps in a browser in 2026 (MirageLSD needs datacenter GPUs; browser Stable Diffusion is ~15 s/frame). Playable generative world models (Genie 3, Oasis, Muse, Waypoint) are not runtimes — persistence is minutes, no determinism, no save states. Their honest role is offline asset generation (Marble exports splats/meshes), never the runtime.
2. The ladder
PHASE A — make it real (the foundation everything else consumes)
| Rung | What | Why here | Exit criterion |
|---|---|---|---|
| A0 | Public edge reliability. Needs an operator decision on retiring DSM nginx from :443; interim is :8443. Ship a public-edge connect-success gate regardless, so the number is never invisible again. | Currently 1 in 5 visitors gets a dead page. Nothing else on this list matters at 78% availability. | 200/200 connects on the public URL. |
| A1 | Time. An integer tick calendar with day/night and a 4-season cycle. Use Assassin's Creed Shadows' trick of states inside seasons so transitions never jar. | Every subsequent system is a function of it, and it is nearly free. | A gate asserting day→night→day and spring→winter→spring tick correctly, bit-exact across two arenas. |
| A2 | Sky (Hillaire 2020). Two small 2D LUTs (transmittance + multiscattering), computed once, sun moves freely, scales to mobile. | Single largest look-change per instruction on the whole list. | Groundtruth score re-measured; sun elevation drives sky colour continuously. |
| A3 | Coarse-ray prepass. One ray per 8×8 tile at 1/8 res into a min-depth texture; full-res rays start there. Teardown's “beam optimisation”. | This is the rung that funds every later rendering rung. | Primary-trace ms halves at unchanged output checksum. |
| A4 | Bind softdyn to geometry (spring-decomposed skinning). The solver already exists and is gate-proven — it is simply not connected to anything. | The highest payoff-per-hour item in the entire document: days of work, and bodies stop looking dead. | The existing 7/7 solver visibly moves flesh, hair and cloth; a gate asserts overshoot sign-changes on the skinned mesh, not just the solver. |
PHASE B — the game becomes a farming-life sim
| Rung | What | Why here | Exit criterion |
|---|---|---|---|
| B1 | Soil state per farmland voxel. 3–4 bytes per farmland voxel (hydration + N/P/K + fertility tier) on a sparse active list, never per-frame. | This is the cheapest way to make weather matter. | Rain measurably raises hydration; a dry field measurably grows slower. |
| B2 | Crop growth on the Minecraft stencil. Pure integer arithmetic. Develop B1+B2 as one unit. N discrete stage meshes — not L-systems; FSPM/L-Py are research tools, not runtime. | Minecraft's crop model is the cheapest useful one, and it fits the integer core exactly (§1). | A crop planted in a hydrated 3×3 matures in the predicted tick count; the neg-control dry crop does not. |
| B3 | Global wind + vertex-colour foliage sway. Crysis-lineage vertex shader. | Highest perceived-life-per-instruction on the list. | One uniform demonstrably drives grass, crops, trees, rain and clouds together. |
| B4 | Seasonal foliage + snow accumulation. Top-down sky-visibility accumulation texture blended by the terrain shader. | — | A winter screenshot and a summer screenshot of the same coordinates differ in palette, density and ground cover. |
| B5 | Animal husbandry. Stardew's numbers (friendship 0–1000, half-heart = 100, mood 0–255 resolved at day boundary, mood ≥150 raises quality odds). Add Medieval Dynasty's manure → fertilizer → herd size caps fertilizable area. Boids are free at ≤20 head. | Stardew's numbers are fully published and battle-tested; the manure chain closes a real economic loop. | Friendship and mood integers demonstrably gate product quality. |
| B6 | The FLIAW loop. The Almighty Farming Tool morphs into hoe/shovel/axe/scythe/rake/spatula/spear — an FPS radial weapon-wheel by construction. Crops never fail; the drama is logistics, cooking and festivals. Progression currency is “who shows up”, not gold — beastfolk bring field labour and husbandry, dwarves bring brewing, each arrival unlocking oil, alcohol, soy sauce, salt, spider-silk cloth, honey. | The anime's actual design. | A new resident arrives and unlocks a production chain end-to-end. |
PHASE C — NPCs become people
Build 1→8 in order. All integer, all deterministic, zero runtime ML.
| Rung | What | Why here | Exit criterion |
|---|---|---|---|
| C1 | Needs + smart-object advertisements (The Sims). Objects broadcast integer need-deltas; NPCs pick max(need-weight × advertisement). Slots directly under the existing WANDER/SOCIALIZE/REST/FORAGE states. | Content then scales by adding objects, not agent code. | Adding one new object changes NPC behaviour with no change to NPC code. |
| C2 | Daily schedules + interrupt/resume stack, with AI-LOD by player proximity. | Shadows of Doubt runs hundreds of citizens this way because 95% cost nothing. | 100 NPCs at unchanged frame time. |
| C3 | Thought/mood ledger (RimWorld). Signed integer thoughts with TTL decay; sum = mood. | — | “Why is she sad?” has an inspectable answer. |
| C4 | Pairwise opinion matrix. Trait-gated, not merely trait-modified. | CK3's documented weakness is that opinion arithmetic swamps personality. | — |
| C5 | Belief/gossip records (Talk of the Town). Facts as (subject, predicate, source, confidence, timestamp); exchanged on contact; allowed to mutate and decay into misinformation. | No shipped game has this — it is the differentiator. | Gossip propagation latency matches the graph-theoretic prediction. |
| C6 | Player-memory salience log — Generative-Agents retrieval with the LLM removed. Fixed-point recency × importance × relevance picks which memory a greeting references. | Players heavily overweight “she remembered.” | — |
| C7 | Festivals as calendar-driven schedule overrides. | Near-zero cost, top-tier perceived community. | — |
| C8 | Village economy lite — job → integer produce/consume flows into stockpiles; cross-multiply for scarcity ratios, never divide (our own banked truncation law). | Songs of Syx proves this is CPU-cheap. | — |
| C9–C10 | LLM planning and dialogue (gated behind C1–C8). Nightly planning and reflection during village sleep — a constrained schema validated by classical code, the exact inZOI pattern at 0.5B — then conversation-time dialogue at 3B on the GPU path, prompt built only from verified classical state (Rule 4), with template fallback on timeout. | Our bit-exact integer inference makes these deterministic and replay-safe, which no shipped engine has. | — (gated: C1–C8 complete first) |
PHASE D — the graphics climb (each rung funds the next)
| Rung | What | Why here | Exit criterion |
|---|---|---|---|
| D1 | Blue-noise + temporal reprojection infrastructure. | No direct visuals; it is the substrate the whole industry is built on. Our world is static and grid-aligned, so reprojection is trivial. | — |
| D2 | Temporal upscaler (TSR-lite). Render 480×300 jittered, accumulate to 2× with neighbourhood rectification. | The single biggest image-quality jump available. | — |
| D3 | Ray-traced AO + specular occlusion. | Teardown proves this alone delivers the “next-gen voxel” look with no GI at all. | — |
| D4 | 64-tree child masks + NAADF-lite per-cell distance caches. All integer, popcount-driven. | 3–5× ray throughput. | — |
| D5 | Radiance cascades diffuse GI — screen-space first (the PoE2 configuration), then sparse world-space probes per Split Radiance Cascades (Jul 2026). | The flagship. Noiseless, cost independent of light count, rays are our existing integer DDA. | — |
| D6 | SVGF-lite à-trous denoiser + 1-bounce stochastic specular. | — | — |
| D7 | ReSTIR-DI-lite / MegaLights-style many-light sampling — reservoirs in MRT textures, Q16 fixed-point weights. | — | — |
Budget frame: 16.6 ms at 60fps; after D1–D4 primary trace should sit under ~3 ms at 480×300, leaving ~8 ms for cascades + AO + temporal, which matches PoE2's ~12 ms GI envelope on much larger buffers.
PHASE E — the style lens (anime / western / real from one simulation)
The architecture is the deliverable, not any single look. Materials carry semantics only — albedo, normal, material-ID, masks (skin/hair/metal/emissive), face-SDF. A swappable style bundle carries the look — ramp LUT, palette texture, outline width/colour, dither pattern, tonemap/grade LUT, post-stack flags. One shared lit shader plus one post chain interpret the bundle. Style switch = rebind bundle, zero shader recompiles. Total new passes over the current renderer: two.
| Rung | What | Why here | Exit criterion |
|---|---|---|---|
| E1 | Ramp-LUT cel shading. NdotL indexes a per-style 1D ramp: smooth = photoreal, 2–3 hard steps + warm terminator band = anime, flat 2-step = western toon. | — | One keypress switches all three on the same frame. |
| E2 | Full-screen edge-detection outlines on depth/normal/material-ID discontinuities; inverted-hull later for hero characters only. | — | — |
| E3 | Per-style tonemap + grade LUT. One texture swap; a Kurosawa black-and-white lens comes free. Critically: ACES is poison for flat cel fills — it darkens and hue-shifts saturated colour. Cel bodies bypass the filmic curve; only emissive/bloom get a shoulder. | — | — |
| E4 | Palette quantization + ordered dithering → pixel-art lens and an Obra Dinn 1-bit lens from one pass, with the dither pattern anchored to the camera in 3D so it sticks to the scene instead of swimming. | Integer-native; voxel-flattering. | — |
| E5 | SDF face shadow maps + hand-edited normals for hero characters. | The single biggest “reads as real anime, not just toon” upgrade. Asset labour, near-zero shader cost. | — |
| E6 | ilm-style control masks (spec intensity, shadow bias, inner-line). | ArcSys-grade control, no new passes. | — |
| E7 | Watercolour/painterly preset — edge darkening, paper granulation, UV wobble. | — | — |
Not a rung: neural style transfer. Revisit only if WebNN plus a distilled consumer v2v model reaches 60fps client-side.
3. What not to build (and why)
| Not building | Why |
|---|---|
| Nanite | solves a triangle problem we do not have |
| Hardware path tracing | — |
| DLSS/FSR themselves | tensor hardware + closed weights |
| Neural texture compression and in-shader MLPs | cooperative-vector hardware; ~10–50× too slow per texel in GLSL ES 3.0 |
| 4D Gaussian splatting for dynamic scenes | — |
| Nubis³ SDF/voxel clouds | needs compute |
| L-system crop geometry | FSPM/L-Py are research tools, not runtime (§2, rung B2) |
| Full muscle simulation | bake it into joint-driven secondary dynamics instead |
| MaskedMimic-class transformers at runtime | — |
| Cloud LLM NPCs | the evidence is uniformly against them |
| Generative world models as runtime | not runtimes — persistence is minutes, no determinism, no save states (§1) |
4. How we will know (rulers)
For NPCs there is no industry believability benchmark, so the automatable proxies are schedule coherence (nobody eats at 03:00), conversation non-repetition, gossip-propagation latency versus graph prediction, and an LLM-judge panel with its bias declared. Every rung above states a falsifiable exit criterion, and per the banked non-vacuity law each new gate must be mutation-tested — a gate that cannot fail is not a gate.