mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 20:24:26 -07:00
Initial commit
This commit is contained in:
@@ -0,0 +1,104 @@
|
||||
// Alloy Physical Shader Framework
|
||||
// Copyright 2013-2017 RUST LLC.
|
||||
// http://www.alloy.rustltd.com/
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
/// @file CarPaint.cginc
|
||||
/// @brief View-dependent secondary color tint and metal flakes layers.
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ALLOY_SHADERS_FEATURE_CAR_PAINT_CGINC
|
||||
#define ALLOY_SHADERS_FEATURE_CAR_PAINT_CGINC
|
||||
|
||||
#ifdef A_CAR_PAINT_ON
|
||||
#ifndef A_METALLIC_ON
|
||||
#define A_METALLIC_ON
|
||||
#endif
|
||||
|
||||
#ifndef A_NORMAL_WORLD_ON
|
||||
#define A_NORMAL_WORLD_ON
|
||||
#endif
|
||||
|
||||
#ifndef A_VIEW_DIR_WORLD_ON
|
||||
#define A_VIEW_DIR_WORLD_ON
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "Assets/Alloy/Shaders/Framework/Feature.cginc"
|
||||
|
||||
#ifdef A_CAR_PAINT_ON
|
||||
/// The primary paint tint color.
|
||||
/// Expects a linear LDR color.
|
||||
half3 _CarPrimaryColor;
|
||||
|
||||
/// The secondary paint tint color.
|
||||
/// Expects a linear LDR color.
|
||||
half3 _CarSecondaryColor;
|
||||
|
||||
/// The secondary paint tint color weight.
|
||||
/// Expects values in the range [0,1].
|
||||
half _CarSecondaryColorWeight;
|
||||
|
||||
/// Controls the width of the secondary paint tint color rim effect.
|
||||
/// Expects values in the range [0,1].
|
||||
half _CarSecondaryColorFalloff;
|
||||
|
||||
/// The metallic flake tint color.
|
||||
/// Expects a linear LDR color.
|
||||
half4 _CarFlakeColor;
|
||||
|
||||
/// Metal flake color in RGB, and weight in A.
|
||||
/// Expects an RGBA map with sRGB sampling.
|
||||
A_SAMPLER_2D(_CarFlakeMap);
|
||||
|
||||
/// Gamma applied to the metal flake weight map.
|
||||
/// Expects values in the range [0.01,n].
|
||||
half _CarFlakeMapFalloff;
|
||||
|
||||
/// The metal flake weight.
|
||||
/// Expects values in the range [0,1].
|
||||
half _CarFlakeWeight;
|
||||
|
||||
/// Controls the view-dependent spread of the metal flakes over the surface.
|
||||
/// Expects values in the range [0,1].
|
||||
half _CarFlakeSpread;
|
||||
|
||||
/// Controls the view-dependent spread of highlights over the metal flakes.
|
||||
/// Expects values in the range [0,1].
|
||||
half _CarFlakeHighlightSpread;
|
||||
#endif
|
||||
|
||||
void aCarPaint(
|
||||
inout ASurface s)
|
||||
{
|
||||
#ifdef A_CAR_PAINT_ON
|
||||
// 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);
|
||||
|
||||
// Clear Coat
|
||||
// NOTE: Only added to metallic parts, as dielectrics already have it.
|
||||
s.baseColor += aSpecularityToF0(s.mask * s.specularity * s.metallic);
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // ALLOY_SHADERS_FEATURE_CAR_PAINT_CGINC
|
||||
Reference in New Issue
Block a user