Files
H3VR-TNH-Quality-of-Life-Im…/Assets/Alloy/Shaders/Feature/Decal.cginc
T

56 lines
1.6 KiB
HLSL
Raw Normal View History

2022-01-22 20:13:49 -08:00
// Alloy Physical Shader Framework
// Copyright 2013-2017 RUST LLC.
// http://www.alloy.rustltd.com/
/////////////////////////////////////////////////////////////////////////////////
/// @file Decal.cginc
/// @brief Handles vertex-weighted alpha-blended decals.
/////////////////////////////////////////////////////////////////////////////////
#ifndef ALLOY_SHADERS_FEATURE_DECAL_CGINC
#define ALLOY_SHADERS_FEATURE_DECAL_CGINC
#if !defined(A_DECAL_ON) && defined(_DECAL_ON)
#define A_DECAL_ON
#endif
#include "Assets/Alloy/Shaders/Framework/Feature.cginc"
#ifdef A_DECAL_ON
/// The decal tint color.
/// Expects a linear LDR color with alpha.
half4 _DecalColor;
/// Decal texture.
/// Expects an RGBA map with sRGB sampling.
A_SAMPLER_2D(_DecalTex);
/// Weight of the decal effect.
/// Expects values in the range [0,1].
half _DecalWeight;
/// The specularity that will be applied over the decal.
/// Expects values in the range [0,1].
half _DecalSpecularity;
/// Toggles tinting the decal alpha by the vertex alpha.
/// Expects values in the range [0,1].
half _DecalAlphaVertexTint;
#endif
void aDecal(
inout ASurface s)
{
#ifdef A_DECAL_ON
float2 detailUv = A_TEX_TRANSFORM_UV(s, _DecalTex);
half4 decal = _DecalColor * tex2D(_DecalTex, detailUv);
half weight = s.mask * _DecalWeight * decal.a * aLerpOneTo(s.vertexColor.a, _DecalAlphaVertexTint);
s.baseColor = lerp(s.baseColor, decal.rgb, weight);
s.metallic *= 1.0h - weight;
s.specularity = lerp(s.specularity, _DecalSpecularity, weight);
#endif
}
#endif // ALLOY_SHADERS_FEATURE_DECAL_CGINC