diff options
| author | yum <yum.food.vr@gmail.com> | 2025-11-01 16:25:42 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-11-01 16:25:42 -0700 |
| commit | ea09e3e5425d935ed9dd277c0f1a7488033d2ede (patch) | |
| tree | 8b2009c59409cde4f8e00c96e4ff1536359b9d9f /ray_marching.cginc | |
| parent | 195df414b5310dec05d509dcc7d91b786419e360 (diff) | |
add l2 -> l infinity norm deformation
Diffstat (limited to 'ray_marching.cginc')
| -rw-r--r-- | ray_marching.cginc | 19 |
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; |
