summaryrefslogtreecommitdiffstats
path: root/ray_marching.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-11-01 16:25:42 -0700
committeryum <yum.food.vr@gmail.com>2025-11-01 16:25:42 -0700
commitea09e3e5425d935ed9dd277c0f1a7488033d2ede (patch)
tree8b2009c59409cde4f8e00c96e4ff1536359b9d9f /ray_marching.cginc
parent195df414b5310dec05d509dcc7d91b786419e360 (diff)
add l2 -> l infinity norm deformation
Diffstat (limited to 'ray_marching.cginc')
-rw-r--r--ray_marching.cginc19
1 files changed, 14 insertions, 5 deletions
diff --git a/ray_marching.cginc b/ray_marching.cginc
index 01011c6..513178b 100644
--- a/ray_marching.cginc
+++ b/ray_marching.cginc
@@ -29,12 +29,14 @@ RayMarchResult ray_march(v2f i) {
GetRoRd(i, ro, rd);
#if defined(_VERTEX_DEFORMATION)
+ float3 rd_perp = i.normal * dot(i.normal, rd);
+ float3 rd_tan = rd - rd_perp;
float3 tmp = ro;
- undeform_normal(tmp, tmp, rd);
- rd = normalize(rd);
+ undeform_normal(tmp, rd_perp, rd_tan);
+ rd = normalize(rd_perp + rd_tan);
#endif
- const float kMinDist = 1e-3;
+ const float kMinDist = 1e-4;
// TODO dial this in & parameterize
const float kMaxDist = 10;
// TODO parameterize
@@ -42,7 +44,11 @@ RayMarchResult ray_march(v2f i) {
float d_acc = 0;
for (uint ii = 0; ii < kMaxIter; ++ii) {
float3 p = ro + rd * d_acc;
- float d_cur = map(p);
+ float d_cur = 1e9;
+#if defined(_RAY_MARCHING_BALL_GRID)
+ float3 count = _Ray_Marching_Ball_Grid_Count;
+ d_cur = min(d_cur, map_ball_grid(p, count));
+#endif
d_acc += d_cur;
if (d_cur < kMinDist) {
break;
@@ -56,7 +62,10 @@ RayMarchResult ray_march(v2f i) {
float3 lclPos = ro + rd * d_acc;
float3 lclNorm;
float3 lclTan;
- map_normal(lclPos, lclNorm, lclTan);
+#if defined(_RAY_MARCHING_BALL_GRID)
+ float3 count = _Ray_Marching_Ball_Grid_Count;
+ map_ball_grid_normal(count, lclPos, lclNorm, lclTan);
+#endif
RayMarchResult res;
res.objPos = lclPos;