feat: scale village queries and enrich Jajce center
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
// Adapted for The Steward from the bundled Terrain3D particle-grass example.
|
||||
shader_type spatial;
|
||||
|
||||
render_mode skip_vertex_transform, cull_disabled, blend_mix;
|
||||
|
||||
const int MAX_INTERACTORS = 8;
|
||||
|
||||
uniform vec2 wind_direction = vec2(1.0, 0.7);
|
||||
uniform vec3 base_color : source_color = vec3(0.16, 0.31, 0.08);
|
||||
uniform vec3 tip_color : source_color = vec3(0.54, 0.68, 0.24);
|
||||
uniform float wind_amount : hint_range(0.0, 1.0) = 0.34;
|
||||
uniform int interactor_count : hint_range(0, 8) = 0;
|
||||
uniform vec3 interactor_positions[MAX_INTERACTORS];
|
||||
uniform float interaction_radius : hint_range(0.25, 4.0) = 1.8;
|
||||
uniform float interaction_strength : hint_range(0.0, 2.0) = 0.75;
|
||||
|
||||
varying vec4 grass_data;
|
||||
varying float pressed_weight;
|
||||
|
||||
|
||||
void vertex() {
|
||||
grass_data[2] = VERTEX.y + 0.55;
|
||||
grass_data[2] *= grass_data[2];
|
||||
VERTEX.xz *= 1.0 - grass_data[2];
|
||||
COLOR = mix(COLOR, vec4(1.0), smoothstep(0.9, 1.0, grass_data[2]));
|
||||
COLOR *= INSTANCE_CUSTOM[3] < 0.35 ? 1.0 : mix(1.0, 0.75, smoothstep(0.35, 0.0, grass_data[2]));
|
||||
grass_data.rg = INSTANCE_CUSTOM.rg;
|
||||
|
||||
vec3 world_vertex = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||
float scale = pow(INSTANCE_CUSTOM[3] * INSTANCE_CUSTOM[3], 0.707);
|
||||
float force = INSTANCE_CUSTOM[2] * grass_data[2] * scale * wind_amount;
|
||||
force -= fract(force * 256.0) * force * 0.05;
|
||||
force = pow(max(force, 0.0), 0.707);
|
||||
float lateral_wobble = sin(TIME * 2.0 * (1.0 + grass_data.r + grass_data.g)) * 0.2 * (1.0 - INSTANCE_CUSTOM[2]);
|
||||
vec2 direction = normalize(wind_direction);
|
||||
world_vertex.xz -= (vec2(-direction.y, direction.x) * lateral_wobble + direction) * force;
|
||||
world_vertex.y -= INSTANCE_CUSTOM[2] * force * grass_data[2];
|
||||
grass_data[3] = force;
|
||||
|
||||
pressed_weight = 0.0;
|
||||
for (int index = 0; index < MAX_INTERACTORS; index++) {
|
||||
if (index >= interactor_count) {
|
||||
break;
|
||||
}
|
||||
vec2 offset = world_vertex.xz - interactor_positions[index].xz;
|
||||
float distance_to_actor = length(offset);
|
||||
float influence = 1.0 - smoothstep(0.25, interaction_radius, distance_to_actor);
|
||||
vec2 away = offset / max(distance_to_actor, 0.08);
|
||||
world_vertex.xz += away * influence * interaction_strength * grass_data[2];
|
||||
world_vertex.y -= influence * 0.28 * grass_data[2];
|
||||
pressed_weight = max(pressed_weight, influence);
|
||||
}
|
||||
|
||||
VERTEX = (VIEW_MATRIX * vec4(world_vertex, 1.0)).xyz;
|
||||
NORMAL = MODELVIEW_NORMAL_MATRIX * NORMAL;
|
||||
BINORMAL = MODELVIEW_NORMAL_MATRIX * BINORMAL;
|
||||
TANGENT = MODELVIEW_NORMAL_MATRIX * TANGENT;
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
vec3 color = mix(base_color, tip_color, grass_data[2] * 0.62);
|
||||
color.rg *= grass_data.rg * 0.18 + 0.91;
|
||||
color *= pow(COLOR.rgb, vec3(2.2));
|
||||
ALBEDO = mix(color, base_color * 0.72, pressed_weight * 0.42);
|
||||
float specular_roughness = clamp(max(grass_data[2], grass_data[3]), 0.0, 1.0);
|
||||
ROUGHNESS = 1.0 - specular_roughness * 0.22;
|
||||
SPECULAR = clamp(specular_roughness * 0.2, 0.0, 0.12);
|
||||
BACKLIGHT = tip_color * 0.24;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://3ayekivfakfr
|
||||
@@ -0,0 +1,14 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=2 format=3]
|
||||
|
||||
[ext_resource type="Shader" path="res://world/jajce/materials/cozy_grass.gdshader" id="1_grass"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_grass")
|
||||
shader_parameter/wind_direction = Vector2(1, 0.7)
|
||||
shader_parameter/base_color = Vector3(0.16, 0.31, 0.08)
|
||||
shader_parameter/tip_color = Vector3(0.54, 0.68, 0.24)
|
||||
shader_parameter/wind_amount = 0.34
|
||||
shader_parameter/interactor_count = 0
|
||||
shader_parameter/interaction_radius = 1.8
|
||||
shader_parameter/interaction_strength = 0.75
|
||||
@@ -0,0 +1,47 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=4 format=3]
|
||||
|
||||
[ext_resource type="Shader" path="res://addons/terrain_3d/extras/particle_example/particles.gdshader" id="1_process_shader"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoise_grass"]
|
||||
noise_type = 2
|
||||
frequency = 0.018
|
||||
cellular_return_type = 4
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture_grass"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoise_grass")
|
||||
|
||||
[resource]
|
||||
shader = ExtResource("1_process_shader")
|
||||
shader_parameter/main_noise = SubResource("NoiseTexture_grass")
|
||||
shader_parameter/main_noise_scale = 0.012
|
||||
shader_parameter/position_offset = Vector3(0, 0.22, 0)
|
||||
shader_parameter/align_to_normal = true
|
||||
shader_parameter/normal_strength = 0.22
|
||||
shader_parameter/random_rotation = true
|
||||
shader_parameter/random_spacing = 0.72
|
||||
shader_parameter/min_scale = Vector3(0.09, 0.22, 0.09)
|
||||
shader_parameter/max_scale = Vector3(0.13, 0.48, 0.13)
|
||||
shader_parameter/noise_scale = 0.0041
|
||||
shader_parameter/wind_speed = 0.022
|
||||
shader_parameter/wind_strength = 0.6
|
||||
shader_parameter/wind_dithering = 4.0
|
||||
shader_parameter/wind_direction = Vector2(1, 0.7)
|
||||
shader_parameter/clod_scale_boost = 0.18
|
||||
shader_parameter/clod_min_threshold = 0.32
|
||||
shader_parameter/clod_max_threshold = 0.78
|
||||
shader_parameter/patch_min_threshold = 0.08
|
||||
shader_parameter/patch_max_threshold = 0.42
|
||||
shader_parameter/condition_dither_range = 0.18
|
||||
shader_parameter/surface_slope_min = 0.88
|
||||
shader_parameter/distance_fade_ammount = 0.7
|
||||
shader_parameter/max_dist = 1.0
|
||||
shader_parameter/camera_position = Vector3(0, 0, 0)
|
||||
shader_parameter/instance_rows = 1
|
||||
shader_parameter/instance_spacing = 0.703125
|
||||
shader_parameter/_background_mode = 0
|
||||
shader_parameter/_vertex_spacing = 1.0
|
||||
shader_parameter/_vertex_density = 1.0
|
||||
shader_parameter/_region_size = 1024.0
|
||||
shader_parameter/_region_texel_size = 0.000976563
|
||||
shader_parameter/_region_map_size = 32
|
||||
@@ -1,54 +1,42 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
||||
render_mode blend_mix, depth_prepass_alpha, cull_disabled, diffuse_burley, specular_schlick_ggx;
|
||||
|
||||
uniform float wave_strength : hint_range(0.0, 0.5) = 0.08;
|
||||
uniform float wave_speed : hint_range(0.0, 5.0) = 0.8;
|
||||
uniform float flow_speed : hint_range(0.0, 3.0) = 0.6;
|
||||
uniform vec3 deep_color : source_color = vec3(0.06, 0.24, 0.38);
|
||||
uniform vec3 shallow_color : source_color = vec3(0.18, 0.44, 0.58);
|
||||
uniform vec3 foam_color : source_color = vec3(0.82, 0.88, 0.86);
|
||||
uniform float rim_power : hint_range(0.5, 5.0) = 2.5;
|
||||
uniform float sparkle_strength : hint_range(0.0, 1.0) = 0.12;
|
||||
uniform float wave_strength : hint_range(0.0, 0.3) = 0.055;
|
||||
uniform float wave_speed : hint_range(0.0, 3.0) = 0.72;
|
||||
uniform float flow_speed : hint_range(0.0, 2.0) = 0.46;
|
||||
uniform vec3 deep_color : source_color = vec3(0.03, 0.39, 0.45);
|
||||
uniform vec3 shallow_color : source_color = vec3(0.07, 0.67, 0.64);
|
||||
uniform vec3 sunlit_color : source_color = vec3(0.55, 0.95, 0.78);
|
||||
uniform vec3 foam_color : source_color = vec3(0.82, 0.94, 0.84);
|
||||
|
||||
uniform vec3 sun_direction = vec3(0.4, 0.8, 0.4);
|
||||
|
||||
void vertex() {
|
||||
vec3 pos = VERTEX;
|
||||
float wave_a = sin(pos.x * 0.35 + pos.z * 0.25 + TIME * wave_speed) * wave_strength;
|
||||
float wave_b = cos(pos.x * 0.45 - pos.z * 0.55 + TIME * wave_speed * 0.7) * wave_strength * 0.6;
|
||||
float wave_c = sin(pos.z * 0.7 + TIME * wave_speed * 1.3) * wave_strength * 0.35;
|
||||
pos.y += wave_a + wave_b + wave_c;
|
||||
VERTEX = pos;
|
||||
float broad_wave = sin(VERTEX.x * 0.42 + VERTEX.z * 0.18 + TIME * wave_speed);
|
||||
float crossing_wave = cos(VERTEX.x * 0.7 - VERTEX.z * 0.31 + TIME * wave_speed * 0.73);
|
||||
VERTEX.y += (broad_wave + crossing_wave * 0.45) * wave_strength;
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
vec3 view_dir = VIEW;
|
||||
vec3 normal = NORMAL;
|
||||
vec3 view_norm = normalize(view_dir);
|
||||
vec2 flowing_uv = UV * vec2(7.0, 10.0);
|
||||
flowing_uv.y -= TIME * flow_speed;
|
||||
float ribbon_a = sin(flowing_uv.y + sin(flowing_uv.x * 0.72) * 1.25) * 0.5 + 0.5;
|
||||
float ribbon_b = sin(flowing_uv.y * 1.7 - flowing_uv.x * 0.55 + TIME * 0.23) * 0.5 + 0.5;
|
||||
float quiet_ripple = smoothstep(0.72, 0.98, ribbon_a * 0.62 + ribbon_b * 0.38);
|
||||
float fresnel = pow(1.0 - clamp(dot(normalize(NORMAL), normalize(VIEW)), 0.0, 1.0), 2.4);
|
||||
float bank_distance = min(UV.x, 1.0 - UV.x);
|
||||
float bank_foam = 1.0 - smoothstep(0.0, 0.07, bank_distance);
|
||||
bank_foam *= 0.72 + sin(UV.y * 52.0 + TIME * 0.35) * 0.12;
|
||||
|
||||
float rim = 1.0 - abs(dot(normal, view_norm));
|
||||
rim = pow(rim, rim_power);
|
||||
rim = smoothstep(0.15, 0.7, rim);
|
||||
|
||||
vec2 uv = UV;
|
||||
uv.x += TIME * flow_speed * 0.4;
|
||||
uv.y += TIME * flow_speed * 0.3;
|
||||
float flow_a = sin(uv.x * 8.0 + uv.y * 5.0) * 0.5 + 0.5;
|
||||
float flow_b = cos(uv.y * 6.0 - uv.x * 4.0 + TIME * 0.25) * 0.5 + 0.5;
|
||||
float flow = mix(flow_a, flow_b, 0.5);
|
||||
|
||||
vec3 water_color = mix(deep_color, shallow_color, flow * 0.6 + 0.2);
|
||||
water_color = mix(water_color, foam_color, rim * 0.65);
|
||||
|
||||
vec3 half_vec = normalize(view_norm + normalize(sun_direction));
|
||||
float specular = pow(max(dot(normal, half_vec), 0.0), 120.0);
|
||||
specular *= smoothstep(0.4, 0.85, rim);
|
||||
float sparkle = specular * sparkle_strength;
|
||||
vec3 water_color = mix(deep_color, shallow_color, ribbon_a * 0.2 + 0.48);
|
||||
water_color = mix(water_color, sunlit_color, fresnel * 0.42);
|
||||
water_color = mix(water_color, foam_color, quiet_ripple * 0.05);
|
||||
water_color = mix(water_color, foam_color, bank_foam * 0.3);
|
||||
|
||||
ALBEDO = water_color;
|
||||
METALLIC = 0.08;
|
||||
ROUGHNESS = 0.22;
|
||||
EMISSION = water_color * 0.04 + foam_color * sparkle;
|
||||
ALPHA = 0.76;
|
||||
ALPHA_SCISSOR_THRESHOLD = 0.0;
|
||||
ROUGHNESS = mix(0.34, 0.5, ribbon_b);
|
||||
SPECULAR = 0.38;
|
||||
EMISSION = water_color * 0.12 + sunlit_color * (quiet_ripple * 0.05 + fresnel * 0.03);
|
||||
EMISSION += foam_color * bank_foam * 0.025;
|
||||
ALPHA = mix(0.94, 0.99, fresnel);
|
||||
}
|
||||
|
||||
@@ -1,50 +1,38 @@
|
||||
shader_type spatial;
|
||||
render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx;
|
||||
render_mode blend_mix, depth_prepass_alpha, cull_disabled, diffuse_burley, specular_schlick_ggx;
|
||||
|
||||
uniform float scroll_speed : hint_range(0.0, 4.0) = 1.35;
|
||||
uniform vec3 shadow_color : source_color = vec3(0.075, 0.33, 0.34);
|
||||
uniform vec3 water_color : source_color = vec3(0.31, 0.68, 0.64);
|
||||
uniform vec3 light_color : source_color = vec3(0.78, 0.94, 0.83);
|
||||
uniform vec3 foam_color : source_color = vec3(0.91, 0.97, 0.9);
|
||||
|
||||
uniform float scroll_speed : hint_range(0.0, 5.0) = 1.8;
|
||||
uniform vec3 deep_color : source_color = vec3(0.1, 0.45, 0.55);
|
||||
uniform vec3 mid_color : source_color = vec3(0.45, 0.78, 0.82);
|
||||
uniform vec3 foam_color : source_color = vec3(0.9, 0.95, 0.95);
|
||||
uniform float foam_contrast : hint_range(0.5, 4.0) = 2.2;
|
||||
uniform float sparkle_strength : hint_range(0.0, 0.8) = 0.25;
|
||||
|
||||
void vertex() {
|
||||
float edge_weight = 1.0 - abs(UV.x * 2.0 - 1.0);
|
||||
float curtain_wobble = sin(UV.y * 13.0 - TIME * 2.2 + UV.x * 8.0) * 0.05;
|
||||
VERTEX.z += curtain_wobble * edge_weight;
|
||||
}
|
||||
|
||||
|
||||
void fragment() {
|
||||
vec2 uv = UV;
|
||||
uv.y += TIME * scroll_speed;
|
||||
vec2 flow_uv = UV;
|
||||
flow_uv.y += TIME * scroll_speed;
|
||||
float long_thread = sin(flow_uv.x * 32.0 + sin(flow_uv.y * 3.1) * 2.4) * 0.5 + 0.5;
|
||||
float soft_thread = sin(flow_uv.x * 13.0 - flow_uv.y * 7.0) * 0.5 + 0.5;
|
||||
float falling_detail = sin(flow_uv.y * 27.0 + flow_uv.x * 7.0) * 0.5 + 0.5;
|
||||
float thread = smoothstep(0.36, 0.9, long_thread * 0.6 + soft_thread * 0.4);
|
||||
float broken_foam = smoothstep(0.72, 0.98, falling_detail * thread);
|
||||
float base_foam = smoothstep(0.58, 1.0, UV.y);
|
||||
float edge_fade = smoothstep(0.0, 0.08, UV.x) * smoothstep(1.0, 0.92, UV.x);
|
||||
|
||||
float band_a = fract(uv.y * 5.0 + sin(uv.x * 2.0) * 0.15);
|
||||
band_a = smoothstep(0.2, 0.55, band_a) * smoothstep(0.8, 0.45, band_a);
|
||||
|
||||
float band_b = fract(uv.y * 3.5 + cos(uv.x * 2.5 + TIME * 0.3) * 0.12);
|
||||
band_b = smoothstep(0.1, 0.5, band_b) * smoothstep(0.85, 0.4, band_b);
|
||||
|
||||
float foam_a = fract(uv.y * 4.0);
|
||||
foam_a = pow(smoothstep(0.0, 0.12, foam_a) * smoothstep(0.3, 0.15, foam_a), foam_contrast);
|
||||
|
||||
float foam_b = fract(uv.y * 6.0 + uv.x * 1.5);
|
||||
foam_b = pow(smoothstep(0.5, 0.58, foam_b) * smoothstep(0.7, 0.6, foam_b), foam_contrast * 0.8);
|
||||
|
||||
float foam = foam_a * 0.7 + foam_b * 0.3;
|
||||
|
||||
vec3 base = mix(deep_color, mid_color, band_a * 0.5 + band_b * 0.3);
|
||||
vec3 color = mix(base, foam_color, foam);
|
||||
|
||||
float sparkle = pow(foam_a, 3.0) * sparkle_strength;
|
||||
float highlight = band_a * band_b * 0.35;
|
||||
float emission_value = sparkle + highlight * 0.3;
|
||||
vec3 color = mix(shadow_color, water_color, 0.5 + thread * 0.35);
|
||||
color = mix(color, light_color, broken_foam * 0.5);
|
||||
color = mix(color, foam_color, base_foam * (0.38 + broken_foam * 0.42));
|
||||
|
||||
ALBEDO = color;
|
||||
ALPHA = mix(0.25, 0.78, foam * 0.7 + 0.15);
|
||||
EMISSION = color * emission_value;
|
||||
METALLIC = 0.05;
|
||||
ROUGHNESS = 0.15;
|
||||
|
||||
vec3 normal = NORMAL;
|
||||
vec3 view_dir = VIEW;
|
||||
vec3 view_norm = normalize(view_dir);
|
||||
float rim = 1.0 - abs(dot(normal, view_norm));
|
||||
ALPHA = mix(ALPHA, ALPHA * 0.5, rim * 0.6);
|
||||
ROUGHNESS = mix(0.16, 0.32, broken_foam);
|
||||
SPECULAR = 0.65;
|
||||
EMISSION = light_color * (broken_foam * 0.07 + base_foam * 0.04);
|
||||
ALPHA = edge_fade * mix(0.62, 0.9, thread * 0.56 + base_foam * 0.3);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user