From d4f02b4510699796a5091af175783591ebe4defa Mon Sep 17 00:00:00 2001
From: Kevin Reid <kpreid@switchb.org>
Date: Sun, 4 Aug 2024 16:04:55 -0700
Subject: [PATCH] Store only `f32` direction vectors instead of full rays in
 the light chart.

---
 .../test-record-lighting-bench.png            | Bin 4023 -> 4022 bytes
 all-is-cubes/build.rs                         |  19 +++++++++++-------
 all-is-cubes/src/space/light/chart/local.rs   |   2 +-
 all-is-cubes/src/space/light/chart/shared.rs  |   8 +++++---
 all-is-cubes/src/space/light/updater.rs       |  15 +++++---------
 .../expected/renderers/fog-None-ray.png       | Bin 7737 -> 7662 bytes
 .../expected/renderers/light-Flat-all.png     | Bin 717 -> 705 bytes
 .../expected/renderers/light-Smooth-all.png   | Bin 6620 -> 6589 bytes
 8 files changed, 23 insertions(+), 21 deletions(-)

diff --git a/all-is-cubes-desktop/tests/end-to-end/record-ok-png.out/test-record-lighting-bench.png b/all-is-cubes-desktop/tests/end-to-end/record-ok-png.out/test-record-lighting-bench.png
index 9ffed279cbafc159f0467d5189ac55fe15680bbb..ad602cba96958b5cbb702ae98d427ed513ef8418 100644
GIT binary patch
delta 3864
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
aCjSFJ8Rp}pYPuKz0000<MNUMnLSTYfc6+A)

delta 3865
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
bi8uKp5Y6G^_iNzb00000NkvXXu0mjf+|_gJ

diff --git a/all-is-cubes/build.rs b/all-is-cubes/build.rs
index eccae6b77..5ae7ddc3f 100644
--- a/all-is-cubes/build.rs
+++ b/all-is-cubes/build.rs
@@ -8,6 +8,8 @@ extern crate alloc;
 use std::path::{Path, PathBuf};
 use std::{env, fs};
 
+use euclid::Vector3D;
+
 use all_is_cubes_base::math::{self, Face6, FaceMap, FreePoint, FreeVector};
 use all_is_cubes_base::raycast::Ray;
 
