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.

HEADLINE — style is a deferred pass over a semantic G-buffer, not a property of materials. Hi-Fi Rush toon-shades an entire 3D world — characters AND environment — at 60 fps native by decoupling toon stylization from G-buffer rendering and applying it in customized deferred passes (Tango Gameworks, gdcvault.com/play/1034330, GDC 2024). Ghost of Yotei ships three whole-game “director lenses” as post/grade stacks over one unchanged simulation (Sucker Punch, 2025-10-02). Therefore: materials carry semantics only; a swappable style bundle carries the look; a style switch is a bundle rebind with zero shader recompiles, and the whole lens costs two added passes over a basic forward renderer. The counter-verdict is equally firm: a diffusion-class neural anime lens is NOT feasible at 60 fps in a browser in 2026 — the shipped real-time systems need datacenter H100s (MirageLSD: 24 fps, <40 ms; StreamDiffusionV2: 58.28 fps on FOUR H100s).

1. Anime / cel — the shipped technique stack

ThingStatusSource (date)
ArcSys cel stack (Guilty Gear Xrd)SHIPPINGMotomura, “GuiltyGearXrd's Art Style: The X Factor Between 2D and 3D” — gdcvault.com/play/1022031 (GDC, 2015-03)
HoYo face-SDF stack (Genshin Impact)SHIPPINGcommunity 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 rendererSHIPPINGTanaka & 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

