feat: carve Jajce river into terrain
This commit is contained in:
@@ -774,17 +774,23 @@ Completed:
|
||||
stable-ID resource anchors in a resource-specific horizontal grid. Exact
|
||||
expanding queries preserve current scoring and selected targets while the
|
||||
reviewed 1,800-source case inspects about 4.4 candidates instead of 1,800.
|
||||
36. `Jajce River 03`: the deterministic Terrain3D source now carves a raised
|
||||
waterfall shelf, upper stream, plunge basin, and curved downstream channel.
|
||||
Shared watercourse profiles keep generated terrain and both water ribbons
|
||||
aligned; softened foam/mist and a smaller rock frame make the falls part of
|
||||
the landform. A matched Metal capture records the change, and the rebaked
|
||||
navigation mesh passes terrain-height and runtime route checks.
|
||||
|
||||
Next:
|
||||
|
||||
1. Sculpt a real Terrain3D river channel and waterfall shelf before adding a
|
||||
broad foliage asset pass. Use Terrain3D particles for nearby grass and
|
||||
intentional instancing for tree/fern/rock masses, then rebake and validate
|
||||
the required village/resource routes.
|
||||
2. During that first larger foliage pass, prove a bounded authoring workflow
|
||||
that places intentional stable-ID `ResourceNode` anchors beside decorative
|
||||
Terrain3D instances. Add livestock only with a real identity and interaction
|
||||
contract.
|
||||
1. Prove one bounded foliage/resource authoring workflow at a riverbank or
|
||||
forest edge. Use decorative Terrain3D/intentional instances for tree, fern,
|
||||
flower, and rock masses, but create simulation-owned finite resources only
|
||||
through selected stable-ID `ResourceNode` anchors.
|
||||
2. Validate that villagers discover both nearby and farther authored anchors,
|
||||
preserve reachable interaction points, and keep the visual batch inside a
|
||||
measured presentation budget. Add livestock only with a real identity and
|
||||
interaction contract.
|
||||
|
||||
Do not start with GIS data, a full city, a large asset pack, or more NPC
|
||||
mechanics. The next proof is a beautiful stage for the systems that already
|
||||
|
||||
@@ -889,15 +889,29 @@ Unload/rebind state authority, stable tie order, moved anchors, reservations,
|
||||
player parity, and a deliberately far high-priority winner remain covered. See
|
||||
[Loaded Resource Discovery 01](benchmarks/LOADED_RESOURCE_DISCOVERY_01.md).
|
||||
|
||||
The immediate next slice should pair this systems foundation with the authored
|
||||
world: sculpt the real Terrain3D river channel and waterfall shelf, rebake and
|
||||
validate navigation, then use the first larger foliage/resource pass to prove a
|
||||
bounded stable-ID anchor placement workflow alongside decorative Terrain3D
|
||||
instancing. Do not generalize the resource grid to people/buildings/events or
|
||||
The authored-watercourse slice is complete. `JajceWatercourse` now gives the
|
||||
deterministic terrain generator and both water ribbons one shared profile; the
|
||||
generated Terrain3D data contains an upper stream, raised waterfall shelf,
|
||||
plunge basin, and curved downstream channel. A matched Metal capture records
|
||||
the result, and the Terrain3D-derived navigation mesh was rebaked and validated
|
||||
against required village/resource routes.
|
||||
|
||||
The immediate next slice should prove one bounded foliage/resource authoring
|
||||
workflow in the real world: build a restrained riverbank or forest-edge cluster
|
||||
with decorative Terrain3D/intentional instances, pair only selected harvestable
|
||||
trees or berry patches with stable-ID `ResourceNode` anchors, and verify nearby
|
||||
and farther loaded anchors remain discoverable through `ActiveWorldAdapter`.
|
||||
Keep decorative instances out of simulation state, measure the bounded visual
|
||||
cost, and do not generalize the resource grid to people/buildings/events or
|
||||
introduce active/abstract LOD before those consumers need it.
|
||||
|
||||
Recently completed:
|
||||
|
||||
- `Jajce River 03`: deterministic Terrain3D generation now carves the upper
|
||||
stream, raised waterfall shelf, plunge basin, and curved downstream channel;
|
||||
shared watercourse geometry keeps both water ribbons aligned, soft masked
|
||||
mist replaces hard billboards, and the rebaked navigation mesh passes
|
||||
terrain-height and runtime resource-route checks.
|
||||
- Loaded-resource spatial discovery: a resource-specific active-world grid
|
||||
preserves exact score winners and lifecycle authority while reducing the
|
||||
reviewed 1,800-anchor query from 6.45 ms to 46.94 µs.
|
||||
|
||||
@@ -341,8 +341,9 @@ but retain far sources whenever their authoritative metadata can still win.
|
||||
|
||||
- a centered 512 m Terrain3D landscape split across four regions;
|
||||
- deterministic shaped terrain data and six game-owned surface layers;
|
||||
- a larger summit citadel, eight cascading houses, mill, full-span bridge,
|
||||
rock-framed waterfall, mist, smoke, and a Terrain3D-sampled river ribbon;
|
||||
- a larger summit citadel, eight cascading houses, mill, full-span bridge, and
|
||||
a deterministic Terrain3D watercourse with an upper stream, raised waterfall
|
||||
shelf, rock-framed drop, plunge basin, mist, and curved downstream ribbon;
|
||||
- authored dirt path strips that make the current village task loop readable;
|
||||
- compact silhouette props for the ridge landmark, guard, study, and rest
|
||||
sites, plus a physical pantry whose empty/low/stocked arrangement follows
|
||||
@@ -979,10 +980,12 @@ Raw samples and workload exclusions live in
|
||||
[Simulation scaling baseline 02](benchmarks/SIMULATION_SCALING_BASELINE_02.md)
|
||||
and [Loaded Resource Discovery 01](benchmarks/LOADED_RESOURCE_DISCOVERY_01.md).
|
||||
|
||||
The next slice should return to the authored Jajce stage: sculpt the real
|
||||
Terrain3D river channel and waterfall shelf, rebake/validate navigation, and
|
||||
use the following foliage expansion to prove a bounded stable-ID resource
|
||||
anchor placement workflow beside decorative Terrain3D instances. Do not yet
|
||||
The authored Jajce watercourse and its Terrain3D-derived navigation rebake are
|
||||
complete. The next slice should prove a bounded stable-ID resource-anchor
|
||||
placement workflow beside decorative Terrain3D/intentional foliage instances
|
||||
at one riverbank or forest edge. It should validate nearby and farther loaded
|
||||
resource discovery, reachable interaction points, and a measured presentation
|
||||
budget without making decorative instances authoritative. Do not yet
|
||||
generalize the resource grid or introduce active/abstract simulation LOD.
|
||||
|
||||
The remaining simulation-garden target still aims for:
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
# Jajce River 03
|
||||
|
||||
Captured: 2026-07-17
|
||||
|
||||
## Files
|
||||
|
||||
- [before overview](jajce_river_03_before.png)
|
||||
- [after overview](jajce_river_03_after.png)
|
||||
- `tools/capture_jajce_lookdev.gd`
|
||||
- `tools/generate_jajce_terrain.gd`
|
||||
- `tools/bake_jajce_navigation.gd`
|
||||
|
||||
The images use the same 1280×720 camera, fixed daylight value, warmup, and
|
||||
Metal renderer. They are a matched checkpoint rather than two independently
|
||||
composed beauty shots.
|
||||
|
||||
## What changed
|
||||
|
||||
The previous river was a turquoise presentation ribbon laid across a mostly
|
||||
flat valley. Its waterfall was held by a large freestanding rock frame, so the
|
||||
water feature read more like a prop than part of the landscape.
|
||||
|
||||
The deterministic Terrain3D source now creates:
|
||||
|
||||
- a raised shelf upstream of the falls;
|
||||
- a shallow upper stream widening toward the lip;
|
||||
- an approximately 12 m drop into a shaped plunge basin;
|
||||
- a curved downstream channel with visible banks; and
|
||||
- slope-driven rock texture around the drop and steeper channel edges.
|
||||
|
||||
The waterfall frame is smaller and nested into that landform. Its foam is more
|
||||
restrained, and the mist uses a soft radial mask so individual particle quads
|
||||
do not appear against the dark cliff. The result remains deliberately reduced:
|
||||
citadel, roofs, shelf, falls, bridge, and river form one readable village-center
|
||||
composition without attempting a literal reconstruction of Jajce.
|
||||
|
||||
## Deterministic authoring contract
|
||||
|
||||
`JajceWatercourse` owns the shared center lines, widths, bed heights, shelf
|
||||
height, and water offset. `generate_jajce_terrain.gd` uses that profile to
|
||||
produce the checked-in Terrain3D regions; `TerrainRiverRibbon.gd` uses the same
|
||||
profile and samples the generated terrain for both water meshes. Changing the
|
||||
watercourse therefore has one explicit regeneration and navigation-rebake
|
||||
path instead of unrelated hand-tuned terrain and presentation coordinates.
|
||||
|
||||
This is presentation and interaction geometry only. No resource IDs,
|
||||
simulation records, RNG streams, save data, or NPC decision rules changed.
|
||||
|
||||
## Validation
|
||||
|
||||
The focused watercourse scenario records an upper-stream height of 11.28 m, a
|
||||
12.43 m shelf bank, and a -0.65 m plunge basin. It also checks multiple points
|
||||
along the downstream bed and verifies both generated water ribbons remain
|
||||
within 3 cm of the Terrain3D surface plus the shared water offset.
|
||||
|
||||
The navigation bake now contains 403 vertices and 620 polygons. The Jajce
|
||||
scaffold verifies required paths reach their destinations and track the new
|
||||
terrain heights, while the runtime integration scenario still completes real
|
||||
player resource gathering with all 18 finite resource anchors loaded.
|
||||
|
||||
## Next visual/system proof
|
||||
|
||||
The next pass should author one bounded riverbank or forest-edge foliage mass,
|
||||
using decorative Terrain3D/intentional instances for visual density and only a
|
||||
small selected set of stable-ID `ResourceNode` anchors for finite harvestable
|
||||
resources. Bank stones, ferns, flowers, and tree masses can improve the channel
|
||||
edge during that proof. Bridge, buildings, and fortress geometry remain
|
||||
prototype blockouts and should be replaced gradually rather than through a
|
||||
broad asset dump.
|
||||
|
||||
## Capture command
|
||||
|
||||
```bash
|
||||
HOME="$PWD/logs/quality/godot_profile" \
|
||||
APPDATA="$PWD/logs/quality/godot_profile" \
|
||||
LOCALAPPDATA="$PWD/logs/quality/godot_profile" \
|
||||
/Applications/Godot.app/Contents/MacOS/Godot \
|
||||
--path "$PWD" --script res://tools/capture_jajce_lookdev.gd -- \
|
||||
--output=res://docs/baselines/jajce_river_03_after.png
|
||||
```
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 742 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://r87qvthnulve"
|
||||
path="res://.godot/imported/jajce_river_03_after.png-43f5610f2e4f42d23b2a77674f846c7e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://docs/baselines/jajce_river_03_after.png"
|
||||
dest_files=["res://.godot/imported/jajce_river_03_after.png-43f5610f2e4f42d23b2a77674f846c7e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 730 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://2whbruuqbywc"
|
||||
path="res://.godot/imported/jajce_river_03_before.png-1cca7b1c7659c390906ee3738cc8b95f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://docs/baselines/jajce_river_03_before.png"
|
||||
dest_files=["res://.godot/imported/jajce_river_03_before.png-1cca7b1c7659c390906ee3738cc8b95f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
Reference in New Issue
Block a user