Compare commits

..

4 Commits

Author SHA1 Message Date
bb83f3bc47 Add new screenshot 2024-12-29 22:31:12 +03:00
b66a81335b Change radius distribution 2024-12-29 22:23:23 +03:00
811c5307e5 Rename distributions 2024-12-29 22:15:27 +03:00
221fbfbcb8 Remove color variance
It didn’t look all that well on the new background
2024-12-29 22:13:17 +03:00
3 changed files with 24 additions and 27 deletions

View File

@ -3,3 +3,4 @@
Basic GPU-side ray tracing example. `cargo run --bin envmap` to prepare the sky, then `cargo run` to see it moving!
![Screenshot](screenshot.jpg)
![Screenshot](screenshot2.jpg)

BIN
screenshot2.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

View File

@ -3,7 +3,6 @@ use rand_distr::{Bernoulli, Distribution, Uniform};
pub struct SphereParams {
pub radius: f32,
pub color: Vec3,
pub alpha: f32,
pub glossiness: f32,
pub origin: Vec3,
@ -13,27 +12,25 @@ pub struct SphereParams {
}
pub struct SphereParamsDistribution {
pub drad: Uniform<f32>,
pub dpos: Uniform<f32>,
pub dcol: Uniform<f32>,
pub demit: Bernoulli,
pub dampl: Uniform<f32>,
pub dfreq: Uniform<f32>,
pub dphase: Uniform<f32>,
pub dgloss: Uniform<f32>,
pub rad: Uniform<f32>,
pub pos: Uniform<f32>,
pub emit: Bernoulli,
pub ampl: Uniform<f32>,
pub freq: Uniform<f32>,
pub phase: Uniform<f32>,
pub gloss: Uniform<f32>,
}
impl Default for SphereParamsDistribution {
fn default() -> Self {
Self {
drad: Uniform::new(0.01, 0.10),
dpos: Uniform::new(-1.0, 1.0),
dcol: Uniform::new(0.0, 1.0),
demit: Bernoulli::new(0.1).unwrap(),
dampl: Uniform::new(0.3, 0.8),
dfreq: Uniform::new(0.2, 1.5),
dphase: Uniform::new(0., 2. * std::f32::consts::PI),
dgloss: Uniform::new(0., 1.),
rad: Uniform::new(-6., -4.),
pos: Uniform::new(-1.0, 1.0),
emit: Bernoulli::new(0.1).unwrap(),
ampl: Uniform::new(0.3, 0.8),
freq: Uniform::new(0.2, 1.5),
phase: Uniform::new(0., 2. * std::f32::consts::PI),
gloss: Uniform::new(0., 1.),
}
}
}
@ -41,14 +38,13 @@ impl Default for SphereParamsDistribution {
impl SphereParamsDistribution {
pub fn make_params(&self, rgen: &mut impl rand::Rng) -> SphereParams {
SphereParams {
origin: self.dpos.sample3(rgen),
radius: self.drad.sample(rgen),
color: self.dcol.sample3(rgen).normalize(),
alpha: if self.demit.sample(rgen) { 10.0 } else { 0.0 },
glossiness: self.dgloss.sample(rgen),
amplitudes: self.dampl.sample3(rgen),
frequencies: self.dfreq.sample3(rgen),
phases: self.dphase.sample3(rgen),
origin: self.pos.sample3(rgen),
radius: 2.0f32.powf(self.rad.sample(rgen)),
alpha: if self.emit.sample(rgen) { 10.0 } else { 0.0 },
glossiness: self.gloss.sample(rgen),
amplitudes: self.ampl.sample3(rgen),
frequencies: self.freq.sample3(rgen),
phases: self.phase.sample3(rgen),
}
}
}
@ -57,9 +53,9 @@ impl SphereParams {
pub fn to_sphere(&self, time: f32) -> crate::Sphere {
let center = self.origin + self.amplitudes * (self.frequencies * time + self.phases).map(|x| x.sin());
let radius = self.radius;
let emit_color = self.alpha * self.color;
let emit_color = self.alpha * vec3(0.9, 0.6, 0.1);
let glossiness = self.glossiness;
let reflect_color = 0.6 * self.color + Vec3::splat(0.2);
let reflect_color = Vec3::splat(0.8);
crate::Sphere {
center,
radius,