Learning Blender, with and without Claude driving.
Towards an Unreal configurator, a trailer range, an asset library, and a game about camping.
beach_scene.blend. The beach, the light and the family were painted around that render in about four minutes.
Goal
- A configurator in Unreal EngineReal-time, not a web viewer. Different pipeline, different limits.
- Multiple trailer designsOne parametric base, a range off it.
- A library of 3D assets and add-onsReusable parts, licence-clean.
- A game out of campingFurthest out, and the reason the rest has to be built properly.
The trailer is the vehicle. Product development is the subject.
The work
Projects
| Project | File | State | |
|---|---|---|---|
| Trailer | trailer_day2.blend | live | 842 objects. 12 collections plus variants: 3 hitches, 3 jockeys, 3 shades, 3 showers, 3 cookers, fridge, jerrycan. Hinged doors. Awning with legs and guys. |
| Configurator | viewer.html | partial | glTF export proven, four bugs fixed. three.js viewer runs. Variants not wired in. Unreal route not started. |
| Beach still | beach_scene.blend | proven | Render the trailer, generate the rest. Four minutes. Trailer came back intact. |
| Boards | flikka.blend | partial | Breeze V2 145 in BoardCAD's kernel. Length, width, volume, OFO all land. Rocker still invented. |
| Humans | humans.blend | live | CC0 base meshes plus an MPFB2 family with verified child proportions. |
| Product exercise | sextoy.blend | 4/10 | Dimensions and grip girth right. Surfacing and control ring wrong. |
| Bridge | mcp-blender/ | done | Six hops to one. Write-up. |
Training
Four weeks, in full here. Week 1 control. Week 2 camera and light. Week 3 animation. Week 4 environments.
Day 2 added a fifth subject that wasn't planned: verification. Not "does it look right" but "what number can I check this against that I didn't use to build it".
Infrastructure
| MacPro · Blender 5.1.2 · Lab MCP add-on on 127.0.0.1:9876 | live |
| Blender MCP bridge, no dependencies, 0.25 s per call | live |
| BoardCAD headless on Temurin JDK 21, full Java source extracted | live |
| MPFB2 human generator, build 20260722 | live |
| Blender Studio base meshes as a registered asset library | live |
| Higgsfield for the generative pass | live |
This site, Vercel via cwdeploy | live |
| Tailnet SSH, now a fallback | standby |
| Unreal Engine | not started |
| Rigacar. Upstream has an open Blender 5.x issue; the fork is untested | not started |
Assets
| Asset | Licence | Commercial? |
|---|---|---|
| Human base meshes · Blender Studio | CC0 | yes |
| Coast sand textures | CC0 | yes |
| Beach HDRI | believed CC0 | unverified |
| Leaf spring, couplers, towball, jockeys, awning | CC-BY | with attribution |
| Jerrycan · Sketchfab | Free Standard | no can't ship inside a .glb |
| RAV4 | CC-NC | no demo only |
| Trailer, Breeze board | ours | yes |
Fine as a personal project. Two things must change before anything commercial ships: the RAV4 comes out, and the jerrycan can't go inside a downloadable file. Full provenance on the sources page.
Deliverable
| Dimensionally honest trailer | have it |
| Swappable variants | exist, not wired |
| Viewer, part-named, in budget | works, needs the feed |
| Unreal configurator | not started |
| Hero imagery | recipe proven |
| Multiple designs off one base | not started |
| Clean licence position | two blockers |
Failures
Full list at /failures. One cause dominates:
The data you ask for is not the data you see.
Read a transform back after writing it. Read vertex positions on a mesh driven by shape keys. Read dimensions when a modifier is doing the work. Every time, the API answered instantly and wrongly, because nothing had recalculated in between.
Cost: a jockey wheel 1.36 m out of place, an awning at double height, a hull with 9 cm of phantom rocker, three people of different sizes measuring identical. Four incidents, one root cause.
The fix wasn't to remember harder. It was to build the right measurement into a tool, so doing it correctly takes less effort than doing it wrong.
Learnings
Check against a number you didn't fit to. Exocet publish the Breeze's width one foot off the tail: 33.7 cm. It was never used to build the model. The traced outline gives 33.67. Everything else was the model agreeing with itself.
Two independent methods, or you have one guess. BoardCAD's integral said 145.00 L. Integrating the exported mesh in Python, sharing no code, said 142.57 L. The gap is the open nose and tail.
Model what must be correct. Generate what only has to be plausible. The trailer is the product and its errors are visible. The beach, the light and the family only need to be believable.
A workaround that works is the most expensive kind. The six-hop tunnel functioned, so nobody asked why it existed. It taxed every call for two days.
Put the lesson in a tool, not a document. A written rule gets forgotten. A rule built into the only convenient path doesn't.
Don't offer options you'd argue against. Presenting a slow route as a live choice isn't neutrality. It cost ninety minutes.
Day 3
- Viewport redraw on every bridge call. Day 2's work was invisible while it happened.
- Cryptomatte mask-back, so the product is exact by construction rather than luck.
- Cycles 4K, then variants. The recipe is fixed so they're nearly free.
- Wire the variants into the configurator. This is the deliverable and it's been waiting.
- Scope the Unreal route: what changes versus glTF.
- The board's rocker. Find a source or label it as having none.