Berry bushes (Classic vs New)
Berry bushes in the test build, Classic vs New.
The new trees, plants, berry bushes and water, and the tree-size choice. Newest first.
Berry bushes in the test build, Classic vs New.
In the test build: Classic vs New.
Felling in a forest, Classic vs New: trees fall as themselves and leave a stump sized to the trunk.
Night and rain, Classic vs New: the wet look on the new trees.
In the test build: Classic vs New.
In the test build: Classic vs New.
In the test build: Classic vs New.
In the test build: Classic vs New.
Water in the test build, Classic vs New.
TREES, PLANTS, BERRY BUSHES AND WATER - INSTALL REPORT 2026-11-10, local file: PrimevalMirror only, nothing committed Presentation only. RulesRevision stays 121; no NetProtocol, save or replay change; no file under Simulation/ or WorldGen/ changed. Map generation and placement unchanged: MapGeneratorTests 6/6, MapLayoutTests 59/59, EdgeScenery/GroundLayer "the simulation never sees" pins pass. Tree positions, walkable cells, resource amounts, collision, chopping and felling rules untouched. WHAT A PLAYER SEES (Settings > Graphics "Trees and plants: New", the default) Temperate: the owner-approved Rev02 conifers upgraded (same faces: crown lifted, thick flared trunk, light tops / dark undersides, soft cone shading) in their own palette; 11-02 kit oaks (oak_a, oak_b) in place of the MegaKit lime blobs; the owner's cycad and tree fern kept. Undergrowth: bracken, round bush, hazel. Snow: the same conifers in a snow palette - snow on the tier tops, dark spruce green underneath (no white-on-white frost shader). Frost fern, juniper, frost shrub. Desert: date palms (cycad slot), dry fan palms (tree-fern slot), acacias (broadleaf slot) - no more lush jungle on sand. Agave, dry scrub, cactus out on the sand. Tropic: the owner's cycad and tree fern kept; jungle giant, canopy tree and coconut palm in place of MegaKit. Ground fern, bromeliad, small bush, big-leaf shrub. Volcanic: ash-toned conifers, charred trees (two), and broken snags with glowing ember cracks; ash fern, ash shrub, ember bush (no bright green fern clumps on ash). Every new tree takes its own slight tint (value 0.86-1.08, warmer/cooler), sways from its own base, gets the wet look in rain, fades see-through in front of units, falls as itself and leaves a stump sized to its trunk. Bigger trees (owner's follow-ups): one drawn size per family per map type, default conifer 1.2, broadleaf 1.22, palm 1.15 (Resources/SceneryV2/<Biome>.asset ConiferScale / BroadleafScale / PalmScale; -treeScale X overrides all for A/B). Berry bush v2 (owner approved today): new bushier bush, berries in the leaves; full while more than half is left, half picked below that, picked clean when empty (never regrows); 35% of bushes all purple, the rest red and purple; snow version with snow on the tops only; no frost or desert darkening on it. Classic draws today's bush exactly. Grass tufts: same meshes; on the new ground they are kept off paths, yards and trodden ground and their roots take the new ground's colour (blade/tip colours from the meadow layer on grass maps). Water ("Water: New"): colour deepens over ~3-4 m from the bank (distance-field bake), shallow rim leans to the bank, thin soft continuous shore line, half the ripple light/dark swing, rougher and a touch darker in rain; per map type: teal (temperate/desert), clearer teal (tropic), cold steel blue (snow), grey-green (volcanic). Same quad, one draw, no new textures beyond the bake. Tar unchanged. THE SETTINGS: two rows, mirroring "Ground": Settings > Graphics "Trees and plants New / Classic" and "Water New / Classic" (default New, saved as PlayerPrefs Primeval.Settings.PlantStyle / WaterStyle, "(next match)" while different from the world on screen). Two rows, not one "Scenery" row: the owner can keep one and drop the other, and A/B each. Command line: -treeStyle classic|new, -waterStyle classic|new, -treeScale X. Classic = today: Classic stills vs today's player at the same spots differ by 0.02-0.42 of 255 mean (wind motion; local file: classic_vs_today.txt). PERFORMANCE (test player, 1600x900, frame rate capped ~172 fps so GPU ms is the real measure; numbers in local file: numbers_*.txt) Forest view (tree_wind forestperf, ~2,600 trees drawn), two runs each: Classic: 168/167 fps, GPU 5.78/5.80 ms, CPU 2.26/2.29 ms, colour 5.54 M tris, shadow 6.25 M tris/pass New: 172/172 fps, GPU 3.89/4.11 ms, CPU 2.62/2.70 ms, colour 5.47 M tris, shadow 3.07 M tris/pass Close forest (16 m): Classic GPU 5.44 ms, 3.64 M / 5.51 M; New GPU 3.54 ms, 3.06 M / 4.24 M. Per map type, densest wood held (two runs; GPU ms, colour M tris, shadow M tris), Classic -> New: 34 m temperate 5.73/5.46 -> 3.05/3.12, 3.08 -> 2.97, 3.36 -> 1.55 110 m temperate 4.72/4.48 -> 3.81/3.65, 4.19 -> 3.67 snow 5.14/4.88 -> 3.07/3.01, 2.65 -> 2.71, 2.83 -> 1.37 snow 4.06/3.89 -> 3.34/3.68, 3.35 -> 3.37 desert 5.67/5.55 -> 2.98/3.02, 2.68 -> 1.75, 2.90 -> 0.76 desert 4.54/4.00 -> 3.05/3.24, 3.83 -> 3.37 tropic 5.64/5.64 -> 3.03/3.01, 2.87 -> 2.33, 3.11 -> 2.17 tropic 4.47/4.52 -> 3.46/3.12, 4.14 -> 3.05 volcanic 5.53/5.58 -> 3.04/3.05, 3.08 -> 2.85, 3.36 -> 1.37 volcanic 4.20/4.30 -> 3.34/3.04, 4.19 -> 3.46 Ground tours (70 s, all views) GPU ms Classic -> New: temperate 4.58->3.50, snow 4.03->3.40, desert 4.37->2.86, tropic 4.72->2.98, volcanic 4.55->3.10. New is faster on the GPU everywhere. Two honest exceptions: snow colour triangles are 1-2% higher (the snow conifers keep Rev02's 2,004/823 faces and the bigger drawn size), and CPU main thread: back-to-back runs on a quiet machine New 2.47 / 3.83 / 2.36 / 3.67 ms vs Classic 2.37 / 3.74 / 2.32 / 3.72 (temperate 34, 110, snow 34, 110): +0.1 ms at most (the detailed-tree split and extra caster batches); earlier rounds showed up to +0.4 ms while the machine was busier. Bigger trees: their LOD switch distance grows with the family size, so the drawn size costs no extra full-detail trees (without that the forest view was 5.60 M colour tris; with it 5.47 M). Overdraw: GPU still 1.7-2.7 ms under Classic. Memory: texture memory 1,204-1,207 MB both; Unity reserved 1,062-1,076 MB both; allocated within +-10 MB. New scenery adds ~6.7 MB of FBX source, one 1024 atlas + emission, three 256 palettes; one map type's library loads per match. Load: forest build 10-14 ms New vs 13-17 ms Classic; world build +10-40 ms New (tuft ground bake, water depth bake, undergrowth batches): e.g. desert 110 m view 275 -> 309-419 ms (one busy run), tours 278-325 -> 305-396 ms. Berry patch views: GPU 3.37 (New) vs 3.90 ms (Classic) temperate, 3.41 vs 3.57 snow. Each berry state is cheaper than today's (full 2,395 vs 2,778, half 1,703, picked 1,185 vs 1,290). TREE SIZE (owner's follow-up) Previews (model sizes at their own scale, 1.8 m figure): conifers 4.5-5.8 m (2.5-3.2x a person), oaks 6.1-6.7 (3.4-3.7x), jungle giant 7.6 (4.2x), acacia 4.0-4.8, charred 6.0-7.2, date palm 6.9. Game today: conifers 4.3-5.5 m (2.4-3.1x), MegaKit 5.4 (3.0x), cycad 2.6, tree fern 3.2-3.4; every tree x0.85-1.2. So the preview conifers were the game's size; the towering read came from the full-size kit broadleaves and the preview's framing (simple 1.8 m blocks, Blender lens). Full-size kit crowns (6-7.7 m wide) buried the whole temperate conifer wood in the first in-game look, so the kit trees are fitted to a ~4.6 m crown and the families scaled up together: conifers now 5.4-7.0 m (3.0-3.9x a person), oaks ~5.7 m, jungle giant ~6.3 m, date palm ~6.8 m. Against the dinosaurs (treesize sheets): a villager is well under the canopy, the tyrannosaur's head still rises a little above the canopy, the brachiosaurus towers over it. If the owner wants the T-Rex "among" the trees, try conifer/broadleaf 1.35 (one number each in the library). Guards: units behind the larger crowns show as their silhouettes and the see-through fade still opens (the fade's sight-line reach now uses the tallest tree as drawn); paths and clearings are not closed (same cells); selection ring and health bar of the tyrannosaur visible in the treesize stills. Rally lines were not checked. BERRY BUSH CHECKS Size: drawn at 0.86 of the art: half width 0.79 m on the map against today's 0.71 m (+11%), picked 0.74 m. Patches are mostly bushes a cell apart diagonally (142 bushes, 8 side-by-side pairs on the seed-7 map); like today's they touch their neighbours but no more than ~0.3 m into a next cell. Picked: duller, browner, darker (45% toward a warm grey, x0.82) - at the game camera it reads as a dark brown bush with no berries. Purple: lifted (brightness x1.35 +0.06, saturation x1.08); red brightened x1.18 too, bush tint x1.24 - purple now reads at least as strongly as red. TESTS (EditMode): related groups 249/249 pass (SceneryV2 13, TropicalTree, ConiferFamily, PlantSway, TreePerformance, EdgeScenery 29, WorldRendererCull, GrassTuft, CanopyBirds, Chop11Placement, ChopReference07/11, ApprovedChop, ResourceProps, GroundLayer 60, Ground, BiomeWeather, BiomeGrade, MapGenerator, MapLayout, Water, WaterMap, WaterSpawn, GrazerTreeProbe, WildHerdMakesWay). (The last LOD-distance edit came after that run; it compiled into the final player build.) New SceneryV2Tests: every map type resolves its families/variants; Classic resolves to today's library; overlay answers every classic key with the new model, its LOD and caster, on the ground; sway shape on every mesh; far version and welded caster on every model; triangle budgets; berry three states, schemes, footprint vs today; world lays new undergrowth only when New; settings save/load/clamp and override; family scales; water colours (snow not turquoise) and depth field. No re-pins. Known-failing groups listed in the brief were not run. SHEETS (also in local file: in_game): <biome>_classic_new.jpg x5 (base, open ground, woodland edge, edge close, 110 m, berry patch at 34 m and 12 m), water_classic_new.jpg, forest_felling_classic_new.jpg, night_rain_classic_new.jpg, berry_bushes_classic_new.jpg, treesize_temperate / treesize_tropic_classic_new1_newbig.jpg. WHERE IT FALLS SHORT OF THE PREVIEWS - Snow: far and dense snow woods (LOD1) are still mostly white; the green-under-snow shows mainly on near trees and edges. - Volcanic woods read tan/khaki at the game camera, duller than the preview's grey-olive; the snags' ember cracks help. - Desert dense woods are a near-uniform palm canopy (palms take 85% of desert slots); acacias are rare and, as the notes warned, a little sparse in the crown. - Water: streams narrower than ~6 m never reach the deep tone, so the new water mostly shows its shallow colour there; the bigger trees now hide more of the small streams in the stills. Lakes show the gradient. - Berry bushes are darker than today's at the game camera (rounder, deeper green), berries smaller dots. - Rev03 conifers were not upgraded: slots 6-8 draw the Rev02v4 models (variety from tint, size and turn). - The edge scenery / skirt uses the new models at their own size (not the family scale). - Chop placement uses each new trunk's own surface below 1.4 m (geometric, not hand-authored as the approved profile). NOT VERIFIED: low-end GPUs; 512 m / 8-player maps in a window; a real match (woodcutter axe contact on the new trunks over time, gatherers round the bigger berry bush, rally lines under big crowns); the settings rows clicked in a running game; the berry sway close up in a film; desert/tropic night or rain. FILES: changes.diff (every changed file against its start state, new files in full). Changed: ResourceRenderer.cs, WorldRenderer.cs, WorldRenderer.Edge.cs, WorldRenderer.Tufts.cs, BiomeLook.cs, PlantSway.cs, CanopyBirds.cs, DetailedTreeLibrary.cs, PresentationSettings.cs, GameSettings.cs, SettingsMenu.cs, GameBootstrap.cs, ShowcaseDirector.Ground.cs (water, berrytour, treesize stills), PlantSway.hlsl, TreeSway.shader, Water.shader. New: SceneryV2.cs, SceneryLibrary.cs, ResourceRenderer.SceneryV2.cs, WorldRenderer.Plants.cs, WorldRenderer.WaterLook.cs, Editor/SceneryV2Builder.cs (menu "Primeval/Build Scenery V2"; batch -executeMethod Primeval.Editor.SceneryV2Builder.Build), Resources/Shaders/BerrySway.shader, Tests/SceneryV2Tests.cs, Art/Trees/PrimevalV2/** (copied kit, conifer v4, berry v2 FBX, textures, materials, generated meshes), Resources/SceneryV2/<Biome>.asset x5. No ProjectSettings or material noise from my runs; the perf-test package's empty Assets/Resources folder from the player builds moved to removed. CatapultInstallTemp.cs left in place. T-REX SIZE SHEET (owner request, later): local file: trex_tree_sizes.jpg, captured from a copy of the test player (local file: player) while another worker's Unity ran tests (fps noisy; GPU ms steadier: temperate 3.56 / 3.73 / 3.70, tropic 2.87 / 3.08 / 3.21 at default / x1.35 / x1.5). -treeScale is one multiplier for every family: x1.35 and x1.5 put conifers, broadleaves and palms all at that size. Recommendation: x1.35 (T-Rex head about level with the canopy, villagers and buildings still visible through the fade); x1.5 starts to bury the T-Rex's body. *temperate x1.5's 145 fps came with a higher CPU time while the other Unity was busy.
A T-Rex among the trees at today's size, x1.35 and x1.5. This is the picture for the tree-size decision.
Temperate: Classic | New at today's size | New larger.
Tropic: Classic | New at today's size | New larger.
Berry bush v2 (you approved it): bushier, berries in the leaves; full, half picked, picked.
Undergrowth and berry bush: today vs proposed.
Grass tufts: today vs following the new ground.
Trees today vs proposed, per map type (Blender preview).
Water proposal: colour deepening from the bank and a soft shore line (a 2D mock-up, not a shader).
PRIMEVAL - TREES, BUSHES, BERRY BUSHES, GRASS TUFTS AND WATER: AUDIT (2026-11-10) Read-only audit of local file: PrimevalMirror (game copy) and local file: Primeval; previews made in headless Blender, staged in local file: trees_water. Nothing in the game was changed. SHORT VERSION - What exists: the game draws the owner-approved Rev02/Rev03 conifers (2,004 / 823 tris), the owner-approved tropical cycad and tree fern (1,406-1,732 / 616-779), and the bought MegaKit broadleaf (CommonTree 1-5, 3,182-6,265 / 1,770-3,223) in place of the simple broadleaf. The same models are used on every map type, with only a few tints. - The 11-02 tree style: the owner approved round 1 ("It's perfect"). Round 2 was built the same day: kit v2, 48 models for all five map types, in local file: v2 (FBX LOD0/LOD1/Shadow, one 1024 atlas, README, overview sheets). It stopped there. It was never imported, there is no Tree style Classic/New setting, and no preview map was made. The owner tracker (local file: OWNER_REQUESTS.md, 11-02 entry) still says "doing". It is not in local file: PrimevalMirror, local file: PrimevalStack or local file: Primeval. (local file: Trees Forkleaf_v001 is a single unreferenced test prefab from 11-02 and is not this kit.) - Top weaknesses: 1. Every map type has the same green woods. Volcanic is the temperate wood exactly. Desert is a lush jungle of cycads, tree ferns and lime broadleaves on sand. 2. Snow conifers are frosted white all over, so a forest is white on white and the wood disappears into the ground. 3. The conifer canopy is a carpet of crumpled, faceted triangles with yellow highlight facets and no visible trunks. 4. The MegaKit broadleaf is a flat lime blob. Its hue clashes with the conifers and the new ground. It is also the most expensive tree: about 13% of the trees drawn but about 30% of the triangles. 5. Berry bush: the half and low stages only scale the berries toward the bush base, so they sink into the leaves. In my reproduction, half looks empty and low looks picked. The picked mesh looks almost like a full leafy bush. 6. Undergrowth: the fern_clump is a spiky starfish (456 tris, up to 9,000 placed, no level of detail). On volcanic it is bright green on ash. 7. Water: one flat colour beyond the first metre, a dark ripple blotch pattern, a broken pale ring at the edge, and tropical turquoise on snow and volcanic maps. - What to do first: build the "Tree style: Classic / New" switch with the TEMPERATE CONIFER UPGRADE (the same Rev02 meshes, the same triangle count, new palette and normals) and the 11-02 kit oaks in place of MegaKit, plus snow conifers with green under the snow. That is the most-seen change, it is visible on every map, and it lowers the cost. Then the per-map-type sets, the berry bush, and the water. 1. WHAT THE GAME DRAWS TODAY (code: Presentation/ResourceRenderer.cs, BiomeLook.cs, EdgeScenery.cs, WorldRenderer.cs) Choppable trees: ResourceRenderer.TreeKeys has 9 slots. - 0-2 and 6-8: conifers Rev02/Rev03 pine_a, pine_b and fir (Art/Rigs/Conifers, one 256 px shared palette with a bark column and a 4x3 swatch grid). Measured: 2,004 / 823 tris, fir 1,956 / 823. Separate welded shadow casters: _Shadow 2,004 and _LOD1_Shadow 823. - 3: broadleaf. TrunkPolishV2 (1,896 / 874) is drawn as the MegaKit "detailed" stand-ins CommonTree_1-5, chosen by position hash at about 5.4 m. Measured: 6,265/3,223, 5,648/2,631, 3,505/2,310, 4,066/1,770 and 3,182/1,863. They use cut-out leaf cards with 2 materials. - 4: cycad FrondMidribV3, 1,406 / 616. 5: tree fern FrondMidribV3, 1,732 / 779. - Mix (PickVariant): - Temperate and Volcanic: identical. Dense woods are conifers, edges mix broadleaf, cycad and tree fern. - Snow: conifers only. - Tropic: cycad 45%, tree fern 35%, broadleaf 20%. - Desert: cycad 45%, tree fern 40%, broadleaf 15%. The desert autotest drew 488 MegaKit broadleaves. - Young conifers are drawn at 65% or 45% size. Every tree gets scale 0.85-1.2, a random turn, and a 0.25 m offset from its cell. - Level of detail: the LOD1 model is used below 80 px on screen, or 45 px for palms. Shadows go through the welded casters; off-screen margin trees cast shadows only. -treeLod / -treeProbe switches exist for A/B timing. Biome looks (BiomeLook): - Snow: conifer tint plus a frost texel (heavy snow on top), foliage recoloured, berries brightened. - Desert: bush tint, and the berries are DARKENED to (0.82, 0.62, 0.72). This works against "berries must stand out". - Tropic: bush tint. - Volcanic: nothing. - The tropical trees and MegaKit keep their own colours on every map. Shaders: TreeSway (URP Lit plus sway) and PaletteSway, both from PlantSway.hlsl. The bend grows with height and the shadow pass sways too. SeeThroughTree is used for the fade. Rain darkens the foliage and adds a sheen (OWNER_REQUESTS says 22% darker). Felled and picked: - A felled tree falls as its own model, then becomes one shared stump.fbx (416 tris, scale 0.8 + 0.3 x tree scale). Trees felled under fog stay standing until seen again. - Berry bush: bush_berry.fbx is the foliage (1,578) plus a separate berries part (1,200) in vertex colours. Berries are drawn at 100% / 84% / 68% by amount left. When empty the bush becomes bush_berry_picked.fbx (1,290). Bushes do not regrow. Undergrowth and props (WorldRenderer.ScatterGroundProps): - log_fallen 380, fern_clump 456, stones_small and bones_pile, capped at 450, 9,000, 2,400 and 160. - No level of detail. No ferns on snow, and in the desert only by water. - The edge scenery reuses the conifer and tropical keys per biome, plus flat forest masses. - There are no reed models anywhere in the game. Numbers seen this week (autotests): - Close forest (tree_wind film_close): 1,595 trees drawn, 3.63 M colour tris, 5.50 M shadow tris per pass, 121 fps in that run. - 34 m base views on the five map types: about 3,500 trees drawn, 3.06-3.79 M colour and 3.4-4.25 M shadow tris. - MegaKit is the heavy part. In the close forest it was 195 near broadleaves = 896 k colour tris and 386 casters = 1.35 M shadow tris. 2. HOW IT LOOKS (the lead's photos: local file: <biome>, local file: round3, tree_wind film_close) Reads well: - Tropic. The owner's cycads and tree ferns have crisp fronds and real character. - MegaKit trunks at the meadow edge are red-brown and solid. - Berry bushes at full read as red and purple dots on green. - The stream has a visible pale bank line. Looks cheap: - Conifer woods are a single carpet of faceted triangles with lemon highlight facets ("crumpled paper"), with no trunks and no light or dark structure between trees. - MegaKit crowns are flat, saturated lime blobs, brighter and yellower than everything around them. - Volcanic and desert look like temperate and tropic. - Snow woods are pure white cones; the forest edge does not separate from the snow. - Identical clones: one tint per family, so a wood is one colour. - On the NEW ground: the ground is now muted, textured and painterly. The vegetation is flatter and more saturated than the ground, so it looks pasted on, most of all the lime broadleaves. - I did not see rain or night photos of trees or water, so the "pale wet sheen in rain" was not judged. 3. WATER (Shaders/Water.shader, WorldRenderer.BuildWater / BuildFlowTexture) How it works today: - It is one map-sized quad at 0.07 m and one draw call. - A baked mask, 3-4 texels per cell, gives the colour and alpha. The colour runs shallow to deep over the first metre, so the inside is one flat colour; alpha is 0.62-0.86. - A flow map carries a two-phase ripple normal, so streams run and lakes lie still under a breeze ripple. - It has sun glints, sky tint at grazing angles, and foam where the mask thins plus in fast water. - Tar is drawn on the same quad. Desert quicksand is painted into the ground instead. - Per-map colours exist (WorldRenderer palettes), but all are teal or turquoise: snow 3FB8B0 to 23506B, volcanic 56C7B9 to 176C78. - No depth texture is used. Depth is only "distance into the mask", which saturates after about 1 m. Verdict: it works and is cheap. It needs modest work, not a rebuild. Most help for least cost: (a) depth graded over about 4 m from the bank's distance field, which the flow bake already computes; (b) the shallow rim tinted toward the ground under it instead of a pale turquoise ring; (c) a thin, continuous foam / wet line, and about half today's ripple brightness swing (the dark blotches); (d) a damp dark band on the bank side; (e) cold steel blue on snow, grey-green on volcanic. All of these are map-load bakes or a few ALU per water pixel, with no new draws. Not checked: night, rain and tar (no photos looked at). 4. BUSHES, FERNS AND BERRIES - Today there is no general bush in the play area, only the berry bush and fern_clump. The undergrowth reads as green starfish. - The 11-02 kit already has per-map undergrowth: bracken, round bush, hazel, big-leaf, bromeliad, frost fern, juniper, frost shrub, dry scrub, agave, cactus, ash fern, ash shrub, ember bush. Each is 84-924 tris with LOD1 at 32-476. 5. GRASS TUFTS (GrassTufts.cs, WorldRenderer.Tufts.cs, Settings > Graphics grass style) What it is: - The 11-04 painted tufts, "Clump" style by default, with Classic / Tussock / Leaf / Off options. - 3 mesh variants with 9-12 curled blades, about 33 tris a tuft. - Roots take the painted ground colour and fade up to sunlit, dry or frosted tips. Each land has its own look (forest, tropic, desert, snow, volcanic), plus flower sprigs. - Counts: 2,045-7,517 placed; 131-3,484 drawn = 4 k-114 k tris (autotests 11-09). This is very cheap. Verdict: they are decent and do not need a rebuild. Two cheap fixes would make them sit better on the new ground: (1) place them from the NEW ground's meadow weight. Today they come from the classic scatter, so they also stand on paths and bare earth. (2) take the tip colour from the ground's lighter grass instead of a fixed lime blend. A few more snow stalks would help too. I made no proposed tuft render (see grass_tufts_before_after.jpg). I did not check how bodies press the tufts. Related finding: on volcanic, the bright green fern_clump props are the most out-of-place "grass" on the ash. DELIVERABLES: trees_before_after.jpg, bushes_berries_before_after.jpg, water_proposal.jpg, grass_tufts_before_after.jpg, NOTES.txt (all here); renders, models and scripts in local file: trees_water.
NOTES - trees / bushes / berries / water proposal (2026-11-10). Previews only; nothing was imported into the game.
WHAT THE PREVIEW IS BUILT ON (owner rule: build on the existing models)
- Conifers (temperate, snow, volcanic): the owner-approved Rev02 pine_a, pine_b and fir FBX meshes are used as they
are, with the same faces. Changes:
- the crown is lifted 0.26-0.32 m so the trunk shows;
- the trunk is 1.75x thicker with a root flare at the ground (root pieces only 1.2x);
- every foliage face is re-assigned to a swatch by how much light it catches: top 38% light, middle mid, bottom
26% dark, with a column per tier for painted variation;
- normals are bent out from the trunk (a soft cone shading in place of crumpled facets);
- a new palette per map type keeps the 256 px layout (bark column plus 4x3 swatches).
The Rev03 meshes would take the same pass (not run). Script: upgrade_conifer() in
local file: tw_preview.py.
- Broadleaf, tropic, desert and volcanic broad trees: the owner-approved 11-02 style (kit v2, local file: PrimevalReviews
local file: v2) is used unchanged: oak_a/b, jungle_giant_b, canopy_tree_a, palm_coconut_a, acacia_a/b, palm_date
and charred_tree_a/b. This is the right base because the owner approved that style for every map type on 11-02.
The thing it replaces, MegaKit, is a bought kit, not an owner model.
- Kept as they are: the owner's tropical cycad and tree fern (tropic).
- Berry bush: today's bush_berry foliage mesh is used, repainted in its own vertex colours (lit tops, dark core). The
scattered berries are replaced by 9-10 clusters of six fat berries (radius 7 cm, about 1.4x life) on a small dark
leaf collar. Half picked = half the clusters left plus bare pale stalks where the others were. Picked = today's
picked mesh, yellowed and stripped, plus 9-10 bare stalks. Snow: frost on the tops only; the berries are never
frosted or tinted. Red and purple are mixed per bush, and some bushes are all purple.
- Variety in the forests: in the previews every tree takes a per-instance tint (value 0.84-1.10, hue +-0.02), on top
of scale 0.82-1.18 and a random turn. Game side, this is one instanced colour per tree, like the ore tints.
TRIANGLES: TODAY vs PROPOSED (near / far LOD1; casters)
Temperate conifer today Rev02 2,004 / 823 (fir 1,956), casters 2,004 + 823 -> same 2,004 / 823
Snow conifer same as above -> same 2,004 / 823
Volcanic conifer same as above -> same 2,004 / 823
Broadleaf (all maps) today MegaKit 3,182-6,265 / 1,770-3,223 (avg about 4,500 / 2,360)
-> oak_a 3,646 / 1,504, oak_b 2,908 / 1,198
-> tropic jungle_giant_b 2,908 / 1,198, canopy_tree_a 2,884 / 1,198
-> desert acacia_a 2,990 / 1,360, acacia_b 2,478 / 1,126
-> volcanic charred_tree_b 2,908 / 1,198, charred_tree_a 2,092 / 486
Palms coconut 1,016 / 272, date palm 1,248 / 328 (vs cycad 1,406 / 616, tree fern 1,732 / 779)
Berry bush today 1,578 + 1,200 berries = 2,778; picked 1,290
-> 1,578 + 1,134 (9 clusters, ship this) = 2,712, or 1,260 with 10 clusters; half 1,578 + about
654; picked 1,350
Ground fern today fern_clump 456 (no LOD) -> fern_ground 224 / 80, bracken 252 / 80, frost fern 196,
ash fern 192
Shrubs (new decor) bush_round 610 / 340, hazel 792 / 408, frost shrub 610 / 340, ash shrub 610 / 340, dry scrub
588 / 96, agave 124 / 36, cactus 254 / 99, juniper 603 / 267, ember bush 872 / 468, bromeliad 84 / 32
Stump, log unchanged (416, 380)
FOREST-VIEW TOTALS (estimated from the per-model counts in the 11-09 autotests; NOT measured in game)
What pays for it:
- The kit trees are cheaper than MegaKit.
- Every conifer casts its shadow through its 823-tri LOD1_Shadow, also near the camera. Today near conifers cast
through the 2,004-tri _Shadow, and near broadleaves through the MegaKit model.
- The kit trees cast through their welded LOD1.
- No triangle count goes up anywhere.
Close forest (film_close, 1,595 drawn): colour 3.63 M -> about 3.37 M; shadow 5.50 M per pass -> about 2.88 M
Temperate base view (3,465 drawn): colour 3.77 M -> about 3.27 M; shadow 4.25 M -> about 3.47 M
Tropic (3,527): colour 3.79 M -> about 2.97 M; shadow 4.23 M -> about 3.24 M
Desert (3,537): colour 3.50 M -> about 2.91 M (more if date palms replace tree ferns)
Volcanic (3,472): colour 3.78 M -> about 3.06 M
Snow (3,517): colour 3.06 M -> same; shadow 3.41 M -> about 3.24 M
Room left in the budget: about 0.3-0.8 M colour tris a view. That is enough for the new shrubs at the wood edges,
drawn without shadows and as LOD1 beyond the near ring. Ground ferns at 224 against 456 halve that batch.
The fill rate should also drop: the kit crowns are opaque leaves, not MegaKit's alpha-tested cards. This is
expected, not measured.
WHAT THE GAME SIDE NEEDS (presentation only; replays and the simulation are untouched)
1. Settings > Graphics "Tree style: Classic / New", plus a -treeStyle switch.
- Classic = today's TreeKeys, DetailedTreeLibrary and PropKeys, untouched.
- New = per-biome key tables in place of the one TreeKeys, with the same 6 slot roles and the same PickVariant
shares. Volcanic and Desert get their own sets.
2. Import the conifer_v4 FBX files and the palette for each biome under a new folder. Normals must be imported, not
recalculated, or the soft cone shading is lost.
- The snow and volcanic palettes REPLACE the BiomeLook conifer tint, frost texel and foliage recolour. Turn those
off for New, or the snow conifers go white again.
3. Import kit v2 under Art/Trees/PrimevalV2/<biome> with one shared atlas material, Render Face Both. The volcanic
models also need the emission map.
- Update TreeHeights, the chop and canopy-bird anchors, and the see-through fade radius. The kit trees are
6-8 m tall against MegaKit's 5.4 m.
4. Shadows: use LOD1_Shadow for near conifers as well (a one-line choice in the split; to A/B with -treeProbe).
5. One instanced tint per tree (a MaterialPropertyBlock or an instanced colour array, as the ore tints).
6. Stump: scale per family by trunk radius. The kit oaks' trunks are wider than today's stump. No new stump model
was made.
7. Berry bush: a new berries part plus a "half" berries part, swapped at 50% left instead of scaling the berries
toward the base. Use the picked mesh plus stalks when empty. Drop the desert berry darkening in BiomeLook.
8. Props: per-biome fern / shrub keys in ScatterGroundProps (no green fern_clump on volcanic). Use the LOD1 meshes
beyond the near ring.
9. Water: bake depth from the distance field into the mask (ramp about 4 m); tint the shallow rim toward the ground;
make the foam a thin continuous line with half the ripple brightness swing; add a damp band outside the edge; use
per-map colours (snow steel blue, volcanic grey-green). About a day of shader and bake work, with no new draws or
textures.
10. Grass tufts: place them from the new ground's meadow weight (none on paths or bare earth) and take the tip colour
from the ground. The meshes and counts stay as they are.
RISKS
- Bigger kit crowns overlap more in dense woods. The see-through fade, unit readability inside woods, and chop
standing points all need a look in a test map.
- The conifer custom normals and the swatch re-UV were not re-imported in Unity. The FBX export uses the game's
settings (kit export_fbx), but I did not check the normals survive.
- The sway has not been checked on the lifted conifer crown. The bend grows from the base, so a 0.3 m lift should
be harmless.
- Desert acacias read a little spidery from the game camera (thin branches showing between leaf clusters). The
crowns need fuller pads before shipping.
- Volcanic woods are dull at the game camera. The ash palette may need a warmer scorched accent.
- Blender lighting is not the game's (EEVEE sun plus sky, no grade, no fog, no frost shader), so colours will shift
in game.
- The "today" model panels are raw renders without the game's shaders. The "today" forest panels are the lead's
real game photos.
WHAT I DID NOT DO OR CHECK
- The Rev03 conifers were not run through the upgrade, and there is no separate tropic conifer.
- No preview of felled trees (they fall as their own model, so they would match).
- Berry-bush FBX not exported (preview geometry only). No desert, tropic or volcanic berry render.
- No reeds: the game has none, and I did not make any.
- Grass tufts: audit only, no proposed render. I did not check how bodies press them.
- Water: a 2D mock-up (numpy over the lead's ground photo), not a shader render. Night, rain and tar not checked.
- Rain wet-sheen on the vegetation not judged (no rain photos looked at).
- No in-game performance test. All totals above are estimates.
FILES
- local file: src:
- tw_preview.py (all previews);
- compose.ps1 (the sheets);
- probe_today.py (today's triangle counts);
- copies of jungle_kit.py, trees_v2.py and safe_out.py.
- local file: <temperate|snow|local file: tree_<pine_a|pine_b|fir>_Rev02v4[_LOD1].fbx,
plus conifer_v4_palette_<biome>.png and primeval_trees_atlas.png.
- local file: *.png: every render, including the LOD1 lineups and decor_new_volcanic.
- local file: probe_today.json and stats_*.json: triangle counts.
- Kit v2 models (unchanged): local file: export.
BERRY BUSH V2 (2026-11-10) - revision after the owner's verdict on the first proposal. Preview only; nothing imported. Sheet: berry_bush_v2.jpg (TODAY | FIRST PROPOSAL | V2, meadow and snow; three-quarter views and the 34 m game camera). WHAT CHANGED - A new, bushier foliage mesh (not today's mesh repainted): 11 overlapping lumpy leaf clumps (one big core, 7 around, 3 on top), a few hundred folded 2-tri leaf cards over them, 5 woody stems low down. Light tops, dark undersides and core, normals bent out from the bush centre so it shades as one rounded mass. - Berries sit IN the outer leaves: each berry centre 4.5-7.5 cm out from the clump surface, among leaves that stick out about 12 cm, on a short green stem; 1-2 extra leaves lie half over each cluster. No collars, nothing hangs outside the foliage. - Varied clusters: 20 groups = 2 x5, 3 x4, 4 x3, 4 x2 and 7 single berries (49 berries), 5-7.5 cm radius (sizes vary per berry), placed irregularly with a bias to the sunny top and upper sides. Red and purple share the big and small clusters. Every berry has a painted highlight cap turned toward the sun. - HALF PICKED: 18 berries left (mostly the top clusters, some clusters thinned), pale bare stems where the rest were. - PICKED: no berries; bare stems at every cluster; 17% of the leaves torn off, 16% drooped or twisted, some yellowed; the bush shrinks 5% and is duller. It never regrows (one-way swap, as today). - Snow: snow painted on the upward-facing tops only; the berries are never frosted. SIZES (width x depth, height) today 1.42 x 1.27 m, 0.77 m tall (picked 1.30 x 1.16, 0.77) first prop. same as today (it used today's foliage) V2 1.84 x 1.72 m, 1.07 m tall (picked 1.72 x 1.63, 1.02); about 0.6 of the 1.8 m figure TRIANGLES (state = what is drawn) today full 1,578 + 1,200 = 2,778; half/low the same (berries scaled); picked 1,290 V2 full 1,121 + 1,274 = 2,395; half 1,121 + 582 = 1,703; picked 1,007 + 178 = 1,185 Every V2 state is under today's. AT THE GAME CAMERA (32 px/m crops, 1x and enlarged) - Full: reads as a large round bush dotted with red and purple; berries are in the bush, not hanging off it. - Half: visibly fewer berries, the rest still clear (red best). Purple berries on green are the weakest at 1x. - Picked: a dull, darker bush with no berries; clearly different from full and half. The bare stems do not read at 1x; the dullness and the missing berries carry it. - Snow: the berries still stand out; the picked snow bush is mostly white. The low stems hardly show from above. STAGED FILES: local file: berry_bush_v2 - local file: bush_berry_v2.fbx: BerryBush_Foliage, BerryBush_Berries, BerryBush_BerriesHalf, BerryBush_Berries_Purple, BerryBush_BerriesHalf_Purple. local file: bush_berry_v2_snow.fbx: the same with BerryBush_Foliage_Snow. local file: bush_berry_v2_picked.fbx: BerryBush_Picked + BerryBush_PickedStems (and a _snow twin). - All are vertex colour only ("Col"; no texture, as today's bush). One pivot at the base centre, metres, Y up, the game's kit FBX settings. The wind sway can treat the bush as one plant (the bend grows with height from the base). - How the game should use them: draw the Foliage plus ONE berry sub-mesh. Use Berries (or _Purple) while more than 50% is left, BerriesHalf (it holds the bare stems too) up to empty, then swap the whole bush to the picked FBX. Do not scale the berries any more. Mixed or purple is chosen per bush; on snow maps use the _snow files and drop the shader frost and the BiomeLook berry tint/darkening for this bush. - berry_bush_v2.blend (every part), stats_v2.json, local file: berry_v2.py (builds, renders, exports; reuses local file: tw_preview.py), local file: compose_v2.ps1 (the sheet), local file: *.png (every render). NOT CHECKED - Not imported into Unity: custom normals, vertex colours and the sway on the real shader are unchecked; no in-game photo. The lighting is Blender EEVEE, not the game's (no grade, fog or frost shader). - The 1.84 m footprint against the berry-bush cell, unit paths, selection ring and gatherer standing points. - No LOD or shadow caster made. No desert, tropic or volcanic render (desert berry darkening still needs dropping). - One bush shape only (one seed); a second variant would cut the clone look.