1234567891011121314151617181920212223242526272829303132 |
- #ifndef _UNIFIEDRAYTRACING_COMMON_HLSL_
- #define _UNIFIEDRAYTRACING_COMMON_HLSL_
-
- #include "Packages/com.unity.rendering.light-transport/Runtime/UnifiedRayTracing/Bindings.hlsl"
- #include "Packages/com.unity.rendering.light-transport/Runtime/UnifiedRayTracing/FetchGeometry.hlsl"
-
- #define K_T_MAX 400000
- #ifndef FLT_EPSILON
- #define FLT_EPSILON 1.192092896e-07F
- #endif
- #ifndef FLT_MAX
- #define FLT_MAX 3.402823e+38
- #endif
-
- float Max3(float3 val)
- {
- return max(max(val.x, val.y), val.z);
- }
-
- // Adapted from RayTracing Gems, A Fast and Robust Method for Avoiding Self-Intersection
- // - Dropped the exact +N ulp computation, instead use, N * epsilon
- // - Use max of distance components instead of per component offset
- // - Use less conservative factors for error estimation
- float3 OffsetRayOrigin(float3 p, float3 n, float customOffset = 0.0f)
- {
- float distanceToOrigin = Max3(abs(p));
- float offset = (distanceToOrigin < 1 / 32.0f) ? FLT_EPSILON * 64.0f : FLT_EPSILON * 64.0f * distanceToOrigin;
-
- return p + (offset + customOffset) * n;
- }
-
- #endif
|