mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 04:34:26 -07:00
86 lines
2.6 KiB
HLSL
86 lines
2.6 KiB
HLSL
|
|
// Alloy Physical Shader Framework
|
||
|
|
// Copyright 2013-2017 RUST LLC.
|
||
|
|
// http://www.alloy.rustltd.com/
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
/// @file SPCarPaint.cginc
|
||
|
|
/// @brief SP Car Paint surface shader definition.
|
||
|
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
#ifndef ALLOY_MODS_SHADERS_DEFINITION_SP_CAR_PAINT_CGINC
|
||
|
|
#define ALLOY_MODS_SHADERS_DEFINITION_SP_CAR_PAINT_CGINC
|
||
|
|
|
||
|
|
#define A_CLEARCOAT_ON
|
||
|
|
#define A_MAIN_TEXTURES_ON
|
||
|
|
|
||
|
|
#include "Assets/Alloy/Shaders/Lighting/Standard.cginc"
|
||
|
|
#include "Assets/Alloy/Shaders/Type/Standard.cginc"
|
||
|
|
|
||
|
|
/// The secondary paint tint color.
|
||
|
|
/// Expects a linear LDR color.
|
||
|
|
half3 _CarPaintSecondaryColor;
|
||
|
|
|
||
|
|
/// The tertiary paint tint color.
|
||
|
|
/// Expects a linear LDR color.
|
||
|
|
half3 _CarPaintTertiaryColor;
|
||
|
|
|
||
|
|
/// Clear Coat weight.
|
||
|
|
/// Expects values in the range [0,1].
|
||
|
|
half _CarPaintClearCoatWeight;
|
||
|
|
|
||
|
|
/// Clear Coat roughness.
|
||
|
|
/// Expects values in the range [0,1].
|
||
|
|
half _CarPaintClearCoatRoughness;
|
||
|
|
|
||
|
|
/// The metallic flake tint color.
|
||
|
|
/// Expects a linear LDR color.
|
||
|
|
half3 _CarPaintFlakeColor;
|
||
|
|
|
||
|
|
/// Flake normal map.
|
||
|
|
/// Expects a compressed normal map.
|
||
|
|
A_SAMPLER_2D(_CarPaintFlakeNormalMap);
|
||
|
|
|
||
|
|
/// Flake weight.
|
||
|
|
/// Expects values in the range [0,1].
|
||
|
|
half _CarPaintFlakeWeight;
|
||
|
|
|
||
|
|
void aSurfaceShader(
|
||
|
|
inout ASurface s)
|
||
|
|
{
|
||
|
|
aParallax(s);
|
||
|
|
aDissolve(s);
|
||
|
|
aMainTextures(s);
|
||
|
|
aDetail(s);
|
||
|
|
aTeamColor(s);
|
||
|
|
|
||
|
|
s.mask = s.opacity;
|
||
|
|
|
||
|
|
// Two-tone car paint with metal flakes.
|
||
|
|
// http://www.chrisoat.com/papers/Oat-Tatarchuk-Isidoro-Layered_Car_Paint_Shader_Print.pdf
|
||
|
|
float2 flakeUv = A_TEX_TRANSFORM_UV(s, _CarPaintFlakeNormalMap);
|
||
|
|
half3 flakeNormalTangent = UnpackScaleNormal(tex2D(_CarPaintFlakeNormalMap, flakeUv), 1.0h);
|
||
|
|
half3 paintNpWorld = aTangentToWorld(s, 0.2h * flakeNormalTangent + s.normalTangent);
|
||
|
|
half3 flakeNpWorld = aTangentToWorld(s, _CarPaintFlakeWeight * flakeNormalTangent + s.normalTangent);
|
||
|
|
half fresnel1 = aDotClamp(paintNpWorld, s.viewDirWorld);
|
||
|
|
half fresnel2 = aDotClamp(flakeNpWorld, s.viewDirWorld);
|
||
|
|
half fresnel1Sq = fresnel1 * fresnel1;
|
||
|
|
half3 paintColor = fresnel1 * s.baseColor +
|
||
|
|
fresnel1Sq * _CarPaintSecondaryColor +
|
||
|
|
fresnel1Sq * fresnel1Sq * _CarPaintTertiaryColor +
|
||
|
|
pow(fresnel2, 16.0h) * _CarPaintFlakeColor;
|
||
|
|
|
||
|
|
// Clear Coat
|
||
|
|
s.baseColor = lerp(s.baseColor, paintColor, s.mask);
|
||
|
|
s.clearCoat = s.mask * _CarPaintClearCoatWeight;
|
||
|
|
s.clearCoatRoughness = _CarPaintClearCoatRoughness;
|
||
|
|
|
||
|
|
s.mask = 1.0h;
|
||
|
|
aAo2(s);
|
||
|
|
aDecal(s);
|
||
|
|
aWetness(s);
|
||
|
|
aEmission(s);
|
||
|
|
aRim(s);
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif // ALLOY_MODS_SHADERS_DEFINITION_SP_CAR_PAINT_CGINC
|