mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-02 20:24:26 -07:00
59 lines
2.1 KiB
HLSL
59 lines
2.1 KiB
HLSL
|
|
// Alloy Physical Shader Framework
|
||
|
|
// Copyright 2013-2017 RUST LLC.
|
||
|
|
// http://www.alloy.rustltd.com/
|
||
|
|
|
||
|
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
/// @file ReflectionProbe.cginc
|
||
|
|
/// @brief Deferred reflection probe pass vertex & fragment shaders.
|
||
|
|
/////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
#ifndef ALLOY_SHADERS_DEFERRED_REFLECTION_PROBE_CGINC
|
||
|
|
#define ALLOY_SHADERS_DEFERRED_REFLECTION_PROBE_CGINC
|
||
|
|
|
||
|
|
#define A_INDIRECT_LIGHTING_PASS
|
||
|
|
|
||
|
|
#include "Assets/Alloy/Shaders/Framework/Deferred.cginc"
|
||
|
|
|
||
|
|
unity_v2f_deferred aMainVertexShader(
|
||
|
|
float4 vertex : POSITION,
|
||
|
|
float3 normal : NORMAL)
|
||
|
|
{
|
||
|
|
return vert_deferred(vertex, normal);
|
||
|
|
}
|
||
|
|
|
||
|
|
half4 aMainFragmentShader(
|
||
|
|
unity_v2f_deferred i) : SV_Target
|
||
|
|
{
|
||
|
|
UnityGIInput d;
|
||
|
|
ASurface s = aDeferredSurface(i);
|
||
|
|
float blendDistance = unity_SpecCube1_ProbePosition.w; // will be set to blend distance for this probe
|
||
|
|
|
||
|
|
d.worldPos = s.positionWorld;
|
||
|
|
d.worldViewDir = s.viewDirWorld; // ???
|
||
|
|
d.probeHDR[0] = unity_SpecCube0_HDR;
|
||
|
|
|
||
|
|
#ifdef UNITY_SPECCUBE_BOX_PROJECTION
|
||
|
|
d.probePosition[0] = unity_SpecCube0_ProbePosition;
|
||
|
|
d.boxMin[0].xyz = unity_SpecCube0_BoxMin - float4(blendDistance,blendDistance,blendDistance,0);
|
||
|
|
d.boxMin[0].w = 1; // 1 in .w allow to disable blending in UnityGI_IndirectSpecular call
|
||
|
|
d.boxMax[0].xyz = unity_SpecCube0_BoxMax + float4(blendDistance,blendDistance,blendDistance,0);
|
||
|
|
#endif
|
||
|
|
|
||
|
|
Unity_GlossyEnvironmentData g;
|
||
|
|
AIndirect ind = aNewIndirect();
|
||
|
|
|
||
|
|
g.roughness = s.roughness;
|
||
|
|
g.reflUVW = s.reflectionVectorWorld;
|
||
|
|
ind.specular = UnityGI_IndirectSpecular(d, 1.0h, g);
|
||
|
|
|
||
|
|
// Calculate falloff value, so reflections on the edges of the probe would gradually blend to previous reflection.
|
||
|
|
// Also this ensures that pixels not located in the reflection probe AABB won't
|
||
|
|
// accidentally pick up reflections from this probe.
|
||
|
|
half3 distance = aDistanceFromAabb(s.positionWorld, unity_SpecCube0_BoxMin.xyz, unity_SpecCube0_BoxMax.xyz);
|
||
|
|
half falloff = saturate(1.0 - length(distance) / blendDistance);
|
||
|
|
|
||
|
|
return half4(aIndirectLighting(ind, s), falloff);
|
||
|
|
}
|
||
|
|
|
||
|
|
#endif // ALLOY_SHADERS_DEFERRED_REFLECTION_PROBE_CGINC
|