From e75904170b8c7e73be01e12e1b6a99b62cd591be Mon Sep 17 00:00:00 2001 From: luboslenco Date: Tue, 10 Dec 2024 22:17:20 +0100 Subject: [PATCH] Improve brute pathtracer --- ....spirv => raytrace_brute_forge_core.spirv} | Bin .../raytrace/raytrace_brute_forge_full.spirv | Bin 0 -> 25052 bytes .../raytrace/raytrace_brute_full.spirv | Bin 24848 -> 24768 bytes base/shaders/raytrace/src/build_dxr.bat | 2 ++ base/shaders/raytrace/src/build_vkrt.sh | 3 +- base/shaders/raytrace/src/raytrace_brute.hlsl | 26 +++++++++--------- 6 files changed, 17 insertions(+), 14 deletions(-) rename base/shaders/raytrace/{raytrace_brute_forge.spirv => raytrace_brute_forge_core.spirv} (100%) create mode 100644 base/shaders/raytrace/raytrace_brute_forge_full.spirv diff --git a/base/shaders/raytrace/raytrace_brute_forge.spirv b/base/shaders/raytrace/raytrace_brute_forge_core.spirv similarity index 100% rename from base/shaders/raytrace/raytrace_brute_forge.spirv rename to base/shaders/raytrace/raytrace_brute_forge_core.spirv diff --git a/base/shaders/raytrace/raytrace_brute_forge_full.spirv b/base/shaders/raytrace/raytrace_brute_forge_full.spirv new file mode 100644 index 0000000000000000000000000000000000000000..e8448ec0e3acbde46e3b26dd494e1005b9c63396 GIT binary patch literal 25052 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 Jcc|yi`9JVk)=vNc literal 0 HcmV?d00001 diff --git a/base/shaders/raytrace/raytrace_brute_full.spirv b/base/shaders/raytrace/raytrace_brute_full.spirv index 023f7e83999489a7bc1abc0ea0a215d52485c2ac..0171a934592dc9203808bbf6a4e538dd5c35e347 100644 GIT binary patch literal 24768 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 F`5%6wvRMEC literal 24848 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 WD{p7~t`&iiTp{_JWr^}L^512#A5<65{{1L`U0 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 diff --git a/base/shaders/raytrace/src/build_dxr.bat b/base/shaders/raytrace/src/build_dxr.bat index 10d91d3b..4777fa71 100644 --- a/base/shaders/raytrace/src/build_dxr.bat +++ b/base/shaders/raytrace/src/build_dxr.bat @@ -1,5 +1,7 @@ .\dxc.exe -Zpr -Fo ..\raytrace_brute_core.cso -T lib_6_3 .\raytrace_brute.hlsl .\dxc.exe -Zpr -Fo ..\raytrace_brute_full.cso -T lib_6_3 .\raytrace_brute.hlsl -D _FULL +.\dxc.exe -Zpr -Fo ..\raytrace_brute_forge_core.cso -T lib_6_3 .\raytrace_brute.hlsl -D _FORGE +.\dxc.exe -Zpr -Fo ..\raytrace_brute_forge_full.cso -T lib_6_3 .\raytrace_brute.hlsl -D _FORGE -D _FULL .\dxc.exe -Zpr -Fo ..\raytrace_bake_ao.cso -T lib_6_3 .\raytrace_bake_ao.hlsl .\dxc.exe -Zpr -Fo ..\raytrace_bake_light.cso -T lib_6_3 .\raytrace_bake_light.hlsl .\dxc.exe -Zpr -Fo ..\raytrace_bake_bent.cso -T lib_6_3 .\raytrace_bake_bent.hlsl diff --git a/base/shaders/raytrace/src/build_vkrt.sh b/base/shaders/raytrace/src/build_vkrt.sh index fca1fe06..494740a1 100755 --- a/base/shaders/raytrace/src/build_vkrt.sh +++ b/base/shaders/raytrace/src/build_vkrt.sh @@ -1,6 +1,7 @@ ./dxc -Zpr -Fo ../raytrace_brute_core.spirv -T lib_6_4 ./raytrace_brute.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all ./dxc -Zpr -Fo ../raytrace_brute_full.spirv -T lib_6_4 ./raytrace_brute.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all -D _FULL -./dxc -Zpr -Fo ../raytrace_brute_forge.spirv -T lib_6_4 ./raytrace_brute.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all -D _FORGE +./dxc -Zpr -Fo ../raytrace_brute_forge_core.spirv -T lib_6_4 ./raytrace_brute.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all -D _FORGE +./dxc -Zpr -Fo ../raytrace_brute_forge_full.spirv -T lib_6_4 ./raytrace_brute.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all -D _FORGE -D _FULL ./dxc -Zpr -Fo ../raytrace_bake_ao.spirv -T lib_6_4 ./raytrace_bake_ao.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all ./dxc -Zpr -Fo ../raytrace_bake_light.spirv -T lib_6_4 ./raytrace_bake_light.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all ./dxc -Zpr -Fo ../raytrace_bake_bent.spirv -T lib_6_4 ./raytrace_bake_bent.hlsl -spirv -fvk-use-scalar-layout -fspv-target-env="vulkan1.2" -fvk-u-shift 10 all -fvk-b-shift 11 all diff --git a/base/shaders/raytrace/src/raytrace_brute.hlsl b/base/shaders/raytrace/src/raytrace_brute.hlsl index d635f2dd..cca23c46 100644 --- a/base/shaders/raytrace/src/raytrace_brute.hlsl +++ b/base/shaders/raytrace/src/raytrace_brute.hlsl @@ -5,7 +5,7 @@ #define _TRANSLUCENCY #define _ROULETTE #define _TRANSPARENCY -#define _FRESNEL +// #define _FRESNEL #endif // #define _RENDER @@ -104,22 +104,22 @@ void raygeneration() { #endif #ifdef _EMISSION - if (payload.color.a == -2) { + if (payload.color.a == -3) { accum += payload.color.rgb; break; } #endif + #ifdef _TRANSPARENCY + if (payload.color.a == -2 && transparent_hits < DEPTH_TRANSPARENT) { + payload.color.a = j; + transparent_hits++; + i--; + } + #endif + // Miss if (payload.color.a < 0) { - #ifdef _TRANSPARENCY - if (payload.color.a == -2 && transparent_hits < DEPTH_TRANSPARENT) { - payload.color.a = j; - transparent_hits++; - i--; - } - #endif - if (i == 0 && constant_buffer.params.x < 0) { // No envmap payload.color.rgb = float3(0.032, 0.032, 0.032); } @@ -181,7 +181,7 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut float4 texpaint0 = mytexture0.Load(utex_coord); #ifdef _TRANSPARENCY - if (texpaint0.a <= 0.1) { + if (texpaint0.a <= 0.01) { payload.ray_dir = WorldRayDirection(); payload.ray_origin = hit_world_position() + payload.ray_dir * 0.0001f; payload.color.a = -2; @@ -268,7 +268,7 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut #ifdef _EMISSION if (int(texpaint1.a * 255.0f) % 3 == 1) { // matid payload.color.xyz *= 100.0f; - payload.color.a = -2.0; + payload.color.a = -3.0; } #endif @@ -283,7 +283,7 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut void miss(inout RayPayload payload) { #ifdef _EMISSION - if (payload.color.a == -2.0) { + if (payload.color.a == -3.0) { return; } #endif