fresnel effect
This commit is contained in:
parent
17f38b83bd
commit
cfbd489c22
1 changed files with 18 additions and 12 deletions
|
@ -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);
|
||||
}
|
Loading…
Add table
Reference in a new issue