summaryrefslogtreecommitdiffstats
path: root/ray_marching_maps.slang
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-11-02 18:23:43 -0800
committeryum <yum.food.vr@gmail.com>2025-11-02 18:23:43 -0800
commit47b06274313d03ab3169ec07a87ac949bb5035fb (patch)
treea82097d9e23a649973e43d254739198d46fa5869 /ray_marching_maps.slang
parent0d7e2444c55eb2067792c6da57dad370e997fa4d (diff)
add hexagon sdf
Diffstat (limited to 'ray_marching_maps.slang')
-rw-r--r--ray_marching_maps.slang20
1 files changed, 19 insertions, 1 deletions
diff --git a/ray_marching_maps.slang b/ray_marching_maps.slang
index 002ef90..1b8fe84 100644
--- a/ray_marching_maps.slang
+++ b/ray_marching_maps.slang
@@ -1,7 +1,6 @@
#ifndef __RAY_MARCHING_MAPS_INC
#define __RAY_MARCHING_MAPS_INC
-
#include "math.cginc"
#include "pema99.cginc"
@@ -42,5 +41,24 @@ public void map_ball_normal(float r, inout float3 xyz, inout float3 normal,
R3R1_RAY_MARCH_NORMALS(xyz, normal, tangent, map_ball, r);
}
+[Differentiable]
+public float map_hexagon(float3 p, no_diff float2 h)
+{
+ float3 q = abs(p);
+
+ const float3 k = float3(-0.8660254, 0.5, 0.57735);
+ p = abs(p);
+ p.xy -= 2.0*min(dot(k.xy, p.xy), 0.0)*k.xy;
+ float2 d = float2(
+ length(p.xy - float2(clamp(p.x, -k.z*h.x, k.z*h.x), h.x))*sign(p.y - h.x),
+ p.z-h.y );
+ return min(max(d.x,d.y),0.0) + length(max(d,0.0));
+}
+
+public void map_hexagon_normal(float2 h, inout float3 xyz, inout float3 normal,
+ inout float3 tangent) {
+ R3R1_RAY_MARCH_NORMALS(xyz, normal, tangent, map_hexagon, h);
+}
+
#endif // __RAY_MARCHING_MAPS_INC