Initial commit

This commit is contained in:
msk
2022-01-22 20:13:49 -08:00
parent f9d23e5bcf
commit 687473573d
878 changed files with 70957 additions and 0 deletions
@@ -0,0 +1,89 @@
// Alloy Physical Shader Framework
// Copyright 2013-2017 RUST LLC.
// http://www.alloy.rustltd.com/
/////////////////////////////////////////////////////////////////////////////////
/// @file Wetness.cginc
/// @brief Handles all wet material effects.
/////////////////////////////////////////////////////////////////////////////////
#ifndef ALLOY_SHADERS_FEATURE_WETNESS_CGINC
#define ALLOY_SHADERS_FEATURE_WETNESS_CGINC
#if !defined(A_WETNESS_ON) && defined(_WETNESS_ON)
#define A_WETNESS_ON
#endif
#include "Assets/Alloy/Shaders/Framework/Feature.cginc"
#ifdef A_WETNESS_ON
#ifndef A_WETNESS_MASK_OFF
/// Mask that controls the wetness influence on the base material.
/// Expects an alpha data map.
A_SAMPLER_2D(_WetMask);
#endif
/// Controls how much the vertex alpha masks the detail maps.
/// Expects values in the range [0,1].
half _WetMaskStrength;
/// The tint color for liquid wetting the surface.
/// Expects a linear LDR color.
half3 _WetTint;
#ifndef A_WETNESS_NORMAL_MAP_OFF
/// Wetness normal map.
/// Expects a compressed normal map.
A_SAMPLER_2D(_WetNormalMap);
#endif
/// Controls the wetness influence on the base material.
/// Expects values in the range [0,1].
half _WetWeight;
/// The roughness for wet porous materials.
/// Expects values in the range [0,1].
half _WetRoughness;
#ifndef A_WETNESS_NORMAL_MAP_OFF
/// Normal map XY scale.
half _WetNormalMapScale;
#endif
#endif
void aWetness(
inout ASurface s)
{
#ifdef A_WETNESS_ON
half mask = s.mask * _WetWeight;
#ifndef A_WETNESS_MASK_OFF
#ifdef _WETMASKSOURCE_VERTEXCOLORALPHA
half alpha = s.vertexColor.a;
#else
half alpha = tex2D(_WetMask, A_TEX_TRANSFORM_UV_SCROLL(s, _WetMask)).a;
#endif
mask *= aLerpOneTo(alpha, _WetMaskStrength);
#endif
// Physically-based wet surfaces.
// cf https://seblagarde.files.wordpress.com/2013/08/gdce13_lagarde_harduin_light.pdf pg 63
half porosity = 1.0h;
#ifndef A_WETNESS_POROSITY_OFF
porosity = (1.0h - s.metallic) * saturate(s.roughness * 2.5h - 1.25h);
#endif
s.baseColor *= aLerpWhiteTo(_WetTint * aLerpOneTo(0.2h, porosity), mask);
s.roughness *= aLerpOneTo(_WetRoughness, aLerpOneTo(0.2h, 0.5h * porosity) * mask);
#ifndef A_WETNESS_NORMAL_MAP_OFF
float2 normalUv = A_TEX_TRANSFORM_UV_SCROLL(s, _WetNormalMap);
half3 wetNormals = UnpackScaleNormal(tex2D(_WetNormalMap, normalUv), mask * _WetNormalMapScale);
s.normalTangent = A_NT(s, BlendNormals(s.normalTangent, wetNormals));
#endif
#endif
}
#endif // ALLOY_SHADERS_FEATURE_WETNESS_CGINC