60 lines
2.9 KiB
Markdown
60 lines
2.9 KiB
Markdown
# 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.
|