                 o.vertex = UnityObjectToClipPos(v.vertex);
                 o.pos = v.vertex.xyz;
                 o.uv = v.uv;
+                o.localSpaceCameraPos = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1.0)).xyz;
+                o.localLightDir = normalize(mul(unity_WorldToObject, _WorldSpaceLightPos0).xyz);
+                o.lightCol = _LightColor0.rgb * LIGHT_ATTENUATION(i);
 
                 return o;
             }

                const float4 col = float4((diffuse + ambient) * _Color.rgb + specular, _Color.a);
#endif  // _ENABLE_REFLECTION_PROBE

                pout o;
                o.color = col;
                const float4 projectionPos = UnityObjectToClipPos(float4(finalPos, 1.0));
                o.depth = projectionPos.z / projectionPos.w;

                return o;
            }



                // Loop of Ray Marching.
                for (int i = 0; i < _MaxLoop; i++) {
                    // Position of the tip of the ray.
                    const float3 p = fi.localSpaceCameraPos + rayDir * t;
                    d = sdf(p * _Scale) * invScale;

                    // Break this loop if the ray goes too far or collides.
