08 — Blender 4.0 splash "Gaku" (Gaku Tada): how an agent could make it
| Original | Gaku Tada, 2023, stylised NPR watercolour illustration (Blender 4.0 splash) · 80.lv · .blend, CC-BY-SA |
| Agent-readiness today | Taste-bound. Every mechanism in the shipped file is declarative and reachable through the live bridge today: GN tree and vine generators, Solidify inverted-hull outlines wobbled by a Displace modifier, Shader-to-RGB toon shaders with noise breakup, EEVEE, and a compositor with lens distortion and film grain. What makes it a Gaku Tada image is composition, palette, and where each soft edge goes. |
| Difficulty | 2 for the technique (one still frame, all declared). 4 for an image that would stand next to the original. |
| First slice | A small painterly diorama (a hill, a cottage, three GN-generated trees) rendered at the splash’s 2:1 aspect: outlines made as wobbly inverted hulls, toon-banded watercolour shading with noise, and a lens-distortion and grain comp. Next to it, the original splash rendered headless as the reference. |
1. What the original actually is
Section titled “1. What the original actually is”- Deliverable: one still illustration, the Blender 4.0 splash screen (Blender 4.0 released 7 Nov 2023). The scene file is published on blender.org’s demo-files page as “Blender 4.0 – Gaku, by Gaku Tada, 32 MB, CC-BY-SA”.
- Local census of the published file (downloaded to the session scratchpad and opened headless in 5.2.2 with
--factory-startup --disable-autoexec, 2026-10-07):
| Measure | Value |
|---|---|
| Scene / engine / resolution | Splash-Gaku-Tada, EEVEE, 4000 × 2000; Filmic, Medium High Contrast |
| Objects | 262 meshes, 5 curves, 1 light, 1 camera, 0 Grease Pencil objects |
| Faces | ~925k base mesh faces; 1,536 instances after evaluation |
| Modifiers | 88 Geometry Nodes, 46 Solidify, 46 Displace |
| GN groups in use | Auto Smooth ×60, DP-TreeGen ×23, DP-VineGen ×5, plus DP-FacePoints, DP-WavyAnimation, DP-ZRotation |
| Shader groups | DPM, DPM.001….012, DPMLeaf×5, Outline×9, LeafOutline×4, SkyPaint |
| Outline hulls | all 46 Solidify have flip normals on, material offset 1, thickness −0.015 to 0.04; each is followed by a Displace with a Clouds texture at strength ±0.01–0.3 |
DPM internals |
Shader-to-RGB, Diffuse BSDF, Ambient Occlusion, Voronoi/Noise, ColorRamps, Mix; materials use dithered blending, vertex colours and Fresnel |
| Compositor | Render Layers → Lens Distortion → Film Grain group → Mix |
| Grease Pencil traces | 23 GP materials (dots and line styles with textures such as spray01.png, Texture_13.png), 1–2 users each, but no GP object in the scene |
- What this shows: the published splash is mesh-plus-shader NPR built with Gaku Tada’s Deep Paint toolkit (the
DP-prefixes). It is not a Grease Pencil drawing. The index entry’s “mixes Grease Pencil strokes with 3D geometry” holds for his wider body of work and for his GP brushes and materials, but not for the distributed scene. Either GP layers were removed before publishing or GP was never in the final frame. I could not determine which.
2. How the humans made it
Section titled “2. How the humans made it”| Stage | Fact | Interpretation |
|---|---|---|
| S01 Modeling | Simple meshes; vegetation generated by DP-TreeGen and DP-VineGen GN groups (local census) |
Hand-placed blocking plus procedural foliage |
| S03 Shading | Toon/NPR stack: Shader-to-RGB → ramps → noise-broken edges; inverted-hull outlines via Solidify with a Clouds-texture Displace that makes the line “wobble” (census) | The watercolour feel is the noise breakup, the soft dithered alpha and the wobbling outline |
| S04 GN | 88 GN modifiers, 60 of them just Auto Smooth (census) | The 4.1+ auto-smooth migration accounts for most of them. The creative GN is the 28 tree and vine instances. |
| S09 Rendering | EEVEE at 4000×2000, Filmic Medium High Contrast (census) | Real-time feedback mattered to him: “Real-time response is one of the most essential factors” (80.lv interview) |
| S10 Comp | Lens distortion + grain (census); “simple grading with Vignette effect is what I prefer” (interview) | Grain and slight distortion “settle the sharpness of CGI artifacts”, in his own words |
| S12 GP | GP is his signature tool elsewhere (“I use Blender with a Grease Pencil tool”, interview; #greasepencil, BlenderNation) | In this file GP survives only as material and brush leftovers (census) |
3. How I would make it: the agent-native plan
Section titled “3. How I would make it: the agent-native plan”| Stage | Agent approach | Inputs (free) | Tooling |
|---|---|---|---|
| S01 | Blocking meshes as data (hill, cottage, path) like demo 001; low poly | none | bridge |
| S04 | Tree generator as a declared GN recipe: trunk curve → Curve to Mesh with radius falloff; leaf clusters = icospheres instanced on branch tips with random scale; a seed input. This is the agent’s own DP-TreeGen equivalent, not a copy of his group. |
— | GN via Python node API |
| S03 | Painterly shader: Diffuse → Shader to RGB → 3-stop ColorRamp (shadow, mid, light) → mix with a Noise texture in object space for pigment breakup → dithered alpha edges. Per-object palette as a material input. | palette from the brief | EEVEE |
| S03 outlines | Declared inverted hull: Solidify (flip normals, material offset 1, thickness 0.02) then Displace (Clouds, strength 0.02) with a back-face-culled dark material. Exactly the pattern counted in the census. | — | modifiers |
| S12 (optional) | Accents as stroke data: scattered dot strokes (GP “DOTS” material with a spray texture) for pollen, rain or petals, positions sampled from mesh surfaces | — | add_strokes |
| S09 | Sun plus world colour; Filmic or AgX with a contrast look; EEVEE at 128 samples | — | EEVEE |
| S10 | Compositor tree as data: Lens Distortion (dispersion small), grain (noise mix at a few percent), vignette | — | compositor |
Build order
- Write the assertions (section 5).
- Block the scene, then the camera at 2:1.
- Declare the GN tree recipe and instance it 3 to 5 times with different seeds.
- Build the shader group, then the outline hulls on every object.
- Lighting, comp, render.
- Render the original splash headless at the same 2:1 framing for side-by-side reference metrics.
4. What works today vs. what needs newblender
Section titled “4. What works today vs. what needs newblender”- Works today with the live bridge:
- Every mechanism in the census. Modifiers, GN trees, shader node trees and compositor trees are all writable from Python. Demo 001 already proved declared modifiers and render plus screenshot through the bridge.
- Opening the reference safely and measuring it headless (done above).
- Stroke data for GP accents (
add_strokes, 0.04 s for 12.8k points, probed).
- Painful today:
- Building node trees from Python is verbose. A 120-node
DP-TreeGen-class group is hundreds of lines ofnodes.newandlinks.new. L-006 argues that the recipe should be the stored, diffable artefact;nodebpy-style nodes-as-code would shrink it. - Status, not result (L-003): adding a GN modifier returns nothing about the geometry produced. Instance and face counts must be re-queried from the depsgraph, as the census script did.
- Brush-painted GP (his usual hand) is an event-stream stroke operator (L-009). Its poll is False headless.
- Building node trees from Python is verbose. A 120-node
- Not feasible today: nothing mechanical. The limit is the art.
5. Verification plan (RFC 0001 R6, six layers)
Section titled “5. Verification plan (RFC 0001 R6, six layers)”| Layer | Check | Threshold |
|---|---|---|
| 1 Validity | Meshes before modifiers: manifold, outward normals, no loose verts (demo 001 checks) | 0 failures |
| 1 Validity | Render contains no NaN and no fully black or white frame | 0 bad pixels; mean luminance 0.25–0.75 |
| 2 Spec | Aspect ratio and resolution | exactly 2:1; ≥ 2000×1000 |
| 2 Spec | Every visible mesh has an outline hull: Solidify (flip normals, material offset 1) followed by a Displace | 100% of objects in the “paint” collection |
| 2 Spec | Trees from the GN recipe, with distinct seeds | ≥ 3 instances; all seeds unique |
| 2 Spec | Shading is banded, not smooth: distinct luminance plateaus on a lit sphere test object | 3 ± 1 clusters (k-means on the object’s pixels) |
| 2 Spec | Render budget | EEVEE ≤ 30 s at 4000×2000 on this Mac |
| 3 Reference | Technique parity with the original: same modifier pattern (Solidify flip + Displace Clouds), Shader-to-RGB present, comp has Lens Distortion + grain | all 4 present (structural compare against the census) |
| 3 Reference | Palette distance between the agent render and the original splash (mean ΔE2000 of 8 k-means colours, matched) | ≤ 15. This is a style neighbourhood, not a copy. |
| 4 Downstream | Reusable: the tree recipe and the shader are each one group with exposed inputs (seed, palette), and the asset can be appended into a clean file and renders the same | appended render SSIM ≥ 0.98 against the source scene |
| 5 Appearance (warning) | Vision model: “watercolour / hand-painted storybook” vs. “toon CG”, rated against the original and two other Gaku Tada images | warn if below 3 of 5 |
| 6 Taste (owner) | Would this pass as a splash? Composition, light, focal point | owner |
6. Where the human is still needed
Section titled “6. Where the human is still needed”- Composition: where the eye lands, negative space, the S-curve of the path. The original’s charm is placement, not the shader.
- Palette and value design: a ΔE number can say “near”, but not “beautiful”.
- Hand marks: any brush-painted GP accent in his style is his hand. Copying his specific brush textures (CC-BY-SA in this file) would need attribution, and arguably shouldn’t be the goal.
- Deciding when it’s done. A still image is judged in one glance.
7. Effort
Section titled “7. Effort”- First slice (live demo, ~1 day): on screen in the owner’s Blender:
- A grey hill and a box cottage appear, then three trees grow from the GN recipe as their seeds are set.
- Switching to rendered view, flat CG turns into banded, noise-broken colour patches. Then every object gets a dark, slightly wobbling outline as the Solidify-plus-Displace hulls are declared.
- Camera view at 2:1, comp on: a slight barrel distortion and grain.
- A side-by-side PNG of the agent frame and the original Gaku splash (rendered headless from the CC-BY-SA file), plus the check report.
- Full reproduction:
- Agent: a portfolio-grade original image in this style is roughly 15–30 agent-hours (tooling plus iterations).
- Compute: minutes of EEVEE.
- Human: 3–10 hours of art direction, mostly composition and palette passes.
- A literal re-render of the published file is trivial; it is CC-BY-SA, so credit is required. That is not “making” it.
8. Risks and unknowns
Section titled “8. Risks and unknowns”- The GP question. It is unknown whether the final splash used GP layers that were stripped from the public file. The census describes the published file only.
- Version drift. The file is from 4.0 and opened in 5.2.2. Material blend modes (dithered), Auto Smooth groups and the compositor all migrated. The world volume shader raised a conversion warning, and the
Film Graingroup contains oneNodeUndefinednode, so the reference render may differ from 4.0’s. - Vision models are weak at judging “painterly” (R6 layer 5), so treat that layer as a weak signal.
- Licence: CC-BY-SA. Anything derived from his node groups inherits share-alike; build our own recipes instead.
9. Sources
Section titled “9. Sources”- 80.lv: Blender 4.0 to feature Gaku Tada’s illustration (fetched)
- BlenderNation: Blender 4.0 splash screen revealed (fetched: hybrid 2D/3D, #DeepPaint, #greasepencil)
- 80.lv: Creating digital masterpieces in Blender (Gaku Tada interview) (fetched: GP tool, real-time, grading and vignette quotes)
- 80.lv: watercolour trees with Deep Paint and Grease Pencil (fetched: Deep Paint is his add-on)
- blender.org demo files: Blender 4.0 – Gaku, CC-BY-SA, 32 MB and the .blend itself (downloaded to the session scratchpad, not to
~/newblender-data; census run headless 5.2.2) docs/discovery/ledger.mdL-003, L-006, L-009; RFC 0001 R6; bridge:tools/live/bl.py,snap.py, demo 001 report