summaryrefslogtreecommitdiffstats
path: root/custom30.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-06-04 15:15:35 -0700
committeryum <yum.food.vr@gmail.com>2025-06-04 15:15:35 -0700
commit50b0b6c8b292e966a43fe56c6e0bf0a20c1d5b62 (patch)
tree5ce9ac08e15f016ad5ece59073883cc36f8f1bc4 /custom30.cginc
parent22125db9ed9241cd6613b344a4fa7a99c72b3cfa (diff)
More ssao and c30 cleanups
Diffstat (limited to 'custom30.cginc')
-rw-r--r--custom30.cginc28
1 files changed, 22 insertions, 6 deletions
diff --git a/custom30.cginc b/custom30.cginc
index be4bd4c..2bf8ec2 100644
--- a/custom30.cginc
+++ b/custom30.cginc
@@ -58,7 +58,24 @@ float distance_from_hex_comb(
float half_period = period * 0.5;
float3 which = abs(floor((p_hex + half_period) / period));
- p_hex = glsl_mod(p_hex + half_period, period) - half_period;
+
+ // The original code here was this:
+ // p_hex = glsl_mod(p_hex + half_period, period) - half_period;
+ //
+ // But you can simplify it. Given the definition of glsl_mod:
+ // #define glsl_mod(x,y) (((x)-(y)*floor((x)/(y))))
+ //
+ // You can plug in terms:
+ // (p_hex + half_period) - (period) * floor((p_hex + half_period) / period)
+ // = p_hex + half_period - period * floor(p_hex/period + 0.5)
+ //
+ // For all x,
+ // round(x) = floor(x + 0.5)
+ //
+ // Continuing to simplify:
+ // (p_hex + half_period - period * round(p_hex/period)) - half_period
+ // = p_hex - period * round(p_hex / period)
+ p_hex = p_hex - period * round(p_hex / period);
p.xy = hex_to_cart(p_hex);
@@ -181,13 +198,13 @@ Custom30Output BasicCube(v2f i) {
clip(epsilon - d);
#endif
float3 objPos = ro + rd * d_acc;
- o.objPos = objPos;
// Transform from SDF space back to object space
float3 objSpacePos = objPos + (i.objPos + frag_to_origin);
+ o.objPos = objSpacePos;
float4 clipPos = UnityObjectToClipPos(objSpacePos);
o.depth = clipPos.z / clipPos.w;
- float3 sdfNormal = BasicCube_normal(objPos) * float3(-1, 1, 1);
+ float3 sdfNormal = BasicCube_normal(objPos);
o.normal = UnityObjectToWorldNormal(sdfNormal);
return o;
@@ -242,9 +259,9 @@ Custom30Output BasicWedge(v2f i) {
clip(epsilon - d);
#endif
float3 objPos = ro + rd * d_acc;
- o.objPos = objPos;
// Transform from SDF space back to object space
float3 objSpacePos = objPos + (i.objPos + frag_to_origin);
+ o.objPos = objSpacePos;
float4 clipPos = UnityObjectToClipPos(objSpacePos);
o.depth = clipPos.z / clipPos.w;
@@ -327,9 +344,8 @@ Custom30Output BasicPlatform(v2f i) {
clip(epsilon - d);
#endif
float3 objPos = ro + rd * d_acc;
- o.objPos = objPos;
- // Transform from SDF space back to object space
float3 objSpacePos = objPos + (i.objPos + frag_to_origin);
+ o.objPos = objSpacePos;
float4 clipPos = UnityObjectToClipPos(objSpacePos);
o.depth = clipPos.z / clipPos.w;