ThingStatusSource (date)
Return of the Obra Dinn 1-bit rendererSHIPPINGLucas Pope devlogs — dukope.com/devlogs/obra-dinn/tig-31/ and tig-32/ (2017-10 / 2017-11; game 2018)
MNPR watercolour frameworkRESEARCH (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↔3DSHIPPINGAll 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

PrecedentWhat switchesStatusSource (date)
Ghost of Yotei director modesKurosawa: B/W grain filter over everything incl. menus + tonal audio filter. Miike: grade + tighter cinematic camera, more mud/blood. Watanabe: lo-fi score.SHIPPINGgameinformer.com (2025-07-10); gamerant.com/ghost-of-yotei-kurosawa-miike-watanabe-mode-explained; game 2025-10-02
Halo CE Anniversary dual rendererEntire remastered graphics layer over the EXACT original 2001 engine; one-button toggle (fade in 2011, instantaneous in MCC).SHIPPINGhalopedia.org/Halo:_Combat_Evolved_Anniversary (2011-11; MCC 2014)
The Plucky Squire2D storybook renderer ↔ 3D renderer over one game state, as gameplay.SHIPPINGen.wikipedia.org/wiki/The_Plucky_Squire (2024)
Minecraft + Iris shaderpacksHundreds of community packs restyle the SAME simulation photoreal / cel / painterly — a de-facto style-lens plugin ABI.SHIPPINGshaders.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

SystemThroughputHardware / contextStatusSource (date)
MirageLSD (Decart)24 fps, <40 ms latencydatacenter GPUs (custom CUDA megakernels); infinite stream; 16x responsiveness vs priorSHIPPING servicedecart.ai/publications/mirage (2025-07-17)
StreamDiffusionV258.28 fps (14B) / 64.52 fps (1.3B)4x H100, no TensorRT/quant; first frame 0.5 s; 1–4 denoise stepsRESEARCHarxiv.org/abs/2511.07399 (2025-11); MLSys 2026 oral
Web Stable Diffusion (MLC)~50 s/image measuredin-browser WebGPU, SD1.5-class, laptop-class GPURESEARCHgithub.com/mlc-ai/web-stable-diffusion (2023-03); measurement: medium.com/@paramaggarwal (2023-11)
SD-Turbo in browser~1 s/image at 512pxin-browser WebGPU, 1-step distilled, no temporal coherenceRESEARCHnews.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

ModelRes / fpsHardwarePersistenceStatusSource (date)
Genie 3 (Google DeepMind)720p / 24 fpsundisclosed (research preview, not public)few minutes horizon; ~1 min visual memoryRESEARCHdeepmind.google/blog/genie-3-a-new-frontier-for-world-models/ (2025-08-05)
Oasis (Decart + Etched)360p / 20 fpsNVIDIA H100; 47 ms inference/framedream-drift; “no game engine, no logic, no code”SHIPPING demotechcrunch.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 pairsstated purpose is gameplay IDEATION, not playRESEARCH (Nature, open weights)microsoft.com/en-us/research/blog/introducing-muse... (2025-02-19)
Matrix-Game 2.0 (Skywork)25 fpsopen weights, MIT; few-step AR diffusionminute-level sequencesRESEARCH (open)arxiv.org/abs/2508.13009; globenewswire.com (2025-08-11)
Marble (World Labs)n/a — generates persistent worlds, not framescloud; exports Gaussian splats 2M full / 500k light, .spz/.ply/mesh/videopersistent by construction (downloadable asset)SHIPPING commercialworldlabs.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 paramsworld-model class; open weightsSHIPPING (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.

The architecture, in one paragraph. Materials carry SEMANTICS ONLY: albedo, normal, material-ID, masks, face-SDF. A swappable STYLE BUNDLE carries the look: ramp LUT, palette texture, outline width/colour table, dither pattern texture, tonemap/grade LUT, post-stack flags — all data (textures + one UBO), no code. A style switch is a bundle rebind: zero shader recompiles. Over a basic forward renderer this costs two added passes: (1) an inverted-hull outline geometry pass, (2) a fullscreen style-resolve pass reading the semantic MRT (WebGL2 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.
Trap: ACES is poison for flat cel fills. Filmic/ACES-class tonemapping compresses per-channel, which darkens and hue-shifts saturated colour — bright blues drift magenta, saturated fills lose the exact flatness cel art depends on (github.com/google/model-viewer/discussions/4830, 2024; community.acescentral.com/t/high-light-fix-and-premature-desaturate/3041; Arnold added a dedicated toon hue/sat tonemap control for exactly this, help.autodesk.com Arnold 7.3.2, 2024). The tonemap is therefore a PER-STYLE bundle flag: filmic for the photoreal lens, none/luminance-only for cel and pixel lenses.
#TechniquePayoff / costExit criterion
1Semantic MRT G-buffer over the forward pass (albedo, normal, matID, masks)Prerequisite for every lens; ~1-2 wksEvery lens below reads ONLY the MRT + bundle
2Cel lens v1: ramp-LUT step NdotL + inverted-hull outlines, vertex-colour thicknessThe ArcSys core; 1-2 wksHard stable terminator; outline width authored per region
3Style-resolve post pass + per-style grade LUT (ACES off for cel)Makes switching REAL; daysBundle rebind changes whole look, 0 recompiles, 0 hitches
41-bit lens: camera-sphere-anchored dither (Bayer + blue-noise patterns in bundle)Cheapest complete style; 1 wkPope's bar: rotate the camera, the dots stay pinned
5Pixel lens: low-res target + palette-LUT quantise + nearest upscaleDays; pure postPalette swap via bundle only
6Face-SDF shadow maps + per-character shadow ramps (offline bake tool)The anime-face unlock; 2-4 wks incl. bakerLight sweep animates the AUTHORED shadow line
7Painterly lens: Kuwahara-class filter + MNPR edge-darkening/granulationHighest per-pixel tap cost of the set60 fps at target res with measured ms budget
8Style bundle ABI as data (manifest + textures), Iris-styleTurns lenses into content; opens third-party stylesA 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

  1. 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.
  2. 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.
  3. ArcSys ilm-texture channel semantics are from the GDC 2015 talk; exact channel assignments may differ across ArcSys titles.
  4. Muse/WHAM 300x180 @ ~10 fps is from secondary coverage of the Nature paper, not the paper itself. Flagged inline.
  5. 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.
  6. 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.
  7. World models lacking determinism/save-states is an inference from absence in published capability lists — none was tested hands-on here.
  8. The Plucky Squire's renderer architecture: no technical talk found; only product-level coverage.
  9. “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.