mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Only draw chunks outside of fog boundary, reduce fog strength
This commit is contained in:
parent
1b5d2d468b
commit
66cd8de0e1
@ -21,7 +21,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day) {
|
||||
|
||||
float fog(vec2 f_pos, vec2 focus_pos) {
|
||||
float dist = distance(f_pos, focus_pos) / view_distance.x;
|
||||
float min_fog = 0.5;
|
||||
float min_fog = 0.75;
|
||||
float max_fog = 1.0;
|
||||
|
||||
return clamp((dist - min_fog) / (max_fog - min_fog), 0.0, 1.0);
|
||||
|
@ -166,7 +166,12 @@ impl Scene {
|
||||
renderer.render_skybox(&self.skybox.model, &self.globals, &self.skybox.locals);
|
||||
|
||||
// Render terrain and figures.
|
||||
self.terrain.render(renderer, &self.globals);
|
||||
self.terrain.render(
|
||||
renderer,
|
||||
&self.globals,
|
||||
self.camera.get_focus_pos(),
|
||||
self.loaded_distance,
|
||||
);
|
||||
self.figure_mgr.render(renderer, client, &self.globals);
|
||||
|
||||
renderer.render_post_process(
|
||||
|
@ -3,7 +3,11 @@ use crate::{
|
||||
render::{Consts, Globals, Mesh, Model, Renderer, TerrainLocals, TerrainPipeline},
|
||||
};
|
||||
use client::Client;
|
||||
use common::{terrain::TerrainMap, vol::SampleVol, volumes::vol_map_2d::VolMap2dErr};
|
||||
use common::{
|
||||
terrain::{TerrainChunkSize, TerrainMap},
|
||||
vol::{SampleVol, VolSize},
|
||||
volumes::vol_map_2d::VolMap2dErr,
|
||||
};
|
||||
use std::{collections::HashMap, i32, sync::mpsc, time::Duration};
|
||||
use vek::*;
|
||||
|
||||
@ -200,9 +204,28 @@ impl Terrain {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn render(&self, renderer: &mut Renderer, globals: &Consts<Globals>) {
|
||||
for (_, chunk) in &self.chunks {
|
||||
renderer.render_terrain_chunk(&chunk.model, globals, &chunk.locals);
|
||||
pub fn render(
|
||||
&self,
|
||||
renderer: &mut Renderer,
|
||||
globals: &Consts<Globals>,
|
||||
focus_pos: Vec3<f32>,
|
||||
loaded_distance: f32,
|
||||
) {
|
||||
for (pos, chunk) in &self.chunks {
|
||||
// Limit focus_pos to chunk bounds
|
||||
let chunk_pos = pos.map2(TerrainChunkSize::SIZE.into(), |e, sz: u32| {
|
||||
e as f32 * sz as f32
|
||||
});
|
||||
let nearest_in_chunk = Vec2::from(focus_pos).clamped(
|
||||
chunk_pos,
|
||||
chunk_pos + Vec2::from(TerrainChunkSize::SIZE).map(|e: u32| e as f32),
|
||||
);
|
||||
|
||||
if Vec2::<f32>::from(focus_pos).distance_squared(nearest_in_chunk)
|
||||
< loaded_distance.powf(2.0)
|
||||
{
|
||||
renderer.render_terrain_chunk(&chunk.model, globals, &chunk.locals);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user