mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Random depth for rain drops for better occlusion
This commit is contained in:
parent
79cac935c8
commit
bfb4769315
@ -114,9 +114,23 @@ void main() {
|
|||||||
vec3 cam_wpos = cam_pos.xyz + focus_off.xyz;
|
vec3 cam_wpos = cam_pos.xyz + focus_off.xyz;
|
||||||
float rain_dist = 150.0;
|
float rain_dist = 150.0;
|
||||||
for (int i = 0; i < 7; i ++) {
|
for (int i = 0; i < 7; i ++) {
|
||||||
|
float old_rain_dist = rain_dist;
|
||||||
rain_dist *= 0.3;
|
rain_dist *= 0.3;
|
||||||
|
|
||||||
vec3 rpos = vec3(vec2(dir_2d), view_pos.y) * rain_dist;
|
vec2 drop_density = vec2(30, 1);
|
||||||
|
vec2 drop_size = vec2(0.0008, 0.05);
|
||||||
|
|
||||||
|
vec2 rain_pos = (view_pos * rain_dist);
|
||||||
|
rain_pos += vec2(0, tick.x * fall_rate + cam_wpos.z);
|
||||||
|
|
||||||
|
vec2 cell = floor(rain_pos * drop_density) / drop_density;
|
||||||
|
|
||||||
|
float drop_depth = mix(
|
||||||
|
old_rain_dist,
|
||||||
|
rain_dist,
|
||||||
|
fract(hash(fract(vec4(cell, rain_dist, 0) * 0.1)))
|
||||||
|
);
|
||||||
|
vec3 rpos = vec3(vec2(dir_2d), view_pos.y) * drop_depth;
|
||||||
float dist_to_rain = length(rpos);
|
float dist_to_rain = length(rpos);
|
||||||
if (dist < dist_to_rain || cam_wpos.z + rpos.z > CLOUD_AVG_ALT) {
|
if (dist < dist_to_rain || cam_wpos.z + rpos.z > CLOUD_AVG_ALT) {
|
||||||
continue;
|
continue;
|
||||||
@ -127,13 +141,6 @@ void main() {
|
|||||||
}
|
}
|
||||||
float rain_density = rain_density_at(cam_wpos.xy + rpos.xy) * rain_occlusion_at(cam_pos.xyz + rpos.xyz) * 10.0;
|
float rain_density = rain_density_at(cam_wpos.xy + rpos.xy) * rain_occlusion_at(cam_pos.xyz + rpos.xyz) * 10.0;
|
||||||
|
|
||||||
vec2 drop_density = vec2(30, 1);
|
|
||||||
vec2 drop_size = vec2(0.0008, 0.05);
|
|
||||||
|
|
||||||
vec2 rain_pos = (view_pos * rain_dist);
|
|
||||||
rain_pos += vec2(0, tick.x * fall_rate + cam_wpos.z);
|
|
||||||
|
|
||||||
vec2 cell = floor(rain_pos * drop_density) / drop_density;
|
|
||||||
if (fract(hash(fract(vec4(cell, rain_dist, 0) * 0.01))) > rain_density) {
|
if (fract(hash(fract(vec4(cell, rain_dist, 0) * 0.01))) > rain_density) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,7 @@ uniform u_rain_occlusion {
|
|||||||
|
|
||||||
float rain_occlusion_at(in vec3 fragPos)
|
float rain_occlusion_at(in vec3 fragPos)
|
||||||
{
|
{
|
||||||
float bias = 0.000;
|
float bias = 0.5;
|
||||||
float diskRadius = 0.01;
|
float diskRadius = 0.01;
|
||||||
const vec3 sampleOffsetDirections[20] = vec3[]
|
const vec3 sampleOffsetDirections[20] = vec3[]
|
||||||
(
|
(
|
||||||
@ -27,7 +27,7 @@ float rain_occlusion_at(in vec3 fragPos)
|
|||||||
vec3( 0, 1, 1), vec3( 0, -1, 1), vec3( 0, -1, -1), vec3( 0, 1, -1)
|
vec3( 0, 1, 1), vec3( 0, -1, 1), vec3( 0, -1, -1), vec3( 0, 1, -1)
|
||||||
);
|
);
|
||||||
|
|
||||||
vec4 rain_pos = occlusion_texture_mat * vec4(fragPos, 1.0);
|
vec4 rain_pos = occlusion_texture_mat * vec4(fragPos - vec3(0, 0, bias), 1.0);
|
||||||
|
|
||||||
float visibility = textureProj(sampler2DShadow(t_directed_occlusion_maps, s_directed_occlusion_maps), rain_pos);
|
float visibility = textureProj(sampler2DShadow(t_directed_occlusion_maps, s_directed_occlusion_maps), rain_pos);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user