From 512b5c91fc117dac730f150ecd0f1f2f44886667 Mon Sep 17 00:00:00 2001 From: Altagos Date: Fri, 01 Mar 2024 13:15:10 +0000 Subject: [PATCH] fuzzy metal --- src/main.zig | 4 ++-- src/material.zig | 9 ++++++--- 2 file(s) changed, 8 insertion(s)(+), 5 deletion(s)(-) diff --git a/src/main.zig b/src/main.zig --- a/src/main.zig +++ b/src/main.zig @@ -29,8 +29,8 @@ // Setting up the world var material_ground = Material.lambertian(zm.f32x4(0.8, 0.8, 0.0, 1.0)); var material_center = Material.lambertian(zm.f32x4(0.7, 0.3, 0.3, 1.0)); - var material_left = Material.metal(zm.f32x4(0.8, 0.8, 0.8, 1.0)); - var material_right = Material.metal(zm.f32x4(0.8, 0.6, 0.2, 1.0)); + var material_left = Material.metal(zm.f32x4(0.8, 0.8, 0.8, 1.0), 0.3); + var material_right = Material.metal(zm.f32x4(0.8, 0.6, 0.2, 1.0), 1.0); var world = HittableList.init(allocator); try world.add(Hittable.initSphere(Sphere{ .center = zm.f32x4(0, -100.5, -1, 0), .radius = 100, .mat = &material_ground })); diff --git a/src/material.zig b/src/material.zig --- a/src/material.zig +++ b/src/material.zig @@ -12,8 +12,8 @@ return .{ .lambertian = .{ .albedo = albedo } }; } - pub fn metal(albedo: zm.Vec) Material { - return .{ .metal = .{ .albedo = albedo } }; + pub fn metal(albedo: zm.Vec, fuzz: f32) Material { + return .{ .metal = .{ .albedo = albedo, .fuzz = if (fuzz < 1) fuzz else 1.0 } }; } pub fn scatter(self: *Material, r: *Ray, rec: *hittable.HitRecord, attenuation: *zm.Vec) ?Ray { @@ -39,10 +39,13 @@ pub const Metal = struct { albedo: zm.Vec, + /// fuzz < 1 + fuzz: f32, pub fn scatter(self: *Metal, r: *Ray, rec: *hittable.HitRecord, attenuation: *zm.Vec) ?Ray { const reflected = util.reflect(zm.normalize3(r.dir), rec.normal); + const scattered = Ray.init(rec.p, reflected + zm.f32x4s(self.fuzz) * util.randomUnitVec()); attenuation.* = self.albedo; - return Ray.init(rec.p, reflected); + return if (zm.dot3(scattered.dir, rec.normal)[0] > 0) scattered else null; } }; -- tangled.sh