refactor rain_dir to rain_vel

This commit is contained in:
IsseW 2022-05-31 18:03:39 +02:00
parent 7752696387
commit 9f26afb4a5
3 changed files with 11 additions and 12 deletions

View File

@ -5,8 +5,6 @@ use vek::{Lerp, Vec2, Vec3};
use crate::{grid::Grid, terrain::TerrainChunkSize, vol::RectVolSize};
pub const FALL_RATE: f32 = 20.0;
/// Weather::default is Clear, 0 degrees C and no wind
#[derive(Debug, Clone, Copy, Serialize, Deserialize, Default)]
pub struct Weather {
@ -42,9 +40,10 @@ impl Weather {
}
}
// Get the rain direction for this weather
pub fn rain_dir(&self) -> Vec3<f32> {
(-Vec3::unit_z() + self.wind / (2.0 * FALL_RATE)).normalized()
// Get the rain velocity for this weather
pub fn rain_vel(&self) -> Vec3<f32> {
const FALL_RATE: f32 = 20.0;
Vec3::new(self.wind.x, self.wind.y, -FALL_RATE)
}
}

View File

@ -1005,14 +1005,14 @@ impl Scene {
.max_weather_near(focus_off.xy() + cam_pos.xy());
if weather.rain > 0.0 {
let weather = client.state().weather_at(focus_off.xy() + cam_pos.xy());
let rain_dir = weather.rain_dir();
let rain_view_mat = math::Mat4::look_at_rh(look_at, look_at + rain_dir, up);
let rain_vel = rain_dir * common::weather::FALL_RATE - player_vel;
self.integrated_rain_vel += rain_vel.magnitude() * dt;
let rel_rain_dir_mat = Mat4::rotation_from_to_3d(-Vec3::unit_z(), rain_vel);
let rain_vel = weather.rain_vel();
let rain_view_mat = math::Mat4::look_at_rh(look_at, look_at + rain_vel, up);
let relative_rain_vel = rain_vel - player_vel;
self.integrated_rain_vel += relative_rain_vel.magnitude() * dt;
let rel_rain_dir_mat = Mat4::rotation_from_to_3d(-Vec3::unit_z(), relative_rain_vel);
let (shadow_mat, texture_mat) =
directed_mats(rain_view_mat, rain_dir.into(), &visible_occlusion_volume);
directed_mats(rain_view_mat, rain_vel.into(), &visible_occlusion_volume);
let rain_occlusion_locals = RainOcclusionLocals::new(
shadow_mat,

View File

@ -1415,7 +1415,7 @@ impl<V: RectRasterableVol> Terrain<V> {
max: visible_bounding_box.max.as_::<f64>(),
};
let weather = scene_data.state.weather_at(focus_pos.xy());
let ray_direction = math::Vec3::<f32>::from(weather.rain_dir());
let ray_direction = math::Vec3::<f32>::from(weather.rain_vel().normalized());
// NOTE: We use proj_mat_treeculler here because
// calc_focused_light_volume_points makes the assumption that the