Improved cloud falloff mist, faster noise sampling

This commit is contained in:
Joshua Barretto 2019-11-22 12:40:48 +00:00
parent f6a200d0cb
commit 745e7540dd
6 changed files with 10 additions and 9 deletions

View File

@ -12,7 +12,7 @@ vec2 splay(vec2 pos, float e) {
}
vec3 lod_pos(vec2 v_pos) {
vec2 hpos = focus_pos.xy + splay(v_pos, 3.0) * 20000.0;
vec2 hpos = focus_pos.xy + splay(v_pos, 4.0) * 100000.0;
return vec3(hpos, alt_at(hpos));
}

View File

@ -132,7 +132,7 @@ vec2 cloud_at(vec3 pos) {
float shade = ((pos.z - CLOUD_AVG_HEIGHT) / (CLOUD_AVG_HEIGHT - CLOUD_HEIGHT_MIN) + 0.5);
return vec2(shade, density / (1.0 + vsum(abs(pos - cam_pos.xyz)) / 5000));
return vec2(shade, density / (1.0 + vsum(abs(pos - cam_pos.xyz)) / 10000));
}
vec4 get_cloud_color(vec3 dir, vec3 origin, float time_of_day, float max_dist, float quality) {
@ -143,7 +143,8 @@ vec4 get_cloud_color(vec3 dir, vec3 origin, float time_of_day, float max_dist, f
float maxd = (CLOUD_HEIGHT_MAX - origin.z) / dir.z;
float start = max(min(mind, maxd), 0.0);
float delta = min(abs(mind - maxd), max_dist);
float cloud_delta = abs(mind - maxd);
float delta = min(cloud_delta, max_dist);
bool do_cast = true;
if (mind < 0.0 && maxd < 0.0) {
@ -170,7 +171,7 @@ vec4 get_cloud_color(vec3 dir, vec3 origin, float time_of_day, float max_dist, f
}
}
float total_density = 1.0 - passthrough;// / (1.0 + max(max_dist, start) * 0.0001);
float total_density = 1.0 - passthrough / (1.0 + (max_dist / (1.0 + max(abs(dir.z), 0.03) * 100.0)) * 0.00003);
total_density = max(total_density - 1.0 / pow(max_dist, 0.25), 0.0); // Hack
@ -267,7 +268,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float q
}
float fog(vec3 f_pos, vec3 focus_pos, uint medium) {
return max(1.0 - 10000.0 / (1.0 + distance(f_pos.xy, focus_pos.xy)), 0.0);
return max(1.0 - 5000.0 / (1.0 + distance(f_pos.xy, focus_pos.xy)), 0.0);
float fog_radius = view_distance.x;
float mist_radius = 10000000.0;

View File

@ -23,7 +23,7 @@ void main() {
float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x);
vec4 clouds;
vec3 fog_color = get_sky_color(normalize(f_pos - cam_pos.xyz), time_of_day.x, cam_pos.xyz, f_pos, 1.0, true, clouds);
vec3 color = mix(mix(surf_color, vec3(1), fog_level), clouds.rgb, clouds.a);
vec3 color = mix(mix(surf_color, fog_color, fog_level), clouds.rgb, clouds.a);
tgt_color = vec4(color, 1.0);
}

View File

@ -36,7 +36,7 @@ void main() {
float fog_level = fog(f_pos.xyz, focus_pos.xyz, medium.x);
vec4 clouds;
vec3 fog_color = get_sky_color(normalize(f_pos - cam_pos.xyz), time_of_day.x, cam_pos.xyz, f_pos, 1.0, true, clouds);
vec3 color = mix(mix(surf_color, vec3(1), fog_level), clouds.rgb, clouds.a);
vec3 color = mix(mix(surf_color, fog_color, fog_level), clouds.rgb, clouds.a);
tgt_color = vec4(color, 1.0);
}

View File

@ -124,7 +124,7 @@ impl Renderer {
let noise_tex = Texture::new(
&mut factory,
&assets::load_expect("voxygen.texture.noise"),
Some(gfx::texture::FilterMethod::Trilinear),
Some(gfx::texture::FilterMethod::Bilinear),
Some(gfx::texture::WrapMode::Tile),
)?;

View File

@ -1240,7 +1240,7 @@ impl<V: RectRasterableVol> Terrain<V> {
// a sample of the terrain that includes both the chunk we want and
// its neighbours.
let volume = match client.state().terrain().sample(aabr) {
Ok(sample) => sample,
Ok(sample) => sample, // TODO: Ensure that all of the chunk's neighbours still exist to avoid buggy shadow borders
// Either this chunk or its neighbours doesn't yet exist, so we keep it in the
// queue to be processed at a later date when we have its neighbours.
Err(VolGrid2dError::NoSuchChunk) => return,