summaryrefslogtreecommitdiffstats
path: root/ray_marching.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'ray_marching.cginc')
-rw-r--r--ray_marching.cginc15
1 files changed, 7 insertions, 8 deletions
diff --git a/ray_marching.cginc b/ray_marching.cginc
index d989dc8..6184881 100644
--- a/ray_marching.cginc
+++ b/ray_marching.cginc
@@ -19,9 +19,8 @@ float3 getObjPos(v2f i)
void GetRoRd(v2f i, out float3 ro, out float3 rd) {
ro = getObjPos(i);
- float3 objCamPos = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1));
- float3 obj_space_camera_pos = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1.0));
- rd = normalize(getObjPos(i) - obj_space_camera_pos);
+ float3 rd_world = normalize(i.worldPos.xyz - _WorldSpaceCameraPos);
+ rd = mul((float3x3)unity_WorldToObject, rd_world);
}
void ray_march(inout v2f i) {
@@ -30,11 +29,11 @@ void ray_march(inout 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, rd_perp, rd_tan);
- rd = normalize(rd_perp + rd_tan);
+ // TODO optimize, we don't need to pass in `dummy`.
+ float3 dummy = 0;
+ float3 tmp_pos = ro;
+ undeform_normal(tmp_pos, dummy, rd);
+ rd = normalize(rd);
#endif
const float kMinDist = _Ray_Marching_Min_Dist;