Files
H3VR-TNH-Quality-of-Life-Im…/Assets/Alloy/Legacy/Shaders/Definition/Eyeball.cginc
T
2022-01-22 20:13:49 -08:00

109 lines
3.0 KiB
HLSL
Vendored

// Alloy Physical Shader Framework
// Copyright 2013-2017 RUST LLC.
// http://www.alloy.rustltd.com/
/////////////////////////////////////////////////////////////////////////////////
/// @file Eyeball.cginc
/// @brief Eyeball surface shader definition.
/////////////////////////////////////////////////////////////////////////////////
#ifndef ALLOY_LEGACY_SHADERS_DEFINITION_EYEBALL_CGINC
#define ALLOY_LEGACY_SHADERS_DEFINITION_EYEBALL_CGINC
#define A_NORMAL_MAPPING_ON
#define A_AMBIENT_OCCLUSION_ON
#define A_SPECULAR_TINT_ON
#define A_CLEARCOAT_ON
#define A_EYE_PARALLAX_REFRACTION
#define A_DETAIL_MASK_OFF
#include "Assets/Alloy/Shaders/Lighting/Standard.cginc"
#include "Assets/Alloy/Shaders/Type/Standard.cginc"
#include "Assets/Alloy/Legacy/Shaders/Feature/EyeParallax.cginc"
/// Cornea normals.
/// Expects a compressed normal map.
sampler2D _EyeBumpMap;
/// Cornea weight.
/// Expects values in the range [0,1].
half _EyeCorneaWeight;
/// Cornea roughness.
/// Expects values in the range [0,1].
half _EyeRoughness;
/// Schlera tint color.
/// Expects a linear LDR color.
half3 _EyeScleraColor;
/// Iris tint color.
/// Expects a linear LDR color.
half3 _EyeColor;
/// Iris specular tint by base color.
/// Expects values in the range [0,1].
half _EyeSpecularTint;
/// Samples and scales the base bump map.
/// @param s Material surface data.
/// @param scale Normal XY scale factor.
/// @return Normalized tangent-space normal.
half3 aSampleBumpScaleOld(
ASurface s,
half scale)
{
half4 result = 0.0h;
#ifdef _VIRTUALTEXTURING_ON
result = VTSampleNormal(s.baseVirtualCoord);
#else
result = tex2D(_BumpMap, s.baseUv);
#endif
return UnpackScaleNormal(result, _BumpScale * scale);
}
void aSurfaceShader(
inout ASurface s)
{
float4 uv01 = s.uv01;
aEyeParallax(s);
aDissolve(s);
// Iris
half4 base = aBase(s);
half4 material = aSampleMaterial(s);
half irisMask = material.A_METALLIC_CHANNEL;
s.baseColor = base.rgb * lerp(_EyeScleraColor, _EyeColor, irisMask);
s.metallic = 0.0h;
s.ambientOcclusion = aLerpOneTo(material.A_AO_CHANNEL, _Occlusion);
s.specularity = _Specularity * material.A_SPECULARITY_CHANNEL;
s.specularTint = _EyeSpecularTint * irisMask;
s.roughness = _Roughness * material.A_ROUGHNESS_CHANNEL;
// Cornea
half bumpMask = s.clearCoat * 0.95h;
half3 corneaNormalTangent = UnpackScaleNormal(tex2D(_EyeBumpMap, s.baseUv), bumpMask);
half3 irisScleraNormalTangent = aSampleBumpScaleOld(s, 1.0h - bumpMask);
s.clearCoat = _EyeCorneaWeight * irisMask;
s.clearCoatRoughness = _EyeRoughness;
s.normalTangent = A_NT(s, BlendNormals(irisScleraNormalTangent, corneaNormalTangent));
s.mask = 1.0h - irisMask;
aDetail(s);
s.mask = 1.0h;
aEmission(s);
// Remove parallax so these appears on top of the cornea!
s.uv01 = uv01;
aDecal(s);
aRim(s);
}
#endif // ALLOY_LEGACY_SHADERS_DEFINITION_EYEBALL_CGINC