Articulate.
Articulate Lab · Day 2 · 16 Aug 2026

Learning Blender, with and without Claude driving.

Towards an Unreal configurator, a trailer range, an asset library, and a game about camping.

A family unloading a windsurf board from an off-road teardrop trailer on a beach at golden hour, awning out, RAV4 parked alongside
The trailer is modelled. Everything else is generated. Geometry, awning, hinged doors, the fridge and jerrycan inside — all from beach_scene.blend. The beach, the light and the family were painted around that render in about four minutes.
exported scene Blender render of the trailer and RAV4 on sand, rear doors open, awning deployed
Cycles-lit render out of Blender. 842 objects, doors on real hinges, awning with legs and guys.
fly-through
Day 1 camera orbit, 72 frames at 1280×720. The parametric build before the awning, doors and running gear went on.

Goal

The trailer is the vehicle. Product development is the subject.

The work

Projects

ProjectFileState
Trailertrailer_day2.blendlive842 objects. 12 collections plus variants: 3 hitches, 3 jockeys, 3 shades, 3 showers, 3 cookers, fridge, jerrycan. Hinged doors. Awning with legs and guys.
Configuratorviewer.htmlpartialglTF export proven, four bugs fixed. three.js viewer runs. Variants not wired in. Unreal route not started.
Beach stillbeach_scene.blendprovenRender the trailer, generate the rest. Four minutes. Trailer came back intact.
Boardsflikka.blendpartialBreeze V2 145 in BoardCAD's kernel. Length, width, volume, OFO all land. Rocker still invented.
Humanshumans.blendliveCC0 base meshes plus an MPFB2 family with verified child proportions.
Product exercisesextoy.blend4/10Dimensions and grip girth right. Surfacing and control ring wrong.
Bridgemcp-blender/doneSix 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:9876live
Blender MCP bridge, no dependencies, 0.25 s per calllive
BoardCAD headless on Temurin JDK 21, full Java source extractedlive
MPFB2 human generator, build 20260722live
Blender Studio base meshes as a registered asset librarylive
Higgsfield for the generative passlive
This site, Vercel via cwdeploylive
Tailnet SSH, now a fallbackstandby
Unreal Enginenot started
Rigacar. Upstream has an open Blender 5.x issue; the fork is untestednot started

Assets

AssetLicenceCommercial?
Human base meshes · Blender StudioCC0yes
Coast sand texturesCC0yes
Beach HDRIbelieved CC0unverified
Leaf spring, couplers, towball, jockeys, awningCC-BYwith attribution
Jerrycan · SketchfabFree Standardno can't ship inside a .glb
RAV4CC-NCno demo only
Trailer, Breeze boardoursyes

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 trailerhave it
Swappable variantsexist, not wired
Viewer, part-named, in budgetworks, needs the feed
Unreal configuratornot started
Hero imageryrecipe proven
Multiple designs off one basenot started
Clean licence positiontwo 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

  1. Viewport redraw on every bridge call. Day 2's work was invisible while it happened.
  2. Cryptomatte mask-back, so the product is exact by construction rather than luck.
  3. Cycles 4K, then variants. The recipe is fixed so they're nearly free.
  4. Wire the variants into the configurator. This is the deliverable and it's been waiting.
  5. Scope the Unreal route: what changes versus glTF.
  6. The board's rocker. Find a source or label it as having none.

16 Aug 2026. Everything here is measured or marked as not.