feat: scale village queries and enrich Jajce center

This commit is contained in:
Rijad Zuzo
2026-07-16 23:51:08 +02:00
parent 4be72639d8
commit 2c88ed6ea8
48 changed files with 2059 additions and 280 deletions
+95
View File
@@ -0,0 +1,95 @@
# Jajce Center 02
Captured: 2026-07-16
## Files
- [before overview](jajce_center_02_before.png)
- [after overview](jajce_center_02_after.png)
- [close gameplay grass check](jajce_grass_gameplay_02.png)
- `tools/capture_jajce_lookdev.gd`
The two overview images use the same 1280×720 camera, fixed daylight value,
warmup, and Metal renderer. The gameplay image is a separate readability check,
not part of the matched comparison.
## Reference reading
The reduction uses Jajce's hierarchy rather than attempting a literal city
reconstruction:
- the [UNESCO tentative-list description](https://whc.unesco.org/en/tentativelists/2098/)
describes the citadel at the summit of a rocky pyramid, ramparts descending
its slopes, and residential roofs forming an amphitheater beneath it;
- the [official Jajce fortress overview](https://www.agencija-jajce.ba/en/the-fortress/)
supports treating the fortress as the primary long-distance landmark;
- official Studio Ghibli still collections for
[My Neighbor Totoro](https://www.ghibli.jp/works/totoro/) and
[Princess Mononoke](https://www.ghibli.jp/works/mononoke/) were used only as
broad references for layered green masses, clear silhouettes, restrained
natural motion, and small warm human details inside large landscapes;
- [Tiny Glade](https://store.steampowered.com/app/2198150/Tiny_Glade/) supports
the low-detail diorama reading of whimsical castles, cottages, ruins, and
incidental life;
- the [Terrain3D instancer guidance](https://terrain3d.readthedocs.io/en/latest/docs/instancer.html)
informed the split between camera-local particle grass and intentional tree
placement.
No building, frame, or asset is copied from those references. The project keeps
its own compact low-poly language and real simulation constraints.
## Implemented reduction
- The ridge block becomes a larger warm-stone citadel with a rocky plinth,
ramparts, descending walls, towers, gate, crenellations, banner, and narrow
window slits.
- Eight timber-accented plaster houses now cascade below the citadel instead of
leaving three isolated boxes in an empty field.
- The waterfall is wider, softly animated, misted, and framed by irregular
mossy rock columns. Its plunge pool feeds a turquoise ribbon that samples the
live Terrain3D height field instead of disappearing beneath it.
- The bridge gains a full river span, stone abutments, center pier, rails, and
posts. House windows and chimney smoke add small warm points.
- Existing rounded deciduous trees are richer and wind-reactive; authored
conifer clusters strengthen the citadel, falls, and valley edges.
- Three intentionally oversized butterflies add quiet ambient life.
- A bounded camera-local Terrain3D grass field uses roughly 10,400 particles.
Its project-owned process material keeps blades short and patchy, while a
shader receives at most eight real player/NPC transforms and bends grass
away from their feet.
- Haze and saturation are reduced so green terrain, warm roofs, stone, and
turquoise water separate more clearly.
## Authority boundary
Grass, butterflies, smoke, water motion, and foliage sway are transient
presentation. They do not enter saves or checksums. Player and `NpcVisual`
nodes merely expose real transforms to the grass shader.
Finite food and wood still come only from stable-ID `ResourceNode` anchors
bound to simulation-owned records. The conifers and grass are decorative; the
next resource-discovery phase can pair selected Terrain3D-authored visuals with
intentional resource anchors without turning every blade or background tree
into authoritative state. Livestock is deliberately deferred until one animal
has a real identity/state/interaction contract; ambient butterflies do not
pretend to be simulated food or work.
## Remaining visual work
This is a stronger prototype composition, not final environment art. The next
art pass should sculpt a true river channel and waterfall shelf into Terrain3D,
replace procedural fortress/house geometry gradually, add bank stones and
flower/fern clusters through bounded instancing, and validate a representative
frame-time budget. The matched comparison should remain the checkpoint before
those asset-heavy changes.
## 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_center_02_after.png
```
Binary file not shown.

After

Width:  |  Height:  |  Size: 729 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dcg13u5wqr23m"
path="res://.godot/imported/jajce_center_02_after.png-be0a331c22c145d626fa09f682c7e379.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://docs/baselines/jajce_center_02_after.png"
dest_files=["res://.godot/imported/jajce_center_02_after.png-be0a331c22c145d626fa09f682c7e379.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: 704 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dipu1epmps356"
path="res://.godot/imported/jajce_center_02_before.png-a6dad6237a960278853b124b5c1180c2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://docs/baselines/jajce_center_02_before.png"
dest_files=["res://.godot/imported/jajce_center_02_before.png-a6dad6237a960278853b124b5c1180c2.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: 553 KiB

@@ -0,0 +1,40 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://du1awnpktb7q0"
path="res://.godot/imported/jajce_grass_gameplay_02.png-4b072b6e4f1c146d62492370903db793.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://docs/baselines/jajce_grass_gameplay_02.png"
dest_files=["res://.godot/imported/jajce_grass_gameplay_02.png-4b072b6e4f1c146d62492370903db793.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