From 3357af747ac9c250f81caff2cc079d9b54f9b182 Mon Sep 17 00:00:00 2001 From: Dynamitos Date: Thu, 30 Jan 2025 23:36:48 +0100 Subject: [PATCH] nevermind, its not supposed to work, anyhit is not invoked on opaque --- res/shaders/raytracing/AnyHit.slang | 2 ++ res/shaders/raytracing/ClosestHit.slang | 5 +++-- res/shaders/raytracing/RayGen.slang | 1 + res/shaders/raytracing/RayTracingData.slang | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/res/shaders/raytracing/AnyHit.slang b/res/shaders/raytracing/AnyHit.slang index d34209e..caaadc8 100644 --- a/res/shaders/raytracing/AnyHit.slang +++ b/res/shaders/raytracing/AnyHit.slang @@ -7,6 +7,8 @@ import StaticMeshVertexData; [shader("anyhit")] void anyhit(inout RayPayload hitValue, in BuiltInTriangleIntersectionAttributes attr) { + if(RayTCurrent() > hitValue.t) + return; const float3 barycentricCoords = float3(1.0f - attr.barycentrics.x - attr.barycentrics.y, attr.barycentrics.x, attr.barycentrics.y); InstanceData inst = pScene.instances[InstanceID()]; diff --git a/res/shaders/raytracing/ClosestHit.slang b/res/shaders/raytracing/ClosestHit.slang index 03aa0e8..aa595ce 100644 --- a/res/shaders/raytracing/ClosestHit.slang +++ b/res/shaders/raytracing/ClosestHit.slang @@ -110,6 +110,7 @@ void closestHit(inout RayPayload hitValue, in BuiltInTriangleIntersectionAttribu hitValue.params = params.getLightingParameter(); hitValue.materialParams = params.getMaterialParameter(); + LightingParameter lightingParams = hitValue.params; lightingParams.viewDir_WS = -WorldRayDirection(); let brdf = Material.prepare(hitValue.materialParams); @@ -165,7 +166,7 @@ void closestHit(inout RayPayload hitValue, in BuiltInTriangleIntersectionAttribu payload.anyHit = true; payload.hit = false; payload.rndSeed = hitValue.rndSeed; - TraceRay(pRayTracingParams.scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, 0xff, 0, 0, 0, rayDesc, payload); + TraceRay(pRayTracingParams.scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES | RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH, 0xff, 0, 0, 0, rayDesc, payload); // we have missed all geometry, so directional light is affecting us if(!payload.hit) { @@ -185,7 +186,7 @@ void closestHit(inout RayPayload hitValue, in BuiltInTriangleIntersectionAttribu rayDesc.TMin = eps; rayDesc.Origin = x; rayDesc.Direction = l; - TraceRay(pRayTracingParams.scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES, 0xff, 0, 0, 0, rayDesc, payload); + TraceRay(pRayTracingParams.scene, RAY_FLAG_CULL_BACK_FACING_TRIANGLES | RAY_FLAG_ACCEPT_FIRST_HIT_AND_END_SEARCH, 0xff, 0, 0, 0, rayDesc, payload); // hitting only after the light if(!payload.hit) { diff --git a/res/shaders/raytracing/RayGen.slang b/res/shaders/raytracing/RayGen.slang index 5811094..7429aae 100644 --- a/res/shaders/raytracing/RayGen.slang +++ b/res/shaders/raytracing/RayGen.slang @@ -103,6 +103,7 @@ void raygen() RayPayload payload; // initialize accumulated radiance and bxdf payload.light=float3(0); + payload.t = 10000.0f; payload.emissive = 1; payload.depth = 1; payload.rndSeed = rndSeed + 1; diff --git a/res/shaders/raytracing/RayTracingData.slang b/res/shaders/raytracing/RayTracingData.slang index da6ad27..3d5acdc 100644 --- a/res/shaders/raytracing/RayTracingData.slang +++ b/res/shaders/raytracing/RayTracingData.slang @@ -18,6 +18,7 @@ struct RayPayload LightingParameter params; MaterialParameter materialParams; float3 light; + float t; float emissive; uint depth; bool hit;