Fixed scenery

This commit is contained in:
numzero 2025-03-29 00:53:47 +03:00
parent 9a9a88360a
commit ae6b1f6b0d
2 changed files with 20 additions and 29 deletions

View File

@ -1,8 +1,10 @@
use crate::anim::{self, SphereParams}; use crate::anim::{self, SphereParams};
use crate::trace::{self, Tracer, TracerData}; use crate::trace::{self, Tracer, TracerData};
use crate::Sphere;
use glam::{mat3, uvec2, vec3, UVec2, Vec3}; use glam::{mat3, uvec2, vec3, UVec2, Vec3};
use std::f32::consts::PI; use std::f32::consts::PI;
#[derive(Debug, Clone, Copy)]
struct CamLoc { struct CamLoc {
eye: Vec3, eye: Vec3,
forward: Vec3, forward: Vec3,
@ -43,34 +45,28 @@ impl Renderer {
} }
pub struct SceneParams { pub struct SceneParams {
pub spheres: Vec<SphereParams>, spheres: Vec<Sphere>,
pub camera: SphereParams, camera: CamLoc,
pub target: SphereParams,
} }
impl SceneParams { impl SceneParams {
pub fn new(n_spheres: u32) -> Self { pub fn new(n_spheres: u32) -> Self {
let mut rng = rand_pcg::Pcg32::new(42, 0); let mut rng = rand_pcg::Pcg32::new(42, 0);
let spheres: Vec<_> = { const R: f32 = 100.;
let distr = anim::distr(); let sphere = Sphere {
(0..n_spheres).map(|_| distr(&mut rng)).collect() center: vec3(0., 0., -R),
radius: R,
emit_color: vec3(0., 0., 0.),
reflect_color: Vec3::splat(0.3),
glossiness: 0.,
}; };
let camera = { let spheres = vec![sphere];
let mut p = anim::distr()(&mut rng); let camera = CamLoc {
p.amplitudes *= 2.0; eye: vec3(-1., -1., 1.),
p.frequencies *= 0.1; forward: vec3(1., 1., 0.).normalize(),
p right: vec3(1., -1., 0.).normalize(),
}; };
let target = { Self { spheres, camera }
let mut p = spheres[0];
p.phases -= 2. * PI * CAMERA_LAG * p.frequencies;
p
};
Self {
spheres,
camera,
target,
}
} }
} }
@ -100,14 +96,9 @@ impl Renderer {
time: f32, time: f32,
seed: u32, seed: u32,
) { ) {
let target = scene.target.to_sphere(time).center;
let eye = scene.camera.to_sphere(time).center;
let right = scene.camera.deriv(time);
let forward = target - eye;
let viewport = make_viewport(size.x, size.y); let viewport = make_viewport(size.x, size.y);
let location = convert_location(CamLoc { eye, forward, right }); let location = convert_location(scene.camera);
let spheres: Vec<_> = scene.spheres.iter().map(|p| p.to_sphere(time)).collect(); let data = TracerData::new(&device, &self.tracer, &scene.spheres);
let data = TracerData::new(&device, &self.tracer, &spheres);
self.tracer.render( self.tracer.render(
&mut render_pass.0, &mut render_pass.0,
&data, &data,

View File

@ -106,7 +106,7 @@ fn trace_fragment(in: Varying) -> vec3f {
var env: vec3f; // in kilonits var env: vec3f; // in kilonits
const ILLUMINANCE_LUX = 1e5; const ILLUMINANCE_LUX = 1e5;
const ANGULAR_DIAMETER_DEG = 0.5; // Sun: 0.5° const ANGULAR_DIAMETER_DEG = 20.0; // Sun: 0.5°
const PI = 3.141592653589793; const PI = 3.141592653589793;