WIP: feat(scene) integrate beauty pass — shader water, building blockouts, wind, smoke, 6 textures
- Add 3 missing Terrain3D textures: Dirt Path (id=3), Riverbank Stone (id=4), Compacted Ground (id=5) with procedural albedo PNGs + generate tool - Replace greybox river BoxMesh with animated vertex-displacement water shader - Replace greybox waterfall BoxMesh with scrolling-UV waterfall shader - Add WaterfallMist GPUParticles3D with upward drift and alpha fade - Add wind vertex shader for tree canopies (sin-based, height-weighted sway) - Replace StylizedTree.tscn with script-driven procedural tree supporting 3 canopy color variants and position-based randomization - Replace greybox house boxes with StylizedHouse (walls + pitched roof + door) - Replace mill box with StylizedMill (body + roof + water wheel cylinder) - Replace fortress box with FortressBlockout (keep + parapet + corner turret) - Replace bridge box with BridgeBlockout (deck + pillar supports) - Add ChimneySmoke GPUParticles3D on each house roof - Height-snap buildings (fortress + village) to terrain surface in _ready() - Update JajceWorld.tscn: remove all greybox landmark sub-resources, instance new scenes, keep terrain/navigation/sky/fog as-is - Update scaffold test for new scene structure and beauty elements
This commit is contained in:
+38
-123
@@ -1,9 +1,17 @@
|
||||
[gd_scene load_steps=27 format=3]
|
||||
[gd_scene load_steps=20 format=3]
|
||||
|
||||
[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="Script" path="res://world/jajce/jajce_world.gd" id="3_world"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/StylizedTree.tscn" id="4_tree"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/FortressBlockout.tscn" id="5_fortress"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/StylizedHouse.tscn" id="6_house"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/StylizedMill.tscn" id="7_mill"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/BridgeBlockout.tscn" id="8_bridge"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/WaterBody.tscn" id="9_water"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/WaterfallBody.tscn" id="10_waterfall"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/WaterfallMist.tscn" id="11_mist"]
|
||||
[ext_resource type="PackedScene" path="res://world/jajce/ChimneySmoke.tscn" id="12_smoke"]
|
||||
|
||||
[sub_resource type="Terrain3DMaterial" id="Terrain3DMaterial_jajce"]
|
||||
_shader_parameters = {
|
||||
@@ -26,24 +34,6 @@ polygons = [PackedInt32Array(2, 1, 0), PackedInt32Array(3, 2, 4), PackedInt32Arr
|
||||
[sub_resource type="StandardMaterial3D" id="Material_ground"]
|
||||
albedo_color = Color(0.24, 0.48, 0.25, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_ridge"]
|
||||
albedo_color = Color(0.34, 0.31, 0.27, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_terrace"]
|
||||
albedo_color = Color(0.42, 0.5, 0.29, 1)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_water"]
|
||||
albedo_color = Color(0.12, 0.39, 0.55, 0.72)
|
||||
transparency = 1
|
||||
metallic = 0.18
|
||||
roughness = 0.12
|
||||
emission_enabled = true
|
||||
emission = Color(0.05, 0.19, 0.24, 1)
|
||||
emission_energy_multiplier = 0.45
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_building"]
|
||||
albedo_color = Color(0.62, 0.48, 0.32, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_ground"]
|
||||
material = SubResource("Material_ground")
|
||||
size = Vector3(64, 0.2, 64)
|
||||
@@ -51,56 +41,6 @@ size = Vector3(64, 0.2, 64)
|
||||
[sub_resource type="BoxShape3D" id="Shape_ground"]
|
||||
size = Vector3(64, 0.2, 64)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_ridge"]
|
||||
material = SubResource("Material_ridge")
|
||||
size = Vector3(12, 10, 28)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_terrace"]
|
||||
material = SubResource("Material_terrace")
|
||||
size = Vector3(15, 1.5, 8)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_river"]
|
||||
material = SubResource("Material_water")
|
||||
size = Vector3(5, 0.08, 56)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_house"]
|
||||
material = SubResource("Material_building")
|
||||
size = Vector3(4, 4, 5)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_fortress"]
|
||||
material = SubResource("Material_building")
|
||||
size = Vector3(8, 5, 10)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_bridge"]
|
||||
material = SubResource("Material_building")
|
||||
size = Vector3(8, 0.5, 3)
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_waterfall"]
|
||||
material = SubResource("Material_water")
|
||||
size = Vector3(5, 10, 0.5)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_foam"]
|
||||
albedo_color = Color(0.82, 0.94, 0.94, 0.85)
|
||||
transparency = 1
|
||||
roughness = 0.25
|
||||
emission_enabled = true
|
||||
emission = Color(0.36, 0.52, 0.54, 1)
|
||||
emission_energy_multiplier = 0.35
|
||||
|
||||
[sub_resource type="BoxMesh" id="Mesh_foam"]
|
||||
material = SubResource("Material_foam")
|
||||
size = Vector3(5.5, 0.12, 2.2)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Material_mist"]
|
||||
albedo_color = Color(0.82, 0.91, 0.92, 0.16)
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
|
||||
[sub_resource type="SphereMesh" id="Mesh_mist"]
|
||||
material = SubResource("Material_mist")
|
||||
radius = 2.8
|
||||
height = 4.0
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="SkyMaterial_jajce"]
|
||||
sky_top_color = Color(0.23, 0.43, 0.62, 1)
|
||||
sky_horizon_color = Color(0.82, 0.68, 0.5, 1)
|
||||
@@ -131,6 +71,15 @@ script = ExtResource("3_world")
|
||||
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
|
||||
navigation_mesh = SubResource("NavigationMesh_greybox")
|
||||
|
||||
[node name="GreyboxGround" type="StaticBody3D" parent="NavigationRegion3D"]
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="NavigationRegion3D/GreyboxGround"]
|
||||
visible = false
|
||||
mesh = SubResource("Mesh_ground")
|
||||
|
||||
[node name="Collision" type="CollisionShape3D" parent="NavigationRegion3D/GreyboxGround"]
|
||||
shape = SubResource("Shape_ground")
|
||||
|
||||
[node name="TerrainRoot" type="Node3D" parent="."]
|
||||
|
||||
[node name="Terrain3D" type="Terrain3D" parent="TerrainRoot"]
|
||||
@@ -141,78 +90,44 @@ collision_mask = 3
|
||||
collision_mode = 0
|
||||
top_level = true
|
||||
|
||||
[node name="GreyboxGround" type="StaticBody3D" parent="NavigationRegion3D"]
|
||||
[node name="FortressBlockout" type="Node3D" parent="."]
|
||||
position = Vector3(-25, 7, 9)
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="NavigationRegion3D/GreyboxGround"]
|
||||
visible = false
|
||||
mesh = SubResource("Mesh_ground")
|
||||
|
||||
[node name="Collision" type="CollisionShape3D" parent="NavigationRegion3D/GreyboxGround"]
|
||||
shape = SubResource("Shape_ground")
|
||||
|
||||
[node name="GreyboxLandmarks" type="Node3D" parent="."]
|
||||
|
||||
[node name="FortressRidge" type="MeshInstance3D" parent="GreyboxLandmarks"]
|
||||
position = Vector3(-25, 5, 9)
|
||||
mesh = SubResource("Mesh_ridge")
|
||||
|
||||
[node name="FortressBlockout" type="MeshInstance3D" parent="GreyboxLandmarks"]
|
||||
position = Vector3(-25, 12.5, 9)
|
||||
mesh = SubResource("Mesh_fortress")
|
||||
|
||||
[node name="UpperTerrace" type="MeshInstance3D" parent="GreyboxLandmarks"]
|
||||
position = Vector3(-14, 0.75, 12)
|
||||
mesh = SubResource("Mesh_terrace")
|
||||
|
||||
[node name="LowerTerrace" type="MeshInstance3D" parent="GreyboxLandmarks"]
|
||||
position = Vector3(-11, 0.75, 2)
|
||||
mesh = SubResource("Mesh_terrace")
|
||||
[node name="Keep" parent="FortressBlockout" instance=ExtResource("5_fortress")]
|
||||
|
||||
[node name="WaterRoot" type="Node3D" parent="."]
|
||||
|
||||
[node name="RiverGreybox" type="MeshInstance3D" parent="WaterRoot"]
|
||||
position = Vector3(25, 0.12, 0)
|
||||
mesh = SubResource("Mesh_river")
|
||||
[node name="RiverSurface" parent="WaterRoot" instance=ExtResource("9_water")]
|
||||
|
||||
[node name="WaterfallGreybox" type="MeshInstance3D" parent="WaterRoot"]
|
||||
position = Vector3(25, 5, -24)
|
||||
mesh = SubResource("Mesh_waterfall")
|
||||
[node name="WaterfallBody" parent="WaterRoot" instance=ExtResource("10_waterfall")]
|
||||
|
||||
[node name="WaterfallFoam" type="MeshInstance3D" parent="WaterRoot"]
|
||||
position = Vector3(25, 0.22, -20.5)
|
||||
mesh = SubResource("Mesh_foam")
|
||||
|
||||
[node name="Mist_01" type="MeshInstance3D" parent="WaterRoot"]
|
||||
position = Vector3(24, 1.7, -20)
|
||||
scale = Vector3(1.5, 0.55, 1)
|
||||
mesh = SubResource("Mesh_mist")
|
||||
|
||||
[node name="Mist_02" type="MeshInstance3D" parent="WaterRoot"]
|
||||
position = Vector3(27, 2.2, -22)
|
||||
scale = Vector3(1.1, 0.4, 0.8)
|
||||
mesh = SubResource("Mesh_mist")
|
||||
[node name="WaterfallMist" parent="WaterRoot" instance=ExtResource("11_mist")]
|
||||
|
||||
[node name="VillageRoot" type="Node3D" parent="."]
|
||||
|
||||
[node name="House_01" type="MeshInstance3D" parent="VillageRoot"]
|
||||
[node name="House_01" parent="VillageRoot" instance=ExtResource("6_house")]
|
||||
position = Vector3(-15, 2, 7)
|
||||
mesh = SubResource("Mesh_house")
|
||||
|
||||
[node name="House_02" type="MeshInstance3D" parent="VillageRoot"]
|
||||
[node name="Smoke" parent="VillageRoot/House_01" instance=ExtResource("12_smoke")]
|
||||
position = Vector3(0, 4.5, 0)
|
||||
|
||||
[node name="House_02" parent="VillageRoot" instance=ExtResource("6_house")]
|
||||
position = Vector3(-8, 2, 2)
|
||||
mesh = SubResource("Mesh_house")
|
||||
|
||||
[node name="House_03" type="MeshInstance3D" parent="VillageRoot"]
|
||||
[node name="Smoke" parent="VillageRoot/House_02" instance=ExtResource("12_smoke")]
|
||||
position = Vector3(0, 4.5, 0)
|
||||
|
||||
[node name="House_03" parent="VillageRoot" instance=ExtResource("6_house")]
|
||||
position = Vector3(-15, 2, -4)
|
||||
mesh = SubResource("Mesh_house")
|
||||
|
||||
[node name="MillBlockout" type="MeshInstance3D" parent="VillageRoot"]
|
||||
[node name="Smoke" parent="VillageRoot/House_03" instance=ExtResource("12_smoke")]
|
||||
position = Vector3(0, 4.5, 0)
|
||||
|
||||
[node name="Mill" parent="VillageRoot" instance=ExtResource("7_mill")]
|
||||
position = Vector3(19, 2, 7)
|
||||
mesh = SubResource("Mesh_house")
|
||||
|
||||
[node name="BridgeBlockout" type="MeshInstance3D" parent="VillageRoot"]
|
||||
[node name="Bridge" parent="VillageRoot" instance=ExtResource("8_bridge")]
|
||||
position = Vector3(25, 0.5, 0)
|
||||
mesh = SubResource("Mesh_bridge")
|
||||
|
||||
[node name="FoliageRoot" type="Node3D" parent="."]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user