NLDClient-yudde/ProjectNLD/Assets/Code/Shaders/builtin_shaders-2022.3.17f1/CGIncludes/UnityDeprecated.cginc

145 lines
5.3 KiB
HLSL
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
//-----------------------------------------------------------------------------
// NOTICE:
// All functions in this file are deprecated and should not be use, they will be remove in a later version.
// They are let here for backward compatibility.
// This file gather several function related to different part of shader code like BRDF or image based lighting
// to avoid to create multiple deprecated file, this file include deprecated function based on a define
// to when including this file, it is expected that the caller define which deprecated function group he want to enable
// Example, following code will include all deprecated BRDF functions:
// #define INCLUDE_UNITY_STANDARD_BRDF_DEPRECATED
// #include "UnityDeprecated.cginc"
// #undef INCLUDE_UNITY_STANDARD_BRDF_DEPRECATED
//-----------------------------------------------------------------------------
#ifdef INCLUDE_UNITY_STANDARD_BRDF_DEPRECATED
inline half3 LazarovFresnelTerm (half3 F0, half roughness, half cosA)
{
half t = Pow5 (1 - cosA); // ala Schlick interpoliation
t /= 4 - 3 * roughness;
return F0 + (1-F0) * t;
}
inline half3 SebLagardeFresnelTerm (half3 F0, half roughness, half cosA)
{
half t = Pow5 (1 - cosA); // ala Schlick interpoliation
return F0 + (max (F0, roughness) - F0) * t;
}
// Cook-Torrance visibility term, doesn't take roughness into account
inline half CookTorranceVisibilityTerm (half NdotL, half NdotV, half NdotH, half VdotH)
{
VdotH += 1e-5f;
half G = min (1.0, min (
(2.0 * NdotH * NdotV) / VdotH,
(2.0 * NdotH * NdotL) / VdotH));
return G / (NdotL * NdotV + 1e-4f);
}
// Kelemen-Szirmay-Kalos is an approximation to Cook-Torrance visibility term
// http://sirkan.iit.bme.hu/~szirmay/scook.pdf
inline half KelemenVisibilityTerm (half LdotH)
{
return 1.0 / (LdotH * LdotH);
}
// Modified Kelemen-Szirmay-Kalos which takes roughness into account, based on: http://www.filmicworlds.com/2014/04/21/optimizing-ggx-shaders-with-dotlh/
inline half ModifiedKelemenVisibilityTerm (half LdotH, half perceptualRoughness)
{
half c = 0.797884560802865h; // c = sqrt(2 / Pi)
half k = PerceptualRoughnessToRoughness(perceptualRoughness) * c;
half gH = LdotH * (1-k) + k;
return 1.0 / (gH * gH);
}
// Smith-Schlick derived for GGX
inline half SmithGGXVisibilityTerm (half NdotL, half NdotV, half perceptualRoughness)
{
half k = (PerceptualRoughnessToRoughness(perceptualRoughness)) / 2; // derived by B. Karis, http://graphicrants.blogspot.se/2013/08/specular-brdf-reference.html
return SmithVisibilityTerm (NdotL, NdotV, k);
}
inline half ImplicitVisibilityTerm ()
{
return 1;
}
// BlinnPhong normalized as reflection density­sity function (RDF)
// ready for use directly as specular: spec=D
// http://www.thetenthplanet.de/archives/255
inline half RDFBlinnPhongNormalizedTerm (half NdotH, half n)
{
half normTerm = (n + 2.0) / (8.0 * UNITY_PI);
half specTerm = pow (NdotH, n);
return specTerm * normTerm;
}
// Decodes HDR textures
// sm 2.0 is no longer supported
inline half3 DecodeHDR_NoLinearSupportInSM2 (half4 data, half4 decodeInstructions)
{
// If Linear mode is not supported we can skip exponent part
// In Standard shader SM2.0 and SM3.0 paths are always using different shader variations
// SM2.0: hardware does not support Linear, we can skip exponent part
#if defined(UNITY_COLORSPACE_GAMMA) && (SHADER_TARGET < 30)
return (data.a * decodeInstructions.x) * data.rgb;
#else
return DecodeHDR(data, decodeInstructions);
#endif
}
inline half DotClamped (half3 a, half3 b)
{
#if (SHADER_TARGET < 30)
return saturate(dot(a, b));
#else
return max(0.0h, dot(a, b));
#endif
}
inline half LambertTerm (half3 normal, half3 lightDir)
{
return DotClamped (normal, lightDir);
}
inline half BlinnTerm (half3 normal, half3 halfDir)
{
return DotClamped (normal, halfDir);
}
half RoughnessToSpecPower (half roughness)
{
return PerceptualRoughnessToSpecPower (roughness);
}
//-------------------------------------------------------------------------------------
// Legacy, to keep backwards compatibility for (pre Unity 5.3) custom user shaders:
#ifdef UNITY_COLORSPACE_GAMMA
# define unity_LightGammaCorrectionConsts_PIDiv4 ((UNITY_PI/4)*(UNITY_PI/4))
# define unity_LightGammaCorrectionConsts_HalfDivPI ((.5h/UNITY_PI)*(.5h/UNITY_PI))
# define unity_LightGammaCorrectionConsts_8 (8*8)
# define unity_LightGammaCorrectionConsts_SqrtHalfPI (2/UNITY_PI)
#else
# define unity_LightGammaCorrectionConsts_PIDiv4 (UNITY_PI/4)
# define unity_LightGammaCorrectionConsts_HalfDivPI (.5h/UNITY_PI)
# define unity_LightGammaCorrectionConsts_8 (8)
# define unity_LightGammaCorrectionConsts_SqrtHalfPI (0.79788)
#endif
#endif // INCLUDE_UNITY_STANDARD_BRDF_DEPRECATED
#ifdef INCLUDE_UNITY_IMAGE_BASED_LIGHTING_DEPRECATED
// Old Unity_GlossyEnvironment signature. Kept only for backward compatibility and will be removed soon
half3 Unity_GlossyEnvironment (UNITY_ARGS_TEXCUBE(tex), half4 hdr, half3 worldNormal, half perceptualRoughness)
{
Unity_GlossyEnvironmentData g;
g.roughness /* perceptualRoughness */ = perceptualRoughness;
g.reflUVW = worldNormal;
return Unity_GlossyEnvironment (UNITY_PASS_TEXCUBE(tex), hdr, g);
}
#endif // INCLUDE_UNITY_IMAGE_BASED_LIGHTING_DEPRECATED