Optional valley broadleaf billboard rendering
AlpineFirAssets.Far(..., winter:false, broadleaf:true) now routes through the existing spatially batched whole-tree GPU billboard path. Root owns tree placement and Canopy selection; this change only supplies the rendering option. Existing calls retain broadleaf=false. The Material(bool) and Card(int,bool) reflection contracts remain unchanged. A winter/broadleaf combination is rejected because no winter source atlas exists.
The source is the approved four-view CPU beauty atlas in ArtSource/Alps/ValleyTreeAtlasStudy. Its original mesh is the adapted Poly Haven Tree Small 02, by Rico Cilliers, CC0-1.0; exact source/map hashes and original source/license links are in the atlas manifest. It is a fictional valley broadleaf adapted from a Burkea-africana-inspired model, not botanically exact Alpine beech/oak. Sparse crown structure and baked lighting remain; this is not a photorealism acceptance.
The byte-identical runtime atlas is Resources/Textures/ValleyCanopy_color, SHA-256 acdff535181c84e381afc45c3c56f452afa56987255d95af7f5b8ffb95cf4221, 2,071,726 bytes, 2048² straight RGBA. Its importer follows the existing fir contract: sRGB, alpha transparency, mipmaps with coverage preservation at cutoff 0.24, Clamp, 2048 import limit. The later native run below renders the atlas, but its exact imported compression format is not explicitly logged. Edge mips and all ground contacts are not comprehensively accepted.
The actual model height is 4.6326591205 m; the square photographic frame is 6.2411653900 m, with bottom zero. Quad width and height each use targetTreeHeight / sourceHeight, preserving the source's top padding rather than adopting the narrow fir aspect. Four variants select top-left/top-right/bottom-left/bottom-right atlas cells. Each tree uses 4 pivot vertices and 2 triangles; UV1 carries metre offsets. CPU bounds enclose all cylindrical billboard yaw angles. A broadleaf material/cell is separate from fir/winter cells. The shader, cutout/motion passes, keywords and authored EV13 BakeGain are shared; there is no new collider or per-tree GameObject.
MaterialLibrary retains a representative BroadleafImpostor material. Materials and the imported texture follow the existing bounded shared-source cache policy; generated batch meshes belong to GeneratedWorldResources. This is not an added streaming architecture.
Verification and limits
- The offline geometry report confirms the entire original fir quad construction is unchanged, ignoring whitespace, and the old reflection signatures and material settings/keywords remain intact.
- Four variants, seven physical heights and 5-degree yaw steps pass 8,176 expanded-corner bounds checks. Atlas UVs match the authoring manifest, all four trunk feet have zero source pixel gap, and opaque heights match within two atlas pixels.
- Managed compilation: 98 Runtime + 22 Editor files, zero warnings/errors. No Unity or Player was started by this implementation task.
- Before-edit sources are archived outside Assets. The integration manifest records before/after source and asset hashes. Atlas/model authoring files are unchanged.
The source preview was inspected; its asymmetric crown and exposed trunks are visible. The subsequent Root-controlled native population and appearance review is recorded below; it does not establish the requested final forest quality.
Native run, 16 September 03:12 Vienna
The 03:12 campaign report and invocation identify assembly 348E01DA07A42CE7B270B62E698A763F4F6DD254D430AD6F213CD14831E505A2. Alps01/02 passed 2/2 full solo rides, covering 7,650.4573 m / 3,115 rendered frames, with zero crashes, recoveries, missed checkpoint frames or report errors. Both stayed at 1920×1080; Intel UHD / D3D11, normal simulation time, exit 0, unchanged production profiles and no driver events. No current-build memory, Alps03, full-campaign or target-GPU acceptance is inferred.
The 03:12 Player log is compared with the 02:22 Player log, assembly 91D6BB40…. These are the main AlpineForestCanopy batches; the smaller roadside batches are separate.
| Logged population | Alps01 before → after | Alps02 before → after |
|---|---|---|
| Individual canopy trees | 77,545 → 77,545 | 107,855 → 107,855 |
| Broadleaf replacements | 0 → 21,143 | 0 → 25,870 |
| Candidate groups | 9,223 → 9,223 | 12,457 → 12,457 |
| Shared registered sites | 77,872 → 77,872 | 108,681 → 108,681 |
| Canopy material/spatial cells | 69 → 132 (+63) | 91 → 165 (+74) |
| Canopy vertices / triangles | 310,180 / 155,090 unchanged | 431,420 / 215,710 unchanged |
Large group count remains zero for both summer stages; maximum route distance remains 1,650 m. Separate smaller batches remain 120 trees / 74 cells and 134 trees / 83 cells, with zero broadleaf entries. Both RAMPAGE_ALPINE_CANOPY and RAMPAGE_FIR_BILLBOARDS now expose broadleafTrees; the renderer's counter agrees with placement selection. The source binds ValleyCanopy_color, but the log does not explicitly print the atlas name, dimensions, compression or hash. Count equality is native evidence of unchanged populations, not an independent per-position hash comparison; the source audit separately found unchanged placement/RNG order.
| Timing, single native runs | 02:22 | 03:12 |
|---|---|---|
| Alps01 average / 1% low fps | 20.901 / 8.958 | 20.861 / 8.993 |
| Alps02 average / 1% low fps | 20.030 / 9.292 | 18.749 / 8.448 |
Alps01 average changes by about −0.040 fps and Alps02 by −1.280 fps. The added material cells are a real structural cost, but these two single runs are not a controlled performance attribution: the 03:12 build also contains the separate nearby-tree colour repair, and system/render workload can vary. The figures do not prove that the billboard material split caused the entire timing difference or that performance is unchanged.
Root and the regional reviewer inspected actual 03:12 images and kept the distant mixed forest as a small improvement. The combined art result is still rejected because of the nearby broadleaf appearance; no photorealism/AAA approval follows. Root is preparing a separate second build changing only ChapterAssets.Foliage's near-tree tint from (0.72, 0.82, 0.62) to (0.43, 0.55, 0.40), retaining the corrected original texture. That later tint is not included in the 03:12 evidence, and no outcome of the pending build is claimed here. This billboard task changes neither that tint nor the nearby model.