@@ -24,8 +26,6 @@ const RAY_DIRECTION_STEP: isize = 5;
 // TODO: Use more rays once we have a more efficient chart format that
 // deduplicates work of near-parallel rays.
 fn generate_light_ray_pattern() -> Vec<OneRay> {
-    let origin = FreePoint::new(0.5, 0.5, 0.5);
-
     let mut rays = Vec::new();
 
     // TODO: octahedron instead of cube
@@ -36,7 +36,7 @@ fn generate_light_ray_pattern() -> Vec<OneRay> {
                     || y.abs() == RAY_DIRECTION_STEP
                     || z.abs() == RAY_DIRECTION_STEP
                 {
-                    let direction = FreeVector::new(x as f64, y as f64, z as f64).normalize();
+                    let direction = Vector3D::new(x as f32, y as f32, z as f32).normalize();
 
                     let mut cosines = FaceMap::repeat(0.0f32);
                     for face in Face6::ALL {
@@ -45,7 +45,7 @@ fn generate_light_ray_pattern() -> Vec<OneRay> {
                         cosines[face] = cosine;
                     }
 
-                    rays.push(OneRay::new(Ray::new(origin, direction), cosines))
+                    rays.push(OneRay::new(direction, cosines))
                 }
             }
         }
@@ -59,7 +59,10 @@ fn generate_light_propagation_chart(rays: &[OneRay]) -> Vec<chart_schema::Steps>
     let maximum_distance = 127.0;
     rays.iter()
         .map(|&info| {
-            let ray: Ray = info.ray.into();
+            let ray: Ray = Ray::new(
+                FreePoint::splat(0.5),
+                Vector3D::from(info.direction).map(|c| f64::from(f32::from(c))),
+            );
             chart_schema::Steps {
                 info,
                 relative_cube_sequence: ray
@@ -128,8 +131,10 @@ use chart_schema::{OneRay, TargetEndian};
 #[path = "src/space/light/chart/"]
 mod chart_schema {
     use crate::math::FaceMap;
+    use all_is_cubes_base::math::Cube;
     use all_is_cubes_base::raycast::Ray;
     use core::fmt;
+    use euclid::Vector3D;
     use num_traits::{FromBytes, ToBytes};
     use std::env;
 
@@ -138,10 +143,10 @@ mod chart_schema {
     pub(crate) use shared::{IndirectSteps, OneRay, Step, Steps};
 
     impl OneRay {
-        pub fn new(ray: Ray, face_cosines: FaceMap<f32>) -> Self {
+        pub fn new(direction: Vector3D<f32, Cube>, face_cosines: FaceMap<f32>) -> Self {
             let face_cosines = face_cosines.map(|_, cosine| (cosine * 255.0).round() as u8);
             Self {
-                ray: ray.into(),
+                direction: direction.map(TargetEndian::from).into(),
                 face_cosines: [
                     face_cosines.nx,
                     face_cosines.ny,
diff --git a/all-is-cubes/src/space/light/chart/local.rs b/all-is-cubes/src/space/light/chart/local.rs
index 2f36fc6bd..f267969ae 100644
--- a/all-is-cubes/src/space/light/chart/local.rs
+++ b/all-is-cubes/src/space/light/chart/local.rs
@@ -15,7 +15,7 @@ impl chart::OneRay {
             py,
             pz,
         }
-        .map(|_, byte| byte as f32 / 255.0f32)
+        .map(|_, byte| f32::from(byte) / 255.0f32)
     }
 }
 
diff --git a/all-is-cubes/src/space/light/chart/shared.rs b/all-is-cubes/src/space/light/chart/shared.rs
index f2fb8a8a8..585f7f3bf 100644
--- a/all-is-cubes/src/space/light/chart/shared.rs
+++ b/all-is-cubes/src/space/light/chart/shared.rs
@@ -14,12 +14,14 @@ use super::TargetEndian;
 #[derive(Clone, Copy, Debug, bytemuck::Pod, bytemuck::Zeroable)]
 #[repr(C)]
 pub(crate) struct OneRay {
-    /// Ray whose origin is within the [0,0,0]..[1,1,1] cube and direction
-    /// is a unit vector in the direction of this light ray.
-    pub ray: Ray,
+    /// Unit direction vector specifying the ray direction.
+    pub direction: [TargetEndian<f32>; 3],
+
     /// `FaceMap` data which stores the cosine (rescaled to 0-255)
     /// between each face normal and this ray.
     pub face_cosines: [u8; 6],
+
+    /// Guaranteed zero padding to make up a multiple of 4 bytes.
     pub _padding: [u8; 2],
 }
 
diff --git a/all-is-cubes/src/space/light/updater.rs b/all-is-cubes/src/space/light/updater.rs
index a918fb8d2..88703b6e2 100644
--- a/all-is-cubes/src/space/light/updater.rs
+++ b/all-is-cubes/src/space/light/updater.rs
@@ -5,6 +5,7 @@ use alloc::boxed::Box;
 use alloc::vec::Vec;
 use core::cmp::Ordering;
 use core::{fmt, mem};
+use euclid::Vector3D;
 
 use manyfmt::Fmt;
 
@@ -14,8 +15,7 @@ use rayon::iter::{IntoParallelRefMutIterator as _, ParallelIterator as _};
 use super::debug::LightComputeOutput;
 use crate::block::{self, EvaluatedBlock};
 use crate::math::{
-    Cube, CubeFace, Face6, Face7, FaceMap, FreeCoordinate, Geometry, NotNan, OpacityCategory, Rgb,
-    Rgba, Vol,
+    Cube, CubeFace, Face6, Face7, FaceMap, Geometry, NotNan, OpacityCategory, Rgb, Rgba, Vol,
 };
 use crate::raycast::Ray;
 use crate::space::light::{
@@ -400,7 +400,7 @@ impl LightStorage {
                     continue;
                 }
                 let mut ray_state =
-                    LightRayState::new(cube, ray_info.ray.into(), ray_weight_by_faces);
+                    LightRayState::new(cube, ray_info.direction.into(), ray_weight_by_faces);
 
                 // Stores the light value that might have been fetched, if it was, from the previous
                 // step's cube_ahead, which is the current step's cube_behind.
@@ -644,13 +644,8 @@ impl LightRayState {
     /// * `abstract_ray`: ray as if we were lighting the [0, 0, 0] cube
     /// * `ray_weight_by_faces`: how much influence this ray should have on the
     ///   total illumination
-    fn new(origin_cube: Cube, abstract_ray: Ray, ray_weight_by_faces: f32) -> Self {
-        let translated_ray = abstract_ray.translate(
-            origin_cube
-                .lower_bounds()
-                .map(FreeCoordinate::from)
-                .to_vector(),
-        );
+    fn new(origin_cube: Cube, direction: Vector3D<f32, Cube>, ray_weight_by_faces: f32) -> Self {
+        let translated_ray = Ray::new(origin_cube.midpoint(), direction.map(f64::from));
         LightRayState {
             alpha: 1.0,
             ray_weight_by_faces,
diff --git a/test-renderers/expected/renderers/fog-None-ray.png b/test-renderers/expected/renderers/fog-None-ray.png
index 8b33393488ddf94e4fdfc7b56cd9a046a82eb204..363e8de89f41f26a947421a9347d50d016c66e71 100644
GIT binary patch
literal 7662
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
PTm%(`kMeauP}KhbnH3JE

literal 7737
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

diff --git a/test-renderers/expected/renderers/light-Flat-all.png b/test-renderers/expected/renderers/light-Flat-all.png
index 3b41536d17803475a1f89348452b2ac3ac2e0c0b..02b34f4ab4714b8560a13fae536c38dd0ebae328 100644
GIT binary patch
delta 629
zcmX@hdXRO3N_~f?i(^Q|t+#g!vu`^{v=`RT56Cf}5_0tAg*1(yYD>Q~SG)=m;NX#D
zVr*nT$ZO7FlX7B$Vlo@Q?530#mlkeb<+gzBrsdxEp5fZ(n9t`N`k$_1Auk!3Ed6v=
zUQxKKVVIe2om%SkouX?0gMHJU%vJ4P^*x_&@r#Jt6*f~vj;GfvGsrMJ{q>OH)K_-S
z4+#b=4OxF37_R<ec*C$@o*YB?*I$2`Os@UsF38NC-nIM4RC$M+cgqvClUtrX=dP4x
zd{nV<Yfh##BLgbfkj}9FODpS-58p}`Y<}wgoVWWR!w(6YWQOBkb~Ar4=3ow3C(pN_
z^zU6p?G?Q9BpXtGsWY1KS6tV2{XX3-;^XVtd*oO9+z6e;vHIF~hJyTEF;SI~*LWsR
zWE9o6bPzea<!i-0euoH#lZ@&Njto!K&%`ori^+`B7yWBDeVgCYySF1|usiJEoR_zX
z3#dm-n&F0`gW<>A&+|S%ufKaPx?23~meQRw-)Q~zX9UUDGyG=UFz<Tp&yowX*c+bx
ze;8F+&8jd{u0es}(@Vw|(hnZ)t}n6)Hk~OGc5?n3h8zZ)s&~u}zRxaLmHCbX)#E@O
z8+$>j@8Z`cg5SP=IWSkg;Z@P5tZR%6PkL<_qn5KPC^Qt*+B3ZU`e!<;!hE@ge~dPD
zS-LCZSFQT4g<%v6i--OtH~Ic$(XTlYj2EA{agUqj!pCIyLtm|#ro?A4L@~%*W)_eE
u2BaRt)nwTQbw-uf)y!Akhcaxddn3Pq<B5gE<j>I{V?AB{T-G@yGywn}Qw2o;

delta 639
zcmX@edX{y9O8pd17srr_TW{~|&$=BT(N=ih|G!12;uY0MrxzEjPfp<GEP1ISz+of8
z!^Y2kZh_+iL+3U=Nvnzz6I7k2@y!iYWxDEd?&5dZmp8nA9Wa*u_^*fc_$K$2zS*g>
z>eAMIs#)_!qrRs*Z&S#OKS66Zeo8A0DzlmCvwZojV~?FZ15Kps86PlcT;pdCSYz+e
zklw7wFy%Enlg4%S1b&9AUl?|*y7pdt!M1<G4xgREXMOs8W2(Hv#aa~|<FFexo=-|y
zIu@m5pH7Y9W<UiE+gU%Pd<cw;X!z{!-gs`B`8nxHii|6G;|v>;f9++ekZ559*?D2t
zzc@|C61Md`4n}{w8O}1_i`RDTzaAFx@AvLKyQd14ZSH8D`nsAS!@M-b$9D2WMp1(&
z4D*+(->R~?&#s`;aGz0~!Iq)KGVvN?PUVuyy&+%H^>X)4_@1DgD97;k+^styqCidJ
zG8?oTZtJXF`ajb9YP*~G|6PBtMJ+Hr?PEC2X7gf@g8GJ7MicpSZ-o<TLrXtCt<9EW
z_+)?B*H`PkFQdmYb_I@xnkt50Y!!9y=g*(F!pdUCl#}*188aAiYThwFU|sO@Q(5u5
zG}I6P@(e5*USGL3`}iTf{rifavoEN!xG9yHCXl+-hB0b6yMjVPL9IQ*+s8lui<f}S
zXaDeH+mc-?SG`+}VU&PC!pG#m*Kd9lWXm!>@s2#ZbEC~w))VG$e{52I_)C^?Q3jg>
zcSCX&Llg6sb@y2pM94FUH>A|&Hx$(}#8utg->iM~QT$fNe;|WBUHx3vIVCg!01&_p
ArvLx|

diff --git a/test-renderers/expected/renderers/light-Smooth-all.png b/test-renderers/expected/renderers/light-Smooth-all.png
index b7ba73d41616a21396aeee71ac10c04cc8d07521..e524fd5bfb560808d390b60f24be2dbc1401f4b3 100644
GIT binary patch
literal 6589
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

literal 6620
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
a`u_lRV4}~SE-h350000<MNUMnLSTaY)bIiT