mirror of
https://github.com/drewcassidy/KSP-Conformal-Decals.git
synced 2024-09-01 18:23:54 +00:00
drewcassidy
f78093bbb6
• All shaders merged into one using shader variants • new SDF-based antialiasing engine • Smoothness on SDFs is now disabled
34 lines
1.2 KiB
HLSL
34 lines
1.2 KiB
HLSL
#ifndef DECALS_LIGHTING_INCLUDED
|
|
#define DECALS_LIGHTING_INCLUDED
|
|
|
|
// modifed version of the KSP BlinnPhong because it does some weird things
|
|
inline fixed4 LightingBlinnPhongDecal(SurfaceOutput s, fixed3 lightDir, half3 viewDir, fixed atten)
|
|
{
|
|
s.Normal = normalize(s.Normal);
|
|
half3 h = normalize(lightDir + viewDir);
|
|
|
|
fixed diff = max(0, dot(s.Normal, lightDir));
|
|
|
|
float nh = max(0, dot(s.Normal, h));
|
|
float spec = pow(nh, s.Specular*128.0) * s.Gloss;
|
|
|
|
fixed4 c = 0;
|
|
c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * _SpecColor.rgb * spec) * (atten);
|
|
return c;
|
|
}
|
|
|
|
// KSP underwater fog function
|
|
float4 UnderwaterFog(float3 worldPos, float3 color)
|
|
{
|
|
float3 toPixel = worldPos - _LocalCameraPos.xyz;
|
|
float toPixelLength = length(toPixel);
|
|
|
|
float underwaterDetection = _UnderwaterFogFactor * _LocalCameraDir.w;
|
|
float albedoLerpValue = underwaterDetection * (_UnderwaterMaxAlbedoFog * saturate(toPixelLength * _UnderwaterAlbedoDistanceScalar));
|
|
float alphaFactor = 1 - underwaterDetection * (_UnderwaterMaxAlphaFog * saturate((toPixelLength - _UnderwaterMinAlphaFogDistance) * _UnderwaterAlphaDistanceScalar));
|
|
|
|
return float4(lerp(color, _UnderwaterFogColor.rgb, albedoLerpValue), alphaFactor);
|
|
}
|
|
|
|
#endif
|