From bb592f314720c176d48f8786395b3735c2e5d195 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Sun, 3 Nov 2019 21:02:13 +0100 Subject: [PATCH] Update ray dir --- Shaders/raytrace/raytrace_brute.cso | Bin 15196 -> 14292 bytes Shaders/raytrace/src/raytrace_brute.hlsl | 27 ++++++++--------------- 2 files changed, 9 insertions(+), 18 deletions(-) diff --git a/Shaders/raytrace/raytrace_brute.cso b/Shaders/raytrace/raytrace_brute.cso index 8d4dae8d1e27357b929023725cc76437fbefd9dc..b44f7d2e6fcfd297438b4d568dcf86fe67d51e9d 100644 GIT binary patch delta 4524 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 diff --git a/Shaders/raytrace/src/raytrace_brute.hlsl b/Shaders/raytrace/src/raytrace_brute.hlsl index 4105cdca..42b45a6e 100644 --- a/Shaders/raytrace/src/raytrace_brute.hlsl +++ b/Shaders/raytrace/src/raytrace_brute.hlsl @@ -134,27 +134,18 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut float3 texpaint2 = mytexture2.Load(uint3(tex_coord * size, 0)).rgb; float3 color = payload.color.rgb * texpaint0.rgb; - if (texpaint2.b >= 0.99) { - payload.ray_dir = lerp(reflect(WorldRayDirection(), n), cos_weighted_hemisphere_direction(n, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank), texpaint2.g); + float f = rand(DispatchRaysIndex().x, DispatchRaysIndex().y, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank); + float3 wo = -WorldRayDirection(); + if (f > 0.5) { + payload.ray_dir = lerp(reflect(WorldRayDirection(), n), cos_weighted_hemisphere_direction(n, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank), pow(texpaint2.g, 1.5)); } else { - float fresnel = schlick_weight(dot(n, WorldRayDirection())) * (1.0 - texpaint2.g); - float f = rand(DispatchRaysIndex().x, DispatchRaysIndex().y, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank); - if (f > fresnel) { - float3 wo = -WorldRayDirection(); - payload.ray_dir = cos_weighted_hemisphere_direction(n, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank); - float3 tangent = float3(0, 0, 0); - float3 binormal = float3(0, 0, 0); - create_basis(n, tangent, binormal); - float3 wi = payload.ray_dir.x * tangent + payload.ray_dir.y * binormal + payload.ray_dir.z * n; - float dotNL = dot(n, wo); - float dotNV = dot(n, wi); - if (dotNL < 0.0 || dotNV < 0.0) color = float3(0, 0, 0); - } - else { - payload.ray_dir = reflect(WorldRayDirection(), n); - } + payload.ray_dir = cos_weighted_hemisphere_direction(n, payload.color.a, seed, constant_buffer.eye.w, mytexture_sobol, mytexture_scramble, mytexture_rank); + color = color * (1.0 - texpaint2.b); } + float dotNL = dot(n, wo); + if (dotNL < 0.0) color = float3(0, 0, 0); + payload.ray_origin = hit_world_position() + payload.ray_dir * 0.0001f; payload.color.xyz = color.xyz; }