summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ray_marching.cginc16
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;