From f21483d8fe302ea952e6b5426c74c8d4713a6b4f Mon Sep 17 00:00:00 2001 From: yum Date: Mon, 3 Nov 2025 11:50:50 -0800 Subject: Fix `rd` normalization in ray marcher --- ray_marching.cginc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'ray_marching.cginc') diff --git a/ray_marching.cginc b/ray_marching.cginc index 39da35c..f6f4bab 100644 --- a/ray_marching.cginc +++ b/ray_marching.cginc @@ -14,13 +14,17 @@ struct RayMarchResult { float3 getObjPos(v2f i) { +#if defined(_VERTEX_DEFORMATION_FRAGMENT_NORMALS) || defined(_VERTEX_DEFORMATION_TESSELLATION) return i.objPos_orig; +#else + return i.objPos; +#endif } void GetRoRd(v2f i, out float3 ro, out float3 rd) { ro = getObjPos(i); - float3 rd_world = normalize(i.worldPos.xyz - _WorldSpaceCameraPos); - rd = mul((float3x3)unity_WorldToObject, rd_world); + float3 rd_world = i.worldPos.xyz - _WorldSpaceCameraPos; + rd = normalize(mul(unity_WorldToObject, rd_world)); } float map(float3 p) { @@ -88,6 +92,8 @@ float domain_repeat(inout float3 p) { d = map(p); } +#else + d = map(p); #endif return d; } @@ -130,20 +136,20 @@ void ray_march(inout v2f i) { } } - if (abs(d_cur) > kMinDist) { + if (abs(d_cur) >= kMinDist) { discard; } float3 lclPos = hit_pos; float3 lclNorm; float3 lclTan; + // TODO loop should say which primitive was hit, and be dispatched here. #if defined(_RAY_MARCHING_BALL) { float r = _Ray_Marching_Ball_Radius; map_ball_normal(r, lclPos, lclNorm, lclTan); } -#endif -#if defined(_RAY_MARCHING_HEXAGON) +#elif defined(_RAY_MARCHING_HEXAGON) { float r = _Ray_Marching_Hexagon_Radius; float h = _Ray_Marching_Hexagon_Height; -- cgit v1.2.3