mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 20:24:26 -07:00
132 lines
3.7 KiB
HLSL
132 lines
3.7 KiB
HLSL
// Alloy Physical Shader Framework
|
|
// Copyright 2013-2017 RUST LLC.
|
|
// http://www.alloy.rustltd.com/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
/// @file Eye.cginc
|
|
/// @brief Eye parallax, layer control, etc.
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef ALLOY_SHADERS_FEATURE_EYE_CGINC
|
|
#define ALLOY_SHADERS_FEATURE_EYE_CGINC
|
|
|
|
#ifdef A_EYE_ON
|
|
#ifndef A_NORMAL_MAPPING_ON
|
|
#define A_NORMAL_MAPPING_ON
|
|
#endif
|
|
|
|
#ifndef A_VIEW_DIR_TANGENT_ON
|
|
#define A_VIEW_DIR_TANGENT_ON
|
|
#endif
|
|
#endif
|
|
|
|
#include "Assets/Alloy/Shaders/Framework/Feature.cginc"
|
|
|
|
#ifdef A_EYE_ON
|
|
/// Cornea tint color.
|
|
/// Expects a linear LDR color.
|
|
half4 _CorneaColor;
|
|
|
|
/// Cornea normal map.
|
|
/// Expects a compressed normal map.
|
|
sampler2D _CorneaNormalMap;
|
|
|
|
/// Cornea specularity.
|
|
/// Expects values in the range [0,1].
|
|
half _CorneaSpecularity;
|
|
|
|
/// Cornea roughness.
|
|
/// Expects values in the range [0,1].
|
|
half _CorneaRoughness;
|
|
|
|
/// Cornea normal map XY scale.
|
|
half _CorneaNormalMapScale;
|
|
|
|
/// Iris tint color.
|
|
/// Expects a linear LDR color.
|
|
half3 _IrisColor;
|
|
|
|
/// Iris pupil dilation.
|
|
/// Expects values in the range [0,1].
|
|
half _IrisPupilSize;
|
|
|
|
/// Iris fake shadowing at grazing angles.
|
|
/// Expects values in the range [0.01,n].
|
|
half _IrisShadowing;
|
|
|
|
/// Iris fake scattering intensity.
|
|
/// Expects values in the range [0,n].
|
|
half _IrisScatterIntensity;
|
|
|
|
/// Iris fake scattering falloff.
|
|
/// Expects values in the range [0.01,n].
|
|
half _IrisScatterPower;
|
|
|
|
/// Schlera tint color.
|
|
/// Expects a linear LDR color.
|
|
half3 _ScleraColor;
|
|
|
|
/// Schlera specularity.
|
|
/// Expects values in the range [0,1].
|
|
half _ScleraSpecularity;
|
|
|
|
/// Schlera roughness.
|
|
/// Expects values in the range [0,1].
|
|
half _ScleraRoughness;
|
|
|
|
/// Schlera normal map XY scale.
|
|
half _ScleraNormalMapScale;
|
|
#endif
|
|
|
|
void aEye(
|
|
inout ASurface s)
|
|
{
|
|
#ifdef A_EYE_ON
|
|
float2 baseUv = s.baseUv;
|
|
float4 uv = s.uv01;
|
|
|
|
// Cornea "Refraction".
|
|
aParallaxOcclusionMapping(s, 10.0f, 25.0f);
|
|
|
|
// Pupil Dilation
|
|
// HACK: Use the heightmap as the gradient, since it matches the other maps.
|
|
// http://www.polycount.com/forum/showpost.php?p=1511423&postcount=13
|
|
half mask = 1.0h - aSampleHeight(s);
|
|
float2 centeredUv = frac(s.baseUv) + float2(-0.5f, -0.5f);
|
|
float2 dilationOffset = centeredUv * (mask * _IrisPupilSize);
|
|
|
|
aParallaxOffset(s, -dilationOffset);
|
|
|
|
// Materials.
|
|
half4 base = aSampleBase(s);
|
|
half irisMask = base.a;
|
|
s.baseColor = base.rgb;
|
|
|
|
// Iris.
|
|
half3 irisBump = aSampleBumpScale(s, lerp(_ScleraNormalMapScale, 1.0h, irisMask));
|
|
half irisNdotV = irisMask * aDotClamp(irisBump, s.viewDirTangent);
|
|
|
|
irisBump = normalize(lerp(irisBump, A_FLAT_NORMAL, irisMask));
|
|
s.baseColor += (_IrisScatterIntensity * pow(aLuminance(base) * irisNdotV, _IrisScatterPower)).rrr;
|
|
s.baseColor *= aLerpOneTo(pow(irisNdotV, _IrisShadowing), irisMask);
|
|
s.baseColor *= _Color * aBaseVertexColorTint(s) * lerp(_ScleraColor, _IrisColor, irisMask);
|
|
|
|
// No Parallax.
|
|
s.baseUv = A_BV(s, baseUv);
|
|
s.uv01 = uv;
|
|
|
|
// Cornea & Sclera.
|
|
half3 corneaBump = UnpackScaleNormal(tex2D(_CorneaNormalMap, s.baseUv), _CorneaNormalMapScale);
|
|
|
|
s.baseColor = lerp(s.baseColor, _CorneaColor, irisMask * _CorneaColor.a);
|
|
s.specularity = lerp(_ScleraSpecularity, _CorneaSpecularity, irisMask);
|
|
s.roughness = lerp(_ScleraRoughness, _CorneaRoughness, irisMask);
|
|
s.normalTangent = A_NT(s, BlendNormals(irisBump, corneaBump));
|
|
|
|
// Iris mask on outside effects.
|
|
s.mask = 1.0h - irisMask;
|
|
#endif
|
|
}
|
|
|
|
#endif // ALLOY_SHADERS_FEATURE_EYE_CGINC
|