mirror of
https://github.com/muskit/H3VR-TNH-Quality-of-Life-Improvements.git
synced 2026-06-03 04:34:26 -07:00
69 lines
2.3 KiB
HLSL
Vendored
69 lines
2.3 KiB
HLSL
Vendored
// Alloy Physical Shader Framework
|
|
// Copyright 2013-2017 RUST LLC.
|
|
// http://www.alloy.rustltd.com/
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
/// @file Deferred.cginc
|
|
/// @brief Deferred passes uber-header.
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef ALLOY_SHADERS_FRAMEWORK_DEFERRED_CGINC
|
|
#define ALLOY_SHADERS_FRAMEWORK_DEFERRED_CGINC
|
|
|
|
#define A_DEFERRED_PASS
|
|
#define A_TANGENT_TO_WORLD_ON
|
|
#define A_REFLECTION_PROBES_ON
|
|
|
|
// Headers both for this file, and for all Definition and Feature modules.
|
|
#include "Assets/Alloy/Shaders/Config.cginc"
|
|
#include "Assets/Alloy/Shaders/Framework/LightingImpl.cginc"
|
|
|
|
#include "UnityCG.cginc"
|
|
#include "UnityDeferredLibrary.cginc"
|
|
#include "UnityGlobalIllumination.cginc"
|
|
#include "UnityImageBasedLighting.cginc"
|
|
#include "UnityShaderVariables.cginc"
|
|
#include "UnityStandardBRDF.cginc"
|
|
#include "UnityStandardUtils.cginc"
|
|
|
|
sampler2D _CameraGBufferTexture0;
|
|
sampler2D _CameraGBufferTexture1;
|
|
sampler2D _CameraGBufferTexture2;
|
|
|
|
/// Creates a surface description from a Unity G-Buffer.
|
|
/// @param[in,out] i Unity deferred vertex format.
|
|
/// @return Material surface data.
|
|
ASurface aDeferredSurface(
|
|
inout unity_v2f_deferred i)
|
|
{
|
|
ASurface s = aNewSurface();
|
|
|
|
// Set vertex data.
|
|
i.ray = i.ray * (_ProjectionParams.z / i.ray.z);
|
|
s.screenPosition = i.uv;
|
|
s.screenUv = s.screenPosition.xy / s.screenPosition.w;
|
|
|
|
// Convert G-Buffer to surface.
|
|
float depth = Linear01Depth(SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, s.screenUv));
|
|
half4 gbuffer0 = tex2D(_CameraGBufferTexture0, s.screenUv);
|
|
half4 gbuffer1 = tex2D(_CameraGBufferTexture1, s.screenUv);
|
|
half4 gbuffer2 = tex2D(_CameraGBufferTexture2, s.screenUv);
|
|
float4 vpos = float4(i.ray * depth, 1.0f);
|
|
|
|
s.viewDepth = vpos.z;
|
|
s.positionWorld = mul(unity_CameraToWorld, vpos).xyz;
|
|
s.viewDirWorld = normalize(UnityWorldSpaceViewDir(s.positionWorld));
|
|
|
|
s.albedo = gbuffer0.rgb;
|
|
s.specularOcclusion = gbuffer0.a;
|
|
s.f0 = gbuffer1.rgb;
|
|
s.roughness = 1.0h - gbuffer1.a;
|
|
s.beckmannRoughness = aLinearToBeckmannRoughness(s.roughness);
|
|
s.normalWorld = A_NW(s, normalize(gbuffer2.xyz * 2.0h - 1.0h));
|
|
s.materialType = gbuffer2.w;
|
|
aPreLighting(s);
|
|
return s;
|
|
}
|
|
|
|
#endif // ALLOY_SHADERS_FRAMEWORK_DEFERRED_CGINC
|