# Use low-poly scrub bush asset ## Goal Prefer the new custom low-poly scrub bush asset for scrub edge instances and validate `nantaizi-lake-innovation-valley` Blender/Cesium/preview output. The user supplied `assets/models/custom/bush_low/bush_low.glb`. The goal is to test whether using it reduces scrub bush mesh cost and improves Follow smoothness without losing scrub ground cover or breaking material tinting. ## Requirements 1. Update `blender/generate_scene.py` to prefer `assets/models/custom/bush_low/bush_low.glb` for scrub edge bushes. 2. Keep `assets/models/custom/bush/bush.glb` as a fallback if the low asset is missing or fails to import. 3. Preserve deterministic scrub edge sampling and current scrub density budget: `SCRUB_BUSH_SPACING = 1.8`, `SCRUB_BUSH_LIMIT_PER_PATCH = 60`. 4. Preserve existing material tint behavior based on material names containing `leaf`, `trunk`, or `twig`. 5. Rebuild `nantaizi-lake-innovation-valley` stages `blender,cesium,preview`. 6. Measure and report: - `SCENE_DONE.scrub_bushes` - GLB total nodes - scrub bush node count - scrub bush mesh vertex/index bytes or primitive counts from GLB digest - output GLB size 7. Do not change road/building/tree/vehicle route behavior. ## Acceptance Criteria - [ ] `generate_scene.py` prefers `bush_low.glb` and falls back to `bush.glb`. - [ ] `python3 -m py_compile blender/generate_scene.py` passes. - [ ] `python3 -m unittest blender/tests/test_pure.py` passes. - [ ] `npm run build:area -- --config config/areas/nantaizi-lake-innovation-valley.json --stages blender,cesium,preview` passes. - [ ] GLB digest confirms scrub bush nodes remain about `266` and scrub ground metadata remains present. - [ ] Task report/changelog records whether `bush_low` meaningfully reduced mesh cost and whether it is worth keeping. ## Out Of Scope - Compressing textures or changing baked material export. - Replacing the preview car asset. - Runtime LOD implementation. - Further changing scrub density unless low asset validation shows it is needed.