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:
@@ -0,0 +1,20 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
||||
|
||||
uniform float wave_strength : hint_range(0.0, 1.0) = 0.15;
|
||||
uniform float wave_speed : hint_range(0.0, 5.0) = 1.2;
|
||||
|
||||
void vertex() {
|
||||
vec3 pos = VERTEX;
|
||||
float wave = sin(pos.z * 0.4 + TIME * wave_speed) * wave_strength;
|
||||
pos.y += wave;
|
||||
VERTEX = pos;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
ALBEDO = vec3(0.12, 0.39, 0.55);
|
||||
METALLIC = 0.15;
|
||||
ROUGHNESS = 0.1;
|
||||
EMISSION = vec3(0.05, 0.19, 0.24) * 0.45;
|
||||
ALPHA = 0.72;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://m1s2ma420y34
|
||||
@@ -0,0 +1,21 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
||||
|
||||
uniform float scroll_speed : hint_range(0.0, 5.0) = 2.0;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
uv.y += TIME * scroll_speed;
|
||||
float pattern = fract(uv.y * 4.0);
|
||||
pattern = smoothstep(0.3, 0.7, pattern);
|
||||
pattern = mix(0.4, 1.0, pattern);
|
||||
vec3 base_color = mix(vec3(0.6, 0.85, 0.9), vec3(1.0, 1.0, 1.0), pattern);
|
||||
ALBEDO = base_color;
|
||||
ALPHA = mix(0.3, 0.7, pattern);
|
||||
EMISSION = vec3(0.36, 0.52, 0.54) * 0.35 * pattern;
|
||||
METALLIC = 0.0;
|
||||
ROUGHNESS = 0.2;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://bi2eesg0ly3pq
|
||||
@@ -0,0 +1,24 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
||||
|
||||
uniform float wind_strength : hint_range(0.0, 0.5) = 0.08;
|
||||
uniform float wind_speed : hint_range(0.0, 5.0) = 0.6;
|
||||
uniform vec3 albedo : source_color = vec3(0.19, 0.38, 0.17);
|
||||
uniform float roughness : hint_range(0.0, 1.0) = 0.9;
|
||||
|
||||
void vertex() {
|
||||
float half_height = 1.2;
|
||||
float height_factor = clamp((VERTEX.y + half_height) / (half_height * 2.0), 0.0, 1.0);
|
||||
height_factor = height_factor * height_factor;
|
||||
|
||||
float sway_x = sin(VERTEX.x * 0.3 + TIME * wind_speed) * wind_strength * height_factor;
|
||||
float sway_z = cos(VERTEX.z * 0.3 + TIME * wind_speed * 0.7) * wind_strength * height_factor;
|
||||
|
||||
VERTEX.x += sway_x;
|
||||
VERTEX.z += sway_z;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
ALBEDO = albedo;
|
||||
ROUGHNESS = roughness;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://cnc12rxvfw5qh
|
||||
Reference in New Issue
Block a user