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

HEADLINE — the game itself is healthy; the defect is in front of it, not in it. 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:

The one real defect is not in the game — it is in front of it. Interleaved same-moment sampling:

endpointOKhard-failrate
https://nishifamily.com/world/craft (:443)3911~22% fail
https://nishifamily.com:8443/world/craft5000%

~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

axiswhat existshonest gap
Renderinginteger 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 148critic saturates — no headroom left on this ruler. capability_level_permil 140–175 (CLAY) on the perceptual axis. No temporal reuse, no GI, no denoiser
World128×48×128 window streaming over unbounded land, caves, depth-ordered ores, biome banding, 8192-slot absolute-coord edit journalno seasons, no day/night, no soil state, no water cycle
Physicsplayer gravity/jump/step/swim, nx_collide2d swept continuous (8/8, mutation-proven), nx_softdyn general secondary-dynamics solver 7/7softdyn is not bound to any geometry — nothing visibly jiggles. No ragdoll, no active ragdoll, no IK
NPCs/bodiesNXA 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 NPCsminds are a design cardinal only — unbuilt
Behavior20-bit appearance genome, inherited bold↔shy personality bits, WANDER/SOCIALIZE/REST/FORAGE/FLEE, meet/disguise/wardens, daughters field-crossed from parentsno needs, no schedules, no memory, no gossip, no economy
Weatherdrifting cloud plane, gradient sky, projected sun, fog, water shimmerno rain, no snow, no seasons, no day/night, no wind
Animals12 humanoid mobs, terrain-following, player-curiousno fauna, no husbandry, no herds
Stylessilhouette outlines, DAZ-cue skin, VN sprite compositorno NPR/cel pipeline at all
Savev6 image, atomic, corrupt/version refuse, localStorage + native, survives reloadwas 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

Ordered by payoff-per-cost, with a measurable exit criterion per rung. Rungs inside a phase are parallelizable; phases are ordered because later ones consume earlier infrastructure. Cells marked “—” are deliberately left where the source states no criterion, rather than inventing one.

PHASE A — make it real (the foundation everything else consumes)

RungWhatWhy hereExit criterion
A0Public 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.
A1Time. 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.
A2Sky (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.
A3Coarse-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.
A4Bind 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

RungWhatWhy hereExit criterion
B1Soil 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.
B2Crop 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.
B3Global 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.
B4Seasonal 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.
B5Animal 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.
B6The 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.

RungWhatWhy hereExit criterion
C1Needs + 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.
C2Daily 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.
C3Thought/mood ledger (RimWorld). Signed integer thoughts with TTL decay; sum = mood.“Why is she sad?” has an inspectable answer.
C4Pairwise opinion matrix. Trait-gated, not merely trait-modified.CK3's documented weakness is that opinion arithmetic swamps personality.
C5Belief/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.
C6Player-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.”
C7Festivals as calendar-driven schedule overrides.Near-zero cost, top-tier perceived community.
C8Village 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–C10LLM 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)

RungWhatWhy hereExit criterion
D1Blue-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.
D2Temporal upscaler (TSR-lite). Render 480×300 jittered, accumulate to 2× with neighbourhood rectification.The single biggest image-quality jump available.
D3Ray-traced AO + specular occlusion.Teardown proves this alone delivers the “next-gen voxel” look with no GI at all.
D464-tree child masks + NAADF-lite per-cell distance caches. All integer, popcount-driven.3–5× ray throughput.
D5Radiance 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.
D6SVGF-lite à-trous denoiser + 1-bounce stochastic specular.
D7ReSTIR-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.

RungWhatWhy hereExit criterion
E1Ramp-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.
E2Full-screen edge-detection outlines on depth/normal/material-ID discontinuities; inverted-hull later for hero characters only.
E3Per-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.
E4Palette 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.
E5SDF 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.
E6ilm-style control masks (spec intensity, shadow bias, inner-line).ArcSys-grade control, no new passes.
E7Watercolour/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 buildingWhy
Nanitesolves a triangle problem we do not have
Hardware path tracing
DLSS/FSR themselvestensor hardware + closed weights
Neural texture compression and in-shader MLPscooperative-vector hardware; ~10–50× too slow per texel in GLSL ES 3.0
4D Gaussian splatting for dynamic scenes
Nubis³ SDF/voxel cloudsneeds compute
L-system crop geometryFSPM/L-Py are research tools, not runtime (§2, rung B2)
Full muscle simulationbake it into joint-driven secondary dynamics instead
MaskedMimic-class transformers at runtime
Cloud LLM NPCsthe evidence is uniformly against them
Generative world models as runtimenot runtimes — persistence is minutes, no determinism, no save states (§1)

4. How we will know (rulers)

The current critic saturates at 1000 and we score 983 — it is exhausted as an instrument and cannot rank us against Veloren. Before claiming further rendering progress we need a higher-ceiling critic or an independent judge; otherwise we are optimising a ruler that can no longer move.

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.