diff options
| author | yum <yum.food.vr@gmail.com> | 2025-10-28 17:16:22 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-10-28 17:19:39 -0700 |
| commit | 6c93421c1a10caf9e4f6996e1109379a504c19a7 (patch) | |
| tree | 2008c48a91ff2e4257b0196f3aea5230095f600d | |
| parent | 6a10c50359aa62405118a78c69dccef0394f8591 (diff) | |
add ray marching skeleton...
| -rw-r--r-- | ray_marching.cginc | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/ray_marching.cginc b/ray_marching.cginc new file mode 100644 index 0000000..69f6438 --- /dev/null +++ b/ray_marching.cginc @@ -0,0 +1,36 @@ +#ifndef __RAY_MARCHING_INC +#define __RAY_MARCHING_INC + +struct RayMarchResult { + float3 objPos; + float3 objNorm; +}; + +float3 GetFragToOrigin(v2f i) { + return (i.color * 2.0f - 1.0f) / i.color.a; +} + +float4 GetRotation(v2f i, float2 uv_channels) { + float4 quat; + quat.xy = get_uv_by_channel(i, uv_channels.x); + quat.zw = get_uv_by_channel(i, uv_channels.y); + return quat; +} + +RayMarchResult march_c31_00(v2f i) { + float3 obj_space_camera_pos = mul(unity_WorldToObject, float4(_WorldSpaceCameraPos, 1.0)); + float3 frag_to_origin = GetFragToOrigin(i); + + float2 uv_channels = float2(_Custom30_Quaternion_UV_Channel_0, _Custom30_Quaternion_UV_Channel_1); + float4 quat = GetRotation(i, uv_channels); + float4 iquat = float4(-quat.xyz, quat.w); + + float3 ro = -frag_to_origin; + float3 rd = normalize(i.objPos - obj_space_camera_pos); + rd = rotate_vector(rd, iquat); + + ro -= rd * _Custom30_ro_Offset; +} + +#endif // __RAY_MARCHING_INC + |
