28 lines
1.1 KiB
HLSL
28 lines
1.1 KiB
HLSL
|
|
#ifndef WMELON_RIM_LIGHTING
|
||
|
|
#define WMELON_RIM_LIGHTING
|
||
|
|
|
||
|
|
half3 RimLightingHalf(half rimMin, half rimMax, half4 rimColor, half3 viewDirection, half3 worldNormal) {
|
||
|
|
half3 viewDir = normalize(viewDirection);
|
||
|
|
half rimTemp = smoothstep(rimMin, rimMax, 1 - saturate(dot(viewDir, worldNormal)));
|
||
|
|
|
||
|
|
return clamp(rimColor.rgb * rimColor.a * rimTemp, half3(0, 0, 0), half3(100, 100, 100));
|
||
|
|
}
|
||
|
|
|
||
|
|
half3 RimDirLightingHalf(half rimMin, half rimMax, half4 rimColor, half3 viewDirection, half3 worldNormal, half3 worldPos) {
|
||
|
|
half3 viewDir = normalize(viewDirection);
|
||
|
|
half rimTemp = smoothstep(rimMin, rimMax, 1 - saturate(dot(viewDir, worldNormal)));
|
||
|
|
|
||
|
|
half3 lightDir = LightDirectionHalf(worldPos);
|
||
|
|
|
||
|
|
return clamp(rimColor.rgb * rimColor.a * rimTemp, half3(0, 0, 0), half3(100, 100, 100)) * (saturate(dot(lightDir, worldNormal)));
|
||
|
|
}
|
||
|
|
|
||
|
|
float3 RimLightingFloat(float rimMin, float rimMax, float4 rimColor, float3 viewDirection, float3 worldNormal) {
|
||
|
|
float3 viewDir = normalize(viewDirection);
|
||
|
|
float rimTemp = smoothstep(rimMin, rimMax, 1 - saturate(dot(viewDir, worldNormal)));
|
||
|
|
|
||
|
|
return clamp(rimColor.rgb * rimColor.a * rimTemp, float3(0, 0, 0), float3(100, 100, 100));
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif
|