diff options
Diffstat (limited to 'ray_marching.cginc')
| -rw-r--r-- | ray_marching.cginc | 16 |
1 files changed, 11 insertions, 5 deletions
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; |
