nishi code wiki / research / style lens
The style lens: one simulation, many art styles
SOTA census · compiled 2026-08-01 · 6 axes · ~45 sourced claims · 9 declared gaps
lineage: forked from research_rtrender parent domain: rendering goal: photoreal / anime-cel / western cartoon / painterly / pixel, switchable at runtime over ONE simulation
Claims are labelled SHIPPING / RESEARCH / ANNOUNCED / DEPRECATED. Gaps are declared UNVERIFIED rather than guessed. Engine constraint filter: WebGL2 / GLSL ES 3.0, vertex+fragment only (no compute guaranteed), integer-math core, no third-party libraries.
1. Anime / cel — the shipped technique stack
| Thing | Status | Source (date) |
|---|---|---|
| ArcSys cel stack (Guilty Gear Xrd) | SHIPPING | Motomura, “GuiltyGearXrd's Art Style: The X Factor Between 2D and 3D” — gdcvault.com/play/1022031 (GDC, 2015-03) |
| HoYo face-SDF stack (Genshin Impact) | SHIPPING | community reverse-engineering only — adrianmendez.artstation.com/projects/wJZ4Gg; github.com/NoiRC256/URPSimpleGenshinShaders; bjayers.com/blog/9oOD (2021–2023) [SECONDARY — no first-party HoYoverse publication verified] |
| Hi-Fi Rush deferred toon renderer | SHIPPING | Tanaka & Komada, “3D Toon Rendering in Hi-Fi RUSH” — gdcvault.com/play/1034330 (GDC 2024; game shipped 2023-01); 80.lv/articles/the-making-of-hi-fi-rush-s-3d-toon-rendering-style |
ArcSys (the reference cel recipe): a hard-step NdotL terminator instead of a smooth ramp; hand-edited vertex normals so the terminator falls where an animator would draw it, not where geometry says; the ilm control texture — per-channel masks for specular intensity, shadow bias (which pixels resist falling into shadow), highlight size and inner line art; and inverted-hull outlines — the mesh redrawn flipped and expanded along normals, with vertex colour driving per-region outline thickness and Z-offset. All from the 2015 talk; it remains the canon a decade later. Everything here is vertex+fragment only — no compute anywhere in the stack.
HoYo (anime faces at scale): a plain NdotL terminator looks wrong on flat anime faces, so Genshin ships pre-baked face SDF shadow maps: a texture encoding the shadow line's sweep as the light circles the head (R channel covers 0–180°, G the mirror), sampled by comparing against the facing-vs-light angle (FdotL) — the sun sweeps, and the face shadow animates along an ARTIST-authored path. Plus per-character shadow ramps (the shadow's colour is a lookup, not a multiply) and a fake-SSS warm band at the terminator that reads as subsurface scattering for free. [SECONDARY — all of this is community shader archaeology, flagged as needing verification; treat channel conventions as per-implementation.]
Hi-Fi Rush (the architectural lesson): toon rendering was decoupled from G-buffer rendering — the G-buffer carries semantics, and the style (comic shader, toon light, toon face shadows, outlines) is applied in deferred passes, with post-process volumes controlling where stylization applies. The whole world — not just characters — runs through it at 60 fps native res on UE4. This is the single most load-bearing precedent for a style LENS as opposed to a pile of per-material style shaders.
2. Western toon, watercolour, and the 1-bit dither class
| Thing | Status | Source (date) |
|---|---|---|
| Return of the Obra Dinn 1-bit renderer | SHIPPING | Lucas Pope devlogs — dukope.com/devlogs/obra-dinn/tig-31/ and tig-32/ (2017-10 / 2017-11; game 2018) |
| MNPR watercolour framework | RESEARCH (open source) | Montesdeoca et al., Expressive '18 — artineering.io/software/maya-npr; sciencedirect.com/science/article/abs/pii/S0097849317300316 (2017–2018-08) |
| The Plucky Squire 2D↔3D | SHIPPING | All Possible Futures / Devolver — en.wikipedia.org/wiki/The_Plucky_Squire (2024) |
Obra Dinn renders internally in 8-bit grayscale and converts to 1-bit in a single post pass with a tiling dither pattern. The detail that matters: a screen-space dither pattern swims the moment the camera moves. Pope's fix was to anchor the dither to the 3D camera — mapping the pattern onto a sphere around it — so rotating the view keeps dots pinned to the scene; translation still swims but is masked by full-screen change. He also moved to a blue-noise variant because it survives screen scaling and video compression far better than Bayer. The entire lens is one fragment pass plus a texture — the cheapest complete style in this report.
Watercolour has a real-time recipe with a paper trail: MNPR implements edge darkening, paper distortion/granulation, pigment turbulence and colour bleeding as viewport passes with painted per-object control parameters — i.e. watercolour is ALSO a post-stack over semantic inputs, same shape as the cel lens. Western-cartoon flat shading is the cel stack minus the anime face machinery, plus bolder outline width tables; The Plucky Squire ships full 2D-page↔3D-world switching as a core mechanic (style AND projection switch over one game state).
3. Style switching over one unchanged simulation — shipped precedents
| Precedent | What switches | Status | Source (date) |
|---|---|---|---|
| Ghost of Yotei director modes | Kurosawa: B/W grain filter over everything incl. menus + tonal audio filter. Miike: grade + tighter cinematic camera, more mud/blood. Watanabe: lo-fi score. | SHIPPING | gameinformer.com (2025-07-10); gamerant.com/ghost-of-yotei-kurosawa-miike-watanabe-mode-explained; game 2025-10-02 |
| Halo CE Anniversary dual renderer | Entire remastered graphics layer over the EXACT original 2001 engine; one-button toggle (fade in 2011, instantaneous in MCC). | SHIPPING | halopedia.org/Halo:_Combat_Evolved_Anniversary (2011-11; MCC 2014) |
| The Plucky Squire | 2D storybook renderer ↔ 3D renderer over one game state, as gameplay. | SHIPPING | en.wikipedia.org/wiki/The_Plucky_Squire (2024) |
| Minecraft + Iris shaderpacks | Hundreds of community packs restyle the SAME simulation photoreal / cel / painterly — a de-facto style-lens plugin ABI. | SHIPPING | shaders.properties (Iris docs, current 2026); github.com/IrisShaders/ShaderDoc |
Minecraft + Iris is the strongest precedent, because it runs on exactly this class of content. The shaderpack format is a fixed contract of named programs: gbuffers_* geometry passes plus deferred/composite/final fullscreen passes (up to 99 numbered composites) — and the geometry passes take vertex and fragment shaders only, no compute (shaders.properties program reference). The game engine never changes; the pack is pure data + GLSL against stable semantic buffers. Result: one simulation, an open-ended market of lenses. That IS the target architecture, proven at ecosystem scale. [synthesis: the “ABI” framing is this report's; Iris documents a format, not a contract promise.]
4. Real-time neural stylization — the honest verdict
| System | Throughput | Hardware / context | Status | Source (date) |
|---|---|---|---|---|
| MirageLSD (Decart) | 24 fps, <40 ms latency | datacenter GPUs (custom CUDA megakernels); infinite stream; 16x responsiveness vs prior | SHIPPING service | decart.ai/publications/mirage (2025-07-17) |
| StreamDiffusionV2 | 58.28 fps (14B) / 64.52 fps (1.3B) | 4x H100, no TensorRT/quant; first frame 0.5 s; 1–4 denoise steps | RESEARCH | arxiv.org/abs/2511.07399 (2025-11); MLSys 2026 oral |
| Web Stable Diffusion (MLC) | ~50 s/image measured | in-browser WebGPU, SD1.5-class, laptop-class GPU | RESEARCH | github.com/mlc-ai/web-stable-diffusion (2023-03); measurement: medium.com/@paramaggarwal (2023-11) |
| SD-Turbo in browser | ~1 s/image at 512px | in-browser WebGPU, 1-step distilled, no temporal coherence | RESEARCH | news.ycombinator.com/item?id=36766523 (2023-07) |
Verdict: a diffusion-class anime lens at 60 fps in a 2026 browser is not feasible. The 60 fps budget is 16.7 ms/frame; the best measured in-browser single image is ~1 s with a 1-step distilled model on WebGPU — ~60x over budget before adding any temporal coherence, on an API a WebGL2-only engine does not even have. The systems that DO hit real-time (MirageLSD, StreamDiffusionV2) are datacenter products: the browser could only ever be a thin client to a rented H100, which violates the sovereignty constraint outright. The feasible neural unit in-engine remains the tiny-MLP class discussed in research_rtrender — nothing diffusion-shaped.
5. Playable generative world models — impressive, and not runtimes
| Model | Res / fps | Hardware | Persistence | Status | Source (date) |
|---|---|---|---|---|---|
| Genie 3 (Google DeepMind) | 720p / 24 fps | undisclosed (research preview, not public) | few minutes horizon; ~1 min visual memory | RESEARCH | deepmind.google/blog/genie-3-a-new-frontier-for-world-models/ (2025-08-05) |
| Oasis (Decart + Etched) | 360p / 20 fps | NVIDIA H100; 47 ms inference/frame | dream-drift; “no game engine, no logic, no code” | SHIPPING demo | techcrunch.com (2024-10-31); en.wikipedia.org/wiki/Oasis_(Minecraft_clone) |
| Muse / WHAM-1.6B (Microsoft) | 300x180 / ~10 fps [SECONDARY — verify vs Nature paper] | trained on 1B+ Bleeding Edge image-action pairs | stated purpose is gameplay IDEATION, not play | RESEARCH (Nature, open weights) | microsoft.com/en-us/research/blog/introducing-muse... (2025-02-19) |
| Matrix-Game 2.0 (Skywork) | 25 fps | open weights, MIT; few-step AR diffusion | minute-level sequences | RESEARCH (open) | arxiv.org/abs/2508.13009; globenewswire.com (2025-08-11) |
| Marble (World Labs) | n/a — generates persistent worlds, not frames | cloud; exports Gaussian splats 2M full / 500k light, .spz/.ply/mesh/video | persistent by construction (downloadable asset) | SHIPPING commercial | worldlabs.ai/blog/marble-world-model; techcrunch.com (2025-11-12) |
| Waypoint-1.5 (Overworld) | up to 720p / 60 fps (self-reported) | LOCAL consumer GPUs: RTX 3090–5090; 360p tier for laptops/Apple Silicon; ~1–2B params | world-model class; open weights | SHIPPING (open weights) | huggingface.co/blog/waypoint-1-5 (2026-04-09) |
Verdict: these are not runtimes. None offers determinism, none offers save states, and the frame-generating class holds a world together for minutes at best (Genie 3: “a few minutes”; Matrix-Game: minute-level; Oasis visibly dream-drifts within one). A game runtime's first obligation — the same state tomorrow, byte for byte — is absent by construction. [inference over absence: no capability list for any of these advertises determinism or save/load; none was tested here.] Their honest role in this stack is offline asset generation — Marble already IS that product (splat/mesh export into a real renderer), Muse says “ideation” on the tin — and never the runtime. Waypoint-1.5 running 720p on a local RTX 3090 is the number to watch, not to adopt.
6. What this means for the Nishi stack
Constraint filter: WebGL2 / GLSL ES 3.0, fragment+vertex only (no compute guaranteed — same constraint Iris gbuffers passes live under), integer-math core, no third-party libraries. Everything ranked below fits it; the two NOT-adoptable classes are named at the bottom.
drawBuffers). That is Hi-Fi Rush's deferred-style lesson ported to forward, with Iris shaderpacks as the proof the bundle-as-data ABI scales to an ecosystem.| # | Technique | Payoff / cost | Exit criterion |
|---|---|---|---|
| 1 | Semantic MRT G-buffer over the forward pass (albedo, normal, matID, masks) | Prerequisite for every lens; ~1-2 wks | Every lens below reads ONLY the MRT + bundle |
| 2 | Cel lens v1: ramp-LUT step NdotL + inverted-hull outlines, vertex-colour thickness | The ArcSys core; 1-2 wks | Hard stable terminator; outline width authored per region |
| 3 | Style-resolve post pass + per-style grade LUT (ACES off for cel) | Makes switching REAL; days | Bundle rebind changes whole look, 0 recompiles, 0 hitches |
| 4 | 1-bit lens: camera-sphere-anchored dither (Bayer + blue-noise patterns in bundle) | Cheapest complete style; 1 wk | Pope's bar: rotate the camera, the dots stay pinned |
| 5 | Pixel lens: low-res target + palette-LUT quantise + nearest upscale | Days; pure post | Palette swap via bundle only |
| 6 | Face-SDF shadow maps + per-character shadow ramps (offline bake tool) | The anime-face unlock; 2-4 wks incl. baker | Light sweep animates the AUTHORED shadow line |
| 7 | Painterly lens: Kuwahara-class filter + MNPR edge-darkening/granulation | Highest per-pixel tap cost of the set | 60 fps at target res with measured ms budget |
| 8 | Style bundle ABI as data (manifest + textures), Iris-style | Turns lenses into content; opens third-party styles | A bundle authored outside the repo loads with no code change |
Not adoptable as runtime: (a) diffusion-class neural lenses — ~60x over the 16.7 ms budget in-browser even 1-step distilled (axis 4); (b) generative world models — no determinism, no save states, minutes of persistence (axis 5); their role is offline asset generation feeding the real renderer, exactly where Marble already positions itself.
Declared UNVERIFIED — do not treat as measured
- The primary source for this brief was a 0-byte transcript. The prior style-lens research agent's output file was empty (killed by the same shared web-search-cap incident recorded in research_rtrender's method note). Nothing here is quoted from it; every claim was re-verified live on 2026-08-01.
- The entire HoYo/Genshin stack (face SDF maps, shadow ramps, fake-SSS band) is community reverse-engineering. No first-party HoYoverse paper or talk was verified. Flagged SECONDARY inline.
- ArcSys ilm-texture channel semantics are from the GDC 2015 talk; exact channel assignments may differ across ArcSys titles.
- Muse/WHAM 300x180 @ ~10 fps is from secondary coverage of the Nature paper, not the paper itself. Flagged inline.
- The widely-quoted “~15 s/frame browser Stable Diffusion” figure could not be re-verified; it is bracketed here by two measured points (~50 s SD1.5-class 2023-11; ~1 s SD-Turbo 2023-07). The feasibility verdict survives anywhere in that bracket.
- Waypoint-1.5: the 720p/60 fps figure is self-reported by Overworld, not independently benchmarked; the Apache 2.0 license appears in secondary coverage but not on the HF blog page itself.
- World models lacking determinism/save-states is an inference from absence in published capability lists — none was tested hands-on here.
- The Plucky Squire's renderer architecture: no technical talk found; only product-level coverage.
- “Two added passes suffice” is this report's synthesis from the Hi-Fi Rush + Iris precedents, not a shipped measurement. It becomes measured at ladder rung 3.
Method. Rebuilt from scratch on 2026-08-01: 12 web searches + 2 page fetches + 1 sibling fetch, run serially by one agent (the five-way parallel budget race that killed the primary source was not repeated). GDC talks, devlogs and vendor blogs were treated as primary; community shader breakdowns as secondary and flagged. What would change the conclusions: a first-party HoYo publication; an in-browser diffusion measurement under 100 ms/frame; any world model shipping determinism + save/load.