#ifndef _UNIFIEDRAYTRACING_TRACERAYANDQUERYHIT_HLSL_ #define _UNIFIEDRAYTRACING_TRACERAYANDQUERYHIT_HLSL_ #define UNIFIED_RT_PAYLOAD UnifiedRT::Hit #ifndef UNIFIED_RT_RAYGEN_FUNC #define UNIFIED_RT_RAYGEN_FUNC RayGenExecute #endif #define UNIFIED_RT_CLOSESTHIT_FUNC ClosestHitExecute #include "Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/TraceRay.hlsl" void ClosestHitExecute(UnifiedRT::HitContext hitContext, inout UnifiedRT::Hit payload) { payload.instanceID = hitContext.InstanceID(); payload.primitiveIndex = hitContext.PrimitiveIndex(); payload.uvBarycentrics = hitContext.UvBarycentrics(); payload.hitDistance = hitContext.RayTCurrent(); payload.isFrontFace = hitContext.IsFrontFace(); } namespace UnifiedRT { Hit TraceRayClosestHit(DispatchInfo dispatchInfo, RayTracingAccelStruct accelStruct, uint instanceMask, Ray ray, uint rayFlags) { Hit payload= (Hit)0; payload.instanceID = -1; TraceRay(dispatchInfo, accelStruct, instanceMask, ray, rayFlags | kRayFlagForceOpaque, payload); return payload; } bool TraceRayAnyHit(DispatchInfo dispatchInfo, RayTracingAccelStruct accelStruct, uint instanceMask, Ray ray, uint rayFlags) { Hit payLoadShadow = (Hit)0; payLoadShadow.instanceID = -1; TraceRay(dispatchInfo, accelStruct, instanceMask, ray, rayFlags | kRayFlagForceOpaque | kRayFlagAcceptFirstHitAndEndSearch, payLoadShadow); return payLoadShadow.IsValid(); } } // namespace UnifiedRT #endif // _UNIFIEDRAYTRACING_TRACERAYANDQUERYHIT_HLSL_