feat: clarify jajce work-site silhouettes
This commit is contained in:
@@ -640,10 +640,13 @@ Completed:
|
|||||||
13. Runtime first-read staging: the capture tool uses an explicit presentation
|
13. Runtime first-read staging: the capture tool uses an explicit presentation
|
||||||
camera preset, the gameplay camera supports the same staging API, and the
|
camera preset, the gameplay camera supports the same staging API, and the
|
||||||
village has authored dirt path strips for the current task loop.
|
village has authored dirt path strips for the current task loop.
|
||||||
|
14. Landmark and work-site silhouettes: the ridge landmark, pantry, guard post,
|
||||||
|
study desk, and rest bench now have compact presentation props that remain
|
||||||
|
readable in the runtime cinematic frame.
|
||||||
|
|
||||||
Next:
|
Next:
|
||||||
|
|
||||||
1. Strengthen landmark and work-site silhouettes without adding new simulation
|
1. Strengthen water and foreground silhouettes without adding new simulation
|
||||||
mechanics.
|
mechanics.
|
||||||
|
|
||||||
Do not start with GIS data, a full city, a large asset pack, or more NPC
|
Do not start with GIS data, a full city, a large asset pack, or more NPC
|
||||||
|
|||||||
@@ -687,6 +687,8 @@ Recently completed:
|
|||||||
leaving the simulation task state authoritative.
|
leaving the simulation task state authoritative.
|
||||||
- Runtime first-read staging now includes a presentation camera preset and
|
- Runtime first-read staging now includes a presentation camera preset and
|
||||||
authored path strips that reveal the active village task loop.
|
authored path strips that reveal the active village task loop.
|
||||||
|
- Landmark and work-site silhouette props make the ridge landmark, pantry,
|
||||||
|
guard, study, and rest sites easier to identify without debug labels.
|
||||||
|
|
||||||
This order strengthens the simulation while regularly producing visible
|
This order strengthens the simulation while regularly producing visible
|
||||||
progress suitable for public development updates.
|
progress suitable for public development updates.
|
||||||
|
|||||||
@@ -333,6 +333,8 @@ distance with resource `safety_risk`, `comfort_distance`, and
|
|||||||
- deterministic shaped terrain data and six game-owned surface layers;
|
- deterministic shaped terrain data and six game-owned surface layers;
|
||||||
- fortress, houses, mill, bridge, shader river/waterfall, mist, and smoke;
|
- fortress, houses, mill, bridge, shader river/waterfall, mist, and smoke;
|
||||||
- authored dirt path strips that make the current village task loop readable;
|
- authored dirt path strips that make the current village task loop readable;
|
||||||
|
- compact silhouette props for the ridge landmark, pantry, guard, study, and
|
||||||
|
rest sites;
|
||||||
- warm sky, fog, shadows, and wind-reactive foliage;
|
- warm sky, fog, shadows, and wind-reactive foliage;
|
||||||
- eight ResourceNodes preserving stable food/wood discovery IDs;
|
- eight ResourceNodes preserving stable food/wood discovery IDs;
|
||||||
- typed village pantry storage and typed guard, study, and rest activity sites;
|
- typed village pantry storage and typed guard, study, and rest activity sites;
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ state. A follow-up pass adds small task glyphs above active NPCs, so the
|
|||||||
cinematic view now preserves task intent after the debug labels are hidden. A
|
cinematic view now preserves task intent after the debug labels are hidden. A
|
||||||
camera-staging pass then gives the runtime capture a wider village view and adds
|
camera-staging pass then gives the runtime capture a wider village view and adds
|
||||||
authored dirt path strips that make the task loop readable from the first frame.
|
authored dirt path strips that make the task loop readable from the first frame.
|
||||||
|
The next presentation pass adds compact silhouette props to the ridge landmark,
|
||||||
|
pantry, guard, study, and rest sites so work locations remain identifiable in
|
||||||
|
cinematic mode.
|
||||||
|
|
||||||
The frame also makes the next presentation risks plain:
|
The frame also makes the next presentation risks plain:
|
||||||
|
|
||||||
@@ -41,9 +44,9 @@ The frame also makes the next presentation risks plain:
|
|||||||
- terrain texture variation and path strips read better than the old flat map,
|
- terrain texture variation and path strips read better than the old flat map,
|
||||||
but landmarks, water, and foreground silhouettes need stronger first-read
|
but landmarks, water, and foreground silhouettes need stronger first-read
|
||||||
staging;
|
staging;
|
||||||
- task glyphs help, but the cinematic view still needs clearer work-site props
|
- task glyphs and work-site props help, but the cinematic view still needs
|
||||||
and route composition so intent is readable before the viewer learns the icon
|
richer water/foreground shapes and stronger authored silhouettes before it
|
||||||
language.
|
becomes a strong public-facing shot.
|
||||||
|
|
||||||
Use this baseline as the first runtime comparison image before adding more
|
Use this baseline as the first runtime comparison image before adding more
|
||||||
systems or expanding the terrain.
|
systems or expanding the terrain.
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 707 KiB After Width: | Height: | Size: 710 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 694 KiB After Width: | Height: | Size: 696 KiB |
@@ -64,6 +64,26 @@ func _run() -> void:
|
|||||||
if child.name.begins_with("Path_"):
|
if child.name.begins_with("Path_"):
|
||||||
path_strips += 1
|
path_strips += 1
|
||||||
_check(path_strips >= 4, "Runtime should include authored path strips for first-read composition")
|
_check(path_strips >= 4, "Runtime should include authored path strips for first-read composition")
|
||||||
|
_check(
|
||||||
|
main_scene.has_node("JajceWorld/FortressBlockout/Keep/RidgeBanner"),
|
||||||
|
"Runtime should include a readable ridge landmark banner"
|
||||||
|
)
|
||||||
|
_check(
|
||||||
|
main_scene.has_node("JajceWorld/WorldObjects/StorageSites/VillagePantry/PantrySign"),
|
||||||
|
"Pantry storage should have a readable work-site silhouette"
|
||||||
|
)
|
||||||
|
_check(
|
||||||
|
main_scene.has_node("JajceWorld/WorldObjects/ActivitySites/GuardPost/GuardPennant"),
|
||||||
|
"Guard site should have a readable work-site silhouette"
|
||||||
|
)
|
||||||
|
_check(
|
||||||
|
main_scene.has_node("JajceWorld/WorldObjects/ActivitySites/StudyDesk/OpenBook_A"),
|
||||||
|
"Study site should have readable study props"
|
||||||
|
)
|
||||||
|
_check(
|
||||||
|
main_scene.has_node("JajceWorld/WorldObjects/ActivitySites/RestBench/RestCanopy"),
|
||||||
|
"Rest site should have a readable rest silhouette"
|
||||||
|
)
|
||||||
|
|
||||||
var navigation_map: RID = main_scene.get_world_3d().navigation_map
|
var navigation_map: RID = main_scene.get_world_3d().navigation_map
|
||||||
var navigation_region := main_scene.get_node("JajceWorld/NavigationRegion3D") as NavigationRegion3D
|
var navigation_region := main_scene.get_node("JajceWorld/NavigationRegion3D") as NavigationRegion3D
|
||||||
|
|||||||
+104
-1
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=29 format=3]
|
[gd_scene load_steps=39 format=3]
|
||||||
|
|
||||||
[ext_resource type="Terrain3DAssets" path="res://terrain/jajce/assets.tres" id="1_assets"]
|
[ext_resource type="Terrain3DAssets" path="res://terrain/jajce/assets.tres" id="1_assets"]
|
||||||
[ext_resource type="PackedScene" path="res://world/resource_nodes/ResourceNode.tscn" id="2_resource"]
|
[ext_resource type="PackedScene" path="res://world/resource_nodes/ResourceNode.tscn" id="2_resource"]
|
||||||
@@ -53,6 +53,48 @@ roughness = 0.95
|
|||||||
material = SubResource("Material_path_readability")
|
material = SubResource("Material_path_readability")
|
||||||
size = Vector3(1, 0.06, 1)
|
size = Vector3(1, 0.06, 1)
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="Material_landmark_banner"]
|
||||||
|
albedo_color = Color(0.68, 0.12, 0.1, 1)
|
||||||
|
roughness = 0.72
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="Material_site_canvas"]
|
||||||
|
albedo_color = Color(0.82, 0.68, 0.38, 1)
|
||||||
|
roughness = 0.88
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="Material_site_dark_wood"]
|
||||||
|
albedo_color = Color(0.24, 0.13, 0.07, 1)
|
||||||
|
roughness = 0.82
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="Material_site_book"]
|
||||||
|
albedo_color = Color(0.37, 0.18, 0.62, 1)
|
||||||
|
roughness = 0.74
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="Mesh_landmark_banner"]
|
||||||
|
material = SubResource("Material_landmark_banner")
|
||||||
|
size = Vector3(0.12, 1.7, 1.0)
|
||||||
|
|
||||||
|
[sub_resource type="CylinderMesh" id="Mesh_site_pole"]
|
||||||
|
material = SubResource("Material_site_dark_wood")
|
||||||
|
top_radius = 0.06
|
||||||
|
bottom_radius = 0.07
|
||||||
|
height = 2.2
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="Mesh_site_sign"]
|
||||||
|
material = SubResource("Material_site_canvas")
|
||||||
|
size = Vector3(1.0, 0.08, 0.5)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="Mesh_site_sack"]
|
||||||
|
material = SubResource("Material_site_canvas")
|
||||||
|
size = Vector3(0.5, 0.62, 0.42)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="Mesh_study_book"]
|
||||||
|
material = SubResource("Material_site_book")
|
||||||
|
size = Vector3(0.42, 0.08, 0.3)
|
||||||
|
|
||||||
|
[sub_resource type="BoxMesh" id="Mesh_rest_canopy"]
|
||||||
|
material = SubResource("Material_site_canvas")
|
||||||
|
size = Vector3(2.9, 0.08, 1.4)
|
||||||
|
|
||||||
[sub_resource type="ProceduralSkyMaterial" id="SkyMaterial_jajce"]
|
[sub_resource type="ProceduralSkyMaterial" id="SkyMaterial_jajce"]
|
||||||
sky_top_color = Color(0.23, 0.43, 0.62, 1)
|
sky_top_color = Color(0.23, 0.43, 0.62, 1)
|
||||||
sky_horizon_color = Color(0.82, 0.68, 0.5, 1)
|
sky_horizon_color = Color(0.82, 0.68, 0.5, 1)
|
||||||
@@ -144,6 +186,14 @@ position = Vector3(-25, 7, 9)
|
|||||||
|
|
||||||
[node name="Keep" parent="FortressBlockout" instance=ExtResource("5_fortress")]
|
[node name="Keep" parent="FortressBlockout" instance=ExtResource("5_fortress")]
|
||||||
|
|
||||||
|
[node name="RidgeBannerPole" type="MeshInstance3D" parent="FortressBlockout/Keep"]
|
||||||
|
position = Vector3(2.2, 8.6, 2.8)
|
||||||
|
mesh = SubResource("Mesh_site_pole")
|
||||||
|
|
||||||
|
[node name="RidgeBanner" type="MeshInstance3D" parent="FortressBlockout/Keep"]
|
||||||
|
position = Vector3(2.2, 8.95, 3.35)
|
||||||
|
mesh = SubResource("Mesh_landmark_banner")
|
||||||
|
|
||||||
[node name="WaterRoot" type="Node3D" parent="."]
|
[node name="WaterRoot" type="Node3D" parent="."]
|
||||||
|
|
||||||
[node name="RiverSurface" parent="WaterRoot" instance=ExtResource("9_water")]
|
[node name="RiverSurface" parent="WaterRoot" instance=ExtResource("9_water")]
|
||||||
@@ -369,6 +419,25 @@ discovery_priority = 0.75
|
|||||||
[node name="VillagePantry" parent="WorldObjects/StorageSites" instance=ExtResource("14_storage")]
|
[node name="VillagePantry" parent="WorldObjects/StorageSites" instance=ExtResource("14_storage")]
|
||||||
position = Vector3(0, 0, -8)
|
position = Vector3(0, 0, -8)
|
||||||
|
|
||||||
|
[node name="PantrySignPole" type="MeshInstance3D" parent="WorldObjects/StorageSites/VillagePantry"]
|
||||||
|
position = Vector3(-1.05, 1.1, 1.25)
|
||||||
|
mesh = SubResource("Mesh_site_pole")
|
||||||
|
|
||||||
|
[node name="PantrySign" type="MeshInstance3D" parent="WorldObjects/StorageSites/VillagePantry"]
|
||||||
|
position = Vector3(-1.05, 1.85, 1.25)
|
||||||
|
rotation_degrees = Vector3(0, 90, 0)
|
||||||
|
mesh = SubResource("Mesh_site_sign")
|
||||||
|
|
||||||
|
[node name="PantrySack_A" type="MeshInstance3D" parent="WorldObjects/StorageSites/VillagePantry"]
|
||||||
|
position = Vector3(-0.95, 0.3, -0.65)
|
||||||
|
scale = Vector3(0.65, 1.0, 0.65)
|
||||||
|
mesh = SubResource("Mesh_site_sack")
|
||||||
|
|
||||||
|
[node name="PantrySack_B" type="MeshInstance3D" parent="WorldObjects/StorageSites/VillagePantry"]
|
||||||
|
position = Vector3(-1.35, 0.22, -0.25)
|
||||||
|
scale = Vector3(0.5, 0.75, 0.5)
|
||||||
|
mesh = SubResource("Mesh_site_sack")
|
||||||
|
|
||||||
[node name="ActivitySites" type="Node3D" parent="WorldObjects"]
|
[node name="ActivitySites" type="Node3D" parent="WorldObjects"]
|
||||||
|
|
||||||
[node name="GuardPost" type="Node3D" parent="WorldObjects/ActivitySites"]
|
[node name="GuardPost" type="Node3D" parent="WorldObjects/ActivitySites"]
|
||||||
@@ -383,6 +452,15 @@ capacity = 2
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 0)
|
||||||
mesh = SubResource("Mesh_guard_post")
|
mesh = SubResource("Mesh_guard_post")
|
||||||
|
|
||||||
|
[node name="GuardPennantPole" type="MeshInstance3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
||||||
|
position = Vector3(0.45, 2.35, 0)
|
||||||
|
mesh = SubResource("Mesh_site_pole")
|
||||||
|
|
||||||
|
[node name="GuardPennant" type="MeshInstance3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
||||||
|
position = Vector3(0.45, 2.85, 0.48)
|
||||||
|
scale = Vector3(0.8, 0.55, 0.65)
|
||||||
|
mesh = SubResource("Mesh_landmark_banner")
|
||||||
|
|
||||||
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
||||||
|
|
||||||
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/GuardPost"]
|
||||||
@@ -405,6 +483,16 @@ display_name = "Study Desk"
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.125, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.125, 0)
|
||||||
mesh = SubResource("Mesh_study_desk")
|
mesh = SubResource("Mesh_study_desk")
|
||||||
|
|
||||||
|
[node name="OpenBook_A" type="MeshInstance3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
||||||
|
position = Vector3(-0.25, 0.32, 0)
|
||||||
|
rotation_degrees = Vector3(0, 14, 0)
|
||||||
|
mesh = SubResource("Mesh_study_book")
|
||||||
|
|
||||||
|
[node name="OpenBook_B" type="MeshInstance3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
||||||
|
position = Vector3(0.22, 0.32, 0.04)
|
||||||
|
rotation_degrees = Vector3(0, -14, 0)
|
||||||
|
mesh = SubResource("Mesh_study_book")
|
||||||
|
|
||||||
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
||||||
|
|
||||||
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/StudyDesk"]
|
||||||
@@ -428,6 +516,21 @@ capacity = 2
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.15, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.15, 0)
|
||||||
mesh = SubResource("Mesh_rest_bench")
|
mesh = SubResource("Mesh_rest_bench")
|
||||||
|
|
||||||
|
[node name="RestCanopy" type="MeshInstance3D" parent="WorldObjects/ActivitySites/RestBench"]
|
||||||
|
position = Vector3(0, 1.35, 0)
|
||||||
|
rotation_degrees = Vector3(0, 0, -6)
|
||||||
|
mesh = SubResource("Mesh_rest_canopy")
|
||||||
|
|
||||||
|
[node name="RestCanopyPost_A" type="MeshInstance3D" parent="WorldObjects/ActivitySites/RestBench"]
|
||||||
|
position = Vector3(-1.25, 0.72, -0.52)
|
||||||
|
scale = Vector3(0.8, 0.8, 0.8)
|
||||||
|
mesh = SubResource("Mesh_site_pole")
|
||||||
|
|
||||||
|
[node name="RestCanopyPost_B" type="MeshInstance3D" parent="WorldObjects/ActivitySites/RestBench"]
|
||||||
|
position = Vector3(1.25, 0.72, 0.52)
|
||||||
|
scale = Vector3(0.8, 0.8, 0.8)
|
||||||
|
mesh = SubResource("Mesh_site_pole")
|
||||||
|
|
||||||
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/RestBench"]
|
[node name="InteractionPoint" type="Marker3D" parent="WorldObjects/ActivitySites/RestBench"]
|
||||||
|
|
||||||
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/RestBench"]
|
[node name="DebugLabel" type="Label3D" parent="WorldObjects/ActivitySites/RestBench"]
|
||||||
|
|||||||
Reference in New Issue
Block a user