Fixed selective antialiasing

This commit is contained in:
Jonathan Flueren 2022-08-09 17:33:10 +02:00
parent a830e47ae9
commit 64f46fb251

View file

@ -69,9 +69,9 @@ fn main() {
let aspect_ratio = 10.0 / 7.5; //16.0 / 9.0; let aspect_ratio = 10.0 / 7.5; //16.0 / 9.0;
let image_width = 400; let image_width = 400;
let image_height = (image_width as f64 / aspect_ratio) as u32; let image_height = (image_width as f64 / aspect_ratio) as u32;
let samples_per_pixel = 50_u32; let samples_per_pixel = 100_u32;
let max_depth = 50; let max_depth = 50;
let antialiasing_threshold = 0.3; // at what diff between two colors will a pixel be antialiased let antialiasing_threshold = 0.2; // at what diff between two colors will a pixel be antialiased
let vfov = 40.0; let vfov = 40.0;
let lookfrom = Point3::new(2.0, 0.8, 3.0); let lookfrom = Point3::new(2.0, 0.8, 3.0);
@ -81,7 +81,7 @@ fn main() {
let aperture = 0.0; // disable depth of field let aperture = 0.0; // disable depth of field
// limit rayon multithreading thread count // limit rayon multithreading thread count
let thread_count = 4; // if 0, for each logical cpu core a thread wil be created let thread_count = 0; // if 0, for each logical cpu core a thread wil be created
if thread_count > 0 { if thread_count > 0 {
env::set_var("RAYON_NUM_THREADS", thread_count.to_string()); env::set_var("RAYON_NUM_THREADS", thread_count.to_string());
} }
@ -196,21 +196,18 @@ fn main() {
for i in 0..image_width { for i in 0..image_width {
if samples_per_pixel > 0 && antialiasing[j as usize][i as usize] { if samples_per_pixel > 0 && antialiasing[j as usize][i as usize] {
let mut pixel_color = Color::null(); let mut pixel_color = Color::null();
for _ in 0..samples_per_pixel { for _ in 0..samples_per_pixel {
let u = (i as f64 + utility::random_f64()) / (image_width - 1) as f64; let u = (i as f64 + utility::random_f64()) / (image_width - 1) as f64;
let v = (j as f64 + utility::random_f64()) / (image_height - 1) as f64; let v = (image_height as f64- 1.0 -(j as f64 + utility::random_f64())) / (image_height - 1) as f64;
let r = cam.get_ray(u, v); let new_pixel_color = ray_color(&cam.get_ray(u, v), &world, max_depth);
dbg!(ray_color(&r, &world, max_depth)); pixel_color += new_pixel_color;
pixel_color += ray_color(&r, &world, max_depth);
} }
// Correct antialiasing gamma // Correct antialiasing gamma
pixel_color = Color::new( let fin_color = (1.0/samples_per_pixel as f64) * pixel_color;
pixel_color.x() / samples_per_pixel as f64, //println!("x: {}, y: {}, z: {}", pixel_color.x(), pixel_color.y(), pixel_color.z());
pixel_color.y() / samples_per_pixel as f64,
pixel_color.z() / samples_per_pixel as f64, colors.push(fin_color);
);
println!("x: {}, y: {}, z: {}", pixel_color.x(), pixel_color.y(), pixel_color.z());
colors.push(pixel_color);
} else { } else {
colors.push(color_lines[j as usize][i as usize]); colors.push(color_lines[j as usize][i as usize]);
} }
@ -259,20 +256,20 @@ fn from_obj(path: &str) -> HittableList {
14.0 / 255.0, 14.0 / 255.0,
))); )));
world.add(Box::<Sphere>::new(Sphere::new( world.add(Box::<Sphere>::new(Sphere::new(
Point3::new(0.0, -5005.0, 0.0), Point3::new(-500.0, -5005.0, -500.0),
5000.0, 5000.0,
material_ground.clone(), material_ground.clone(),
))); )));
*/ */
//let material = Arc::new(Lambertian::new(&Color::new( let material = Arc::new(Lambertian::new(&Color::new(
// 77.0 / 255.0, 77.0 / 255.0,
// 77.0 / 255.0, 77.0 / 255.0,
// 118.0 / 255.0, 118.0 / 255.0,
//))); )));
//let material = Arc::new(Dielectric::new(2.0)); //let material = Arc::new(Dielectric::new(2.0));
//let material = Arc::new(Metal::new(&Color::new(0.9, 0.9, 0.7), 1.0)); //let material = Arc::new(Metal::new(&Color::new(0.9, 0.9, 0.7), 1.0));
let material = Arc::new(Rainbow::new()); //let material = Arc::new(Rainbow::new());
let cornell_box = tobj::load_obj(path, &tobj::OFFLINE_RENDERING_LOAD_OPTIONS); let cornell_box = tobj::load_obj(path, &tobj::OFFLINE_RENDERING_LOAD_OPTIONS);
let (models, materials) = cornell_box.expect("Failed to load OBJ file"); let (models, materials) = cornell_box.expect("Failed to load OBJ file");