# Painterly valley assets Original broadleaf and evergreen meshes created in Blender for The Steward. Scalloped crowns, painted vertex variation, crooked forks and root flares replace the primitive tree silhouettes. Editable sources are in `art/painterly/`; `.gdignore` keeps Blender outside Godot's runtime import dependencies. The two portable GLBs use opaque geometry without textures or alpha cards. ## Rebuild and mesh budget From the project root, using Blender 5.1 and Godot 4.7: ```sh "$BLENDER_BIN" --background --python tools/art/build_painterly_trees.py "$GODOT_BIN" --headless --editor --path "$PWD" --import ``` Use the isolated Godot profile configured by `tools/quality.sh` for headless validation. Runtime consumes the GLBs directly; no mesh-extraction step is needed. Preserve their `.import` files when updating exports. | Geometry | Triangles | Surfaces | | --- | ---: | ---: | | Shared broadleaf crown | 1,236 | 1 | | Joined broadleaf trunk, forks and roots | 406 | 1 | | Complete broadleaf: four crowns plus trunk | 5,350 | 5 | | Complete conifer: boughs plus trunk | 1,580 | 2 | `tree_mesh_budget.json` records these export counts. The broadleaf GLB is 45,676 bytes; the conifer GLB is 40,836 bytes and stands 3.10 m before placement scaling. A separate temporary rebuild with Blender 5.1.2 produced byte-identical copies of both GLBs and the budget JSON. This establishes generator reproducibility with that Blender version, not identical `.blend` serialization across versions. `StylizedTree` shares imported meshes and isolates crown tint/wind materials. Its four direct `Canopy*` children retain the existing thinning and stump presentation contract. `PainterlyConifer` shares imported bough/trunk meshes. Both use the same world-direction breeze and explicit painted bark colors; neither adds simulation state, collision or per-frame GDScript work. ## Painted sky provenance `painted_sky.png` is an original 1774 × 887 image generated with the built-in ImageGen tool, rather than a CLI generator. The prompt asks for a painted cumulus panorama with warm ivory cloud tops, cool turquoise cloud shadows and a clear blue summer atmosphere. Film references informed the color and mood; no external film image was copied into the texture. The exact generation prompt is recorded in [sky_prompt.md](sky_prompt.md). `storybook_sky.gdshader` maps the panorama's horizon at 69% of its height onto the upper hemisphere, repeats the painted band twice around the azimuth to retain cloud proportions, blends its seam/edge into haze, and follows the existing day/night palette. The image supplies the sky backdrop only; it does not paint terrain or create volumetric clouds. Final renderer QA and the complete project quality gate belong to the integrated environment review. See the [presentation guide](../../docs/FEATURE_PRESENTATION_PERFORMANCE.md) for current verification evidence and remaining hardware limits.