From cfbd489c22cc03a23e77e6c27acc3d40fdb06e28 Mon Sep 17 00:00:00 2001 From: spatialfree Date: Sun, 10 Nov 2024 06:34:40 -0500 Subject: [PATCH] fresnel effect --- Assets/backbox.hlsl | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/Assets/backbox.hlsl b/Assets/backbox.hlsl index 729f576..e4a5901 100644 --- a/Assets/backbox.hlsl +++ b/Assets/backbox.hlsl @@ -8,11 +8,15 @@ float4 color; struct vsIn { float4 pos : SV_Position; float3 norm : NORMAL0; - float4 col : COLOR0; + // float4 col : COLOR0; }; struct psIn { float4 pos : SV_POSITION; float4 color : COLOR0; + float3 normal : NORMAL0; + float3 world_pos : WORLD; + float3 cam_pos : TEXCOORD1; + float3 cam_dir : TEXCOORD2; uint view_id : SV_RenderTargetArrayIndex; }; @@ -21,24 +25,26 @@ psIn vs(vsIn input, uint id : SV_InstanceID) { o.view_id = id % sk_view_count; id = id / sk_view_count; + o.cam_pos = sk_camera_pos[o.view_id].xyz; + o.cam_dir = sk_camera_dir[o.view_id].xyz; + float3 world = mul(float4(input.pos.xyz, 1), sk_inst[id].world).xyz; o.pos = mul(float4(world, 1), sk_viewproj[o.view_id]); + o.world_pos = world; // flip input normals to treat backfaces like normal - float3 normal = normalize(mul(-input.norm, (float3x3)sk_inst[id].world)); + o.normal = normalize(mul(-input.norm, (float3x3)sk_inst[id].world)); - - float3 norm_shade = float3(0.5) + (normal * 0.5); - // float3 norm_shade = float3(0.5) + (norm_color * 0.5); - float3 view_dir = normalize(world - sk_camera_pos[o.view_id]); - // o.color = norm_shaed * clamp(dot(o.normal, -view_dir), 0, 0.2); - - // rim lighting - float rim = 1.0 - saturate(dot(normalize(view_dir), normal)); - o.color = float4(norm_shade * rim * rim * 0.0666, 1); + o.color = color * sk_inst[id].color; return o; } float4 ps(psIn input) : SV_TARGET { - return input.color; + float3 view_dir = normalize(input.world_pos - input.cam_pos); + + // Fresnel effect calculation + float fresnel = 1.0 - saturate(dot(-view_dir, input.normal)); + fresnel = pow(fresnel, 5.0); // Adjust power for different falloff rates + + return float4(fresnel * input.color.rgb, input.color.a); } \ No newline at end of file