KSP-Conformal-Decals/Assets/ConformalDecals/Shaders/Decal/TextDecal.cginc

51 lines
1.5 KiB
HLSL
Raw Normal View History

2024-07-30 05:32:11 +00:00
#include "DecalsCommon.cginc"
2024-07-26 07:03:42 +00:00
#include "../SDF.cginc"
2020-07-25 07:54:21 +00:00
float4 _DecalColor;
float4 _OutlineColor;
float _OutlineWidth;
2024-07-26 07:03:42 +00:00
void surf(DecalSurfaceInput IN, inout SurfaceOutput o) {
2020-07-25 07:54:21 +00:00
float4 color = _DecalColor;
o.Specular = 0.4;
2024-07-26 07:03:42 +00:00
o.Gloss = _Shininess;
float dist = _Cutoff - tex2D(_Decal, IN.uv_decal).r; // text distance
2020-07-25 07:54:21 +00:00
#ifdef DECAL_OUTLINE
// Outline
float outlineOffset = _OutlineWidth * 0.25;
float outlineRadius = _OutlineWidth * 0.5;
#ifdef DECAL_FILL
// Outline and Fill
float outlineDist = -dist - outlineOffset;
float outlineFactor = SDFAA(outlineDist);
dist -= outlineOffset;
color = lerp(_DecalColor, _OutlineColor, outlineFactor);
#else
// Outline Only
float outlineDist = abs(dist) - outlineOffset;
dist = outlineDist;
color = _OutlineColor;
#endif
2020-07-25 07:54:21 +00:00
#endif
dist = max(dist, BoundsDist(IN.uv, IN.vertex_normal, _DecalNormal));
float ddist = SDFdDist(dist); // distance gradient magnitude
2024-07-26 07:03:42 +00:00
o.Albedo = color.rgb;
o.Alpha *= SDFAA(dist, ddist);
2020-07-25 07:54:21 +00:00
#ifdef DECAL_BASE_NORMAL
float3 normal = IN.normal;
float wearFactor = 1 - normal.z;
float wearFactorAlpha = saturate(_EdgeWearStrength * wearFactor);
o.Alpha *= saturate(1 + _EdgeWearOffset - saturate(_EdgeWearStrength * wearFactor));
#endif
#ifdef DECAL_SPECMAP
float4 specular = tex2D(_SpecMap, IN.uv_specmap);
2024-06-25 06:07:44 +00:00
o.Specular = specular;
2020-07-25 07:54:21 +00:00
#endif
}