mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 04:34:26 -07:00
147 lines
5.5 KiB
HLSL
147 lines
5.5 KiB
HLSL
// Alloy Physical Shader Framework
|
|
// Copyright 2013-2017 RUST LLC.
|
|
// http://www.alloy.rustltd.com/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
/// @file TriPlanar.cginc
|
|
/// @brief TriPlanar mapping.
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef ALLOY_SHADERS_FEATURE_TRIPLANAR_CGINC
|
|
#define ALLOY_SHADERS_FEATURE_TRIPLANAR_CGINC
|
|
|
|
#ifdef A_TRIPLANAR_ON
|
|
#ifndef A_TRIPLANAR_MAPPING_ON
|
|
#define A_TRIPLANAR_MAPPING_ON
|
|
#endif
|
|
|
|
#ifndef A_METALLIC_ON
|
|
#define A_METALLIC_ON
|
|
#endif
|
|
|
|
#ifndef A_SPECULAR_TINT_ON
|
|
#define A_SPECULAR_TINT_ON
|
|
#endif
|
|
|
|
#if !defined(A_AMBIENT_OCCLUSION_ON) && !defined(A_ROUGHNESS_SOURCE_BASE_COLOR_ALPHA)
|
|
#define A_AMBIENT_OCCLUSION_ON
|
|
#endif
|
|
#endif
|
|
|
|
#include "Assets/Alloy/Shaders/Framework/Feature.cginc"
|
|
|
|
#ifdef A_TRIPLANAR_ON
|
|
half _TriplanarBlendSharpness;
|
|
|
|
half4 _PrimaryColor;
|
|
A_SAMPLER_2D(_PrimaryMainTex);
|
|
sampler2D _PrimaryMaterialMap;
|
|
sampler2D _PrimaryBumpMap;
|
|
half _PrimaryColorVertexTint;
|
|
half _PrimaryMetallic;
|
|
half _PrimarySpecularity;
|
|
half _PrimarySpecularTint;
|
|
half _PrimaryOcclusion;
|
|
half _PrimaryRoughness;
|
|
half _PrimaryBumpScale;
|
|
|
|
#ifdef _SECONDARY_TRIPLANAR_ON
|
|
half4 _SecondaryColor;
|
|
A_SAMPLER_2D(_SecondaryMainTex);
|
|
sampler2D _SecondaryMaterialMap;
|
|
sampler2D _SecondaryBumpMap;
|
|
half _SecondaryColorVertexTint;
|
|
half _SecondaryMetallic;
|
|
half _SecondarySpecularity;
|
|
half _SecondarySpecularTint;
|
|
half _SecondaryOcclusion;
|
|
half _SecondaryRoughness;
|
|
half _SecondaryBumpScale;
|
|
#endif
|
|
|
|
#ifdef _TERTIARY_TRIPLANAR_ON
|
|
half4 _TertiaryColor;
|
|
A_SAMPLER_2D(_TertiaryMainTex);
|
|
sampler2D _TertiaryMaterialMap;
|
|
sampler2D _TertiaryBumpMap;
|
|
half _TertiaryColorVertexTint;
|
|
half _TertiaryMetallic;
|
|
half _TertiarySpecularity;
|
|
half _TertiarySpecularTint;
|
|
half _TertiaryOcclusion;
|
|
half _TertiaryRoughness;
|
|
half _TertiaryBumpScale;
|
|
#endif
|
|
|
|
#ifdef _QUATERNARY_TRIPLANAR_ON
|
|
half4 _QuaternaryColor;
|
|
A_SAMPLER_2D(_QuaternaryMainTex);
|
|
sampler2D _QuaternaryMaterialMap;
|
|
sampler2D _QuaternaryBumpMap;
|
|
half _QuaternaryColorVertexTint;
|
|
half _QuaternaryMetallic;
|
|
half _QuaternarySpecularity;
|
|
half _QuaternarySpecularTint;
|
|
half _QuaternaryRoughness;
|
|
half _QuaternaryOcclusion;
|
|
half _QuaternaryBumpScale;
|
|
#endif
|
|
#endif
|
|
|
|
void aTriPlanar(
|
|
inout ASurface s)
|
|
{
|
|
#ifdef A_TRIPLANAR_ON
|
|
ASplatContext sc = aNewSplatContext(s, _TriplanarBlendSharpness, 1.0h);
|
|
ASplat sp0 = aNewSplat();
|
|
|
|
#if 1 // PRIMARY
|
|
#if defined(_SECONDARY_TRIPLANAR_ON) || defined(_TERTIARY_TRIPLANAR_ON)
|
|
aTriPlanarPositiveY(sp0, sc, A_SAMPLER_2D_INPUT(_PrimaryMainTex), _PrimaryMaterialMap, _PrimaryBumpMap, _PrimaryOcclusion, _PrimaryBumpScale);
|
|
#else
|
|
aTriPlanarY(sp0, sc, A_SAMPLER_2D_INPUT(_PrimaryMainTex), _PrimaryMaterialMap, _PrimaryBumpMap, _PrimaryOcclusion, _PrimaryBumpScale);
|
|
#endif
|
|
#ifndef _SECONDARY_TRIPLANAR_ON
|
|
aTriPlanarX(sp0, sc, A_SAMPLER_2D_INPUT(_PrimaryMainTex), _PrimaryMaterialMap, _PrimaryBumpMap, _PrimaryOcclusion, _PrimaryBumpScale);
|
|
|
|
#ifndef _QUATERNARY_TRIPLANAR_ON
|
|
aTriPlanarZ(sp0, sc, A_SAMPLER_2D_INPUT(_PrimaryMainTex), _PrimaryMaterialMap, _PrimaryBumpMap, _PrimaryOcclusion, _PrimaryBumpScale);
|
|
#endif
|
|
#endif
|
|
|
|
aSplatMaterial(sp0, sc, _PrimaryColor, _PrimaryColorVertexTint, _PrimaryMetallic, _PrimarySpecularity, _PrimarySpecularTint, _PrimaryRoughness);
|
|
#endif
|
|
#ifdef _SECONDARY_TRIPLANAR_ON
|
|
ASplat sp1 = aNewSplat();
|
|
aTriPlanarX(sp1, sc, A_SAMPLER_2D_INPUT(_SecondaryMainTex), _SecondaryMaterialMap, _SecondaryBumpMap, _SecondaryOcclusion, _SecondaryBumpScale);
|
|
|
|
#ifndef _TERTIARY_TRIPLANAR_ON
|
|
aTriPlanarNegativeY(sp1, sc, A_SAMPLER_2D_INPUT(_SecondaryMainTex), _SecondaryMaterialMap, _SecondaryBumpMap, _SecondaryOcclusion, _SecondaryBumpScale);
|
|
#endif
|
|
#ifndef _QUATERNARY_TRIPLANAR_ON
|
|
aTriPlanarZ(sp1, sc, A_SAMPLER_2D_INPUT(_SecondaryMainTex), _SecondaryMaterialMap, _SecondaryBumpMap, _SecondaryOcclusion, _SecondaryBumpScale);
|
|
#endif
|
|
|
|
aSplatMaterial(sp1, sc, _SecondaryColor, _SecondaryColorVertexTint, _SecondaryMetallic, _SecondarySpecularity, _SecondarySpecularTint, _SecondaryRoughness);
|
|
aMergeSplats(sp0, sp1);
|
|
#endif
|
|
#ifdef _TERTIARY_TRIPLANAR_ON
|
|
ASplat sp2 = aNewSplat();
|
|
aTriPlanarNegativeY(sp2, sc, A_SAMPLER_2D_INPUT(_TertiaryMainTex), _TertiaryMaterialMap, _TertiaryBumpMap, _TertiaryOcclusion, _TertiaryBumpScale);
|
|
aSplatMaterial(sp2, sc, _TertiaryColor, _TertiaryColorVertexTint, _TertiaryMetallic, _TertiarySpecularity, _TertiarySpecularTint, _TertiaryRoughness);
|
|
aMergeSplats(sp0, sp2);
|
|
#endif
|
|
#ifdef _QUATERNARY_TRIPLANAR_ON
|
|
ASplat sp3 = aNewSplat();
|
|
aTriPlanarZ(sp3, sc, A_SAMPLER_2D_INPUT(_QuaternaryMainTex), _QuaternaryMaterialMap, _QuaternaryBumpMap, _QuaternaryOcclusion, _QuaternaryBumpScale);
|
|
aSplatMaterial(sp3, sc, _QuaternaryColor, _QuaternaryColorVertexTint, _QuaternaryMetallic, _QuaternarySpecularity, _QuaternarySpecularTint, _QuaternaryRoughness);
|
|
aMergeSplats(sp0, sp3);
|
|
#endif
|
|
|
|
aApplySplat(s, sp0);
|
|
aCutout(s);
|
|
#endif
|
|
}
|
|
|
|
#endif // ALLOY_SHADERS_FEATURE_TRIPLANAR_CGINC
|