mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 12:44:26 -07:00
83 lines
2.6 KiB
HLSL
Vendored
83 lines
2.6 KiB
HLSL
Vendored
// Alloy Physical Shader Framework
|
|
// Copyright 2013-2017 RUST LLC.
|
|
// http://www.alloy.rustltd.com/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
/// @file CarPaintFastClearCoat.cginc
|
|
/// @brief Car Paint surface shader definition.
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef ALLOY_MODS_SHADERS_DEFINITION_CAR_PAINT_FAST_CLEARCOAT_CGINC
|
|
#define ALLOY_MODS_SHADERS_DEFINITION_CAR_PAINT_FAST_CLEARCOAT_CGINC
|
|
|
|
#define A_METALLIC_ON
|
|
#define A_CLEARCOAT_ON
|
|
#define A_MAIN_TEXTURES_ON
|
|
#define A_CAR_PAINT_ON
|
|
|
|
#ifndef A_NORMAL_WORLD_ON
|
|
#define A_NORMAL_WORLD_ON
|
|
#endif
|
|
|
|
#ifndef A_VIEW_DIR_WORLD_ON
|
|
#define A_VIEW_DIR_WORLD_ON
|
|
#endif
|
|
|
|
#include "Assets/Alloy/Shaders/Lighting/Standard.cginc"
|
|
#include "Assets/Alloy/Shaders/Type/Standard.cginc"
|
|
|
|
/// Clear Coat weight.
|
|
/// Expects values in the range [0,1].
|
|
half _CarPaintClearCoatWeight;
|
|
|
|
/// Clear Coat roughness.
|
|
/// Expects values in the range [0,1].
|
|
half _CarPaintClearCoatRoughness;
|
|
|
|
void aSurfaceShader(
|
|
inout ASurface s)
|
|
{
|
|
aParallax(s);
|
|
aDissolve(s);
|
|
aMainTextures(s);
|
|
aDetail(s);
|
|
aTeamColor(s);
|
|
|
|
s.mask = s.opacity;
|
|
|
|
// Multi-layer car paint.
|
|
// cf http://www.elliottpacel.co.uk/blog/pbr-practice
|
|
// cf http://blenderartists.org/forum/showthread.php?250127-Car-Paint-Materials-Iridescent-Layers-Carbon-Fiber-Leather&p=2083499&viewfull=1#post2083499
|
|
|
|
// Two-Tone Paint
|
|
half secondaryColorFalloff = 1.0h - pow(s.NdotV, 0.1 + 9.9h * _CarSecondaryColorFalloff);
|
|
half secondaryColorWeight = _CarSecondaryColorWeight * secondaryColorFalloff;
|
|
half3 paintColor = lerp(_CarPrimaryColor, _CarSecondaryColor, secondaryColorWeight);
|
|
|
|
s.baseColor *= aLerpWhiteTo(paintColor, s.mask);
|
|
|
|
// Metal Flakes
|
|
// NOTE: Metal brightness will overpower clearcoat, hiding roughness difference.
|
|
float2 flakeUv = A_TEX_TRANSFORM_UV(s, _CarFlakeMap);
|
|
half4 flakes = _CarFlakeColor * tex2D(_CarFlakeMap, flakeUv);
|
|
half flakeMask = pow(flakes.a, _CarFlakeMapFalloff);
|
|
half flakeSpread = pow(s.NdotV, _CarFlakeSpread * -9.9h + 10.0h); //[10,0]
|
|
half flakeWeight = s.mask * flakeMask * flakeSpread * _CarFlakeWeight;
|
|
|
|
s.baseColor = lerp(s.baseColor, flakes.rgb, flakeWeight);
|
|
s.metallic = lerp(s.metallic, 1.0h, flakeWeight);
|
|
s.roughness = lerp(s.roughness, 1.0h, flakeWeight * _CarFlakeHighlightSpread);
|
|
|
|
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_CAR_PAINT_FAST_CLEARCOAT_CGINC
|