diff options
Diffstat (limited to 'ray_marching.cginc')
| -rw-r--r-- | ray_marching.cginc | 15 |
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; |
