summaryrefslogtreecommitdiff
path: root/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2022-03-10 14:07:40 +0800
committerchai <chaifix@163.com>2022-03-10 14:07:40 +0800
commit22891bf59032ba88262824255a706d652031384b (patch)
tree7595439ba9966c9402d37e37cee5e8cf098757d5 /Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
parent8b04ea73e540067f83870b61d89db4868fea5e8a (diff)
* move folder
Diffstat (limited to 'Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc')
-rw-r--r--Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc376
1 files changed, 0 insertions, 376 deletions
diff --git a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc b/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
deleted file mode 100644
index 66751d27..00000000
--- a/Assets/ThirdParty/MaterializeFX/Shaders/Standart/UnityStandardCoreForwardSimple.cginc
+++ /dev/null
@@ -1,376 +0,0 @@
-// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)
-
-#ifndef UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED
-#define UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED
-
-#include "UnityStandardCore.cginc"
-
-// Does not support: _PARALLAXMAP, DIRLIGHTMAP_COMBINED
-#define GLOSSMAP (defined(_SPECGLOSSMAP) || defined(_METALLICGLOSSMAP))
-
-#ifndef SPECULAR_HIGHLIGHTS
- #define SPECULAR_HIGHLIGHTS (!defined(_SPECULAR_HIGHLIGHTS_OFF))
-#endif
-
-struct VertexOutputBaseSimple
-{
- UNITY_POSITION(pos);
- float4 tex : TEXCOORD0;
- half4 eyeVec : TEXCOORD1; // w: grazingTerm
-
- half4 ambientOrLightmapUV : TEXCOORD2; // SH or Lightmap UV
- SHADOW_COORDS(3)
- UNITY_FOG_COORDS_PACKED(4, half4) // x: fogCoord, yzw: reflectVec
-
- half4 normalWorld : TEXCOORD5; // w: fresnelTerm
-
-#ifdef _NORMALMAP
- half3 tangentSpaceLightDir : TEXCOORD6;
- #if SPECULAR_HIGHLIGHTS
- half3 tangentSpaceEyeVec : TEXCOORD7;
- #endif
-#endif
-#if UNITY_REQUIRE_FRAG_WORLDPOS
- float3 posWorld : TEXCOORD8;
-#endif
-
- UNITY_VERTEX_OUTPUT_STEREO
-};
-
-// UNIFORM_REFLECTIVITY(): workaround to get (uniform) reflecivity based on UNITY_SETUP_BRDF_INPUT
-half MetallicSetup_Reflectivity()
-{
- return 1.0h - OneMinusReflectivityFromMetallic(_Metallic);
-}
-
-half SpecularSetup_Reflectivity()
-{
- return SpecularStrength(_SpecColor.rgb);
-}
-
-#define JOIN2(a, b) a##b
-#define JOIN(a, b) JOIN2(a,b)
-#define UNIFORM_REFLECTIVITY JOIN(UNITY_SETUP_BRDF_INPUT, _Reflectivity)
-
-
-#ifdef _NORMALMAP
-
-half3 TransformToTangentSpace(half3 tangent, half3 binormal, half3 normal, half3 v)
-{
- // Mali400 shader compiler prefers explicit dot product over using a half3x3 matrix
- return half3(dot(tangent, v), dot(binormal, v), dot(normal, v));
-}
-
-void TangentSpaceLightingInput(half3 normalWorld, half4 vTangent, half3 lightDirWorld, half3 eyeVecWorld, out half3 tangentSpaceLightDir, out half3 tangentSpaceEyeVec)
-{
- half3 tangentWorld = UnityObjectToWorldDir(vTangent.xyz);
- half sign = half(vTangent.w) * half(unity_WorldTransformParams.w);
- half3 binormalWorld = cross(normalWorld, tangentWorld) * sign;
- tangentSpaceLightDir = TransformToTangentSpace(tangentWorld, binormalWorld, normalWorld, lightDirWorld);
- #if SPECULAR_HIGHLIGHTS
- tangentSpaceEyeVec = normalize(TransformToTangentSpace(tangentWorld, binormalWorld, normalWorld, eyeVecWorld));
- #else
- tangentSpaceEyeVec = 0;
- #endif
-}
-
-#endif // _NORMALMAP
-
-VertexOutputBaseSimple vertForwardBaseSimple (VertexInput v)
-{
- UNITY_SETUP_INSTANCE_ID(v);
- VertexOutputBaseSimple o;
- UNITY_INITIALIZE_OUTPUT(VertexOutputBaseSimple, o);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
-
- float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
- o.pos = UnityObjectToClipPos(v.vertex);
- o.tex = TexCoords(v);
-
- half3 eyeVec = normalize(posWorld.xyz - _WorldSpaceCameraPos);
- half3 normalWorld = UnityObjectToWorldNormal(v.normal);
-
- o.normalWorld.xyz = normalWorld;
- o.eyeVec.xyz = eyeVec;
-
- #ifdef _NORMALMAP
- half3 tangentSpaceEyeVec;
- TangentSpaceLightingInput(normalWorld, v.tangent, _WorldSpaceLightPos0.xyz, eyeVec, o.tangentSpaceLightDir, tangentSpaceEyeVec);
- #if SPECULAR_HIGHLIGHTS
- o.tangentSpaceEyeVec = tangentSpaceEyeVec;
- #endif
- #endif
-
- //We need this for shadow receiving
- TRANSFER_SHADOW(o);
-
- o.ambientOrLightmapUV = VertexGIForward(v, posWorld, normalWorld);
-
- o.fogCoord.yzw = reflect(eyeVec, normalWorld);
-
- o.normalWorld.w = Pow4(1 - saturate(dot(normalWorld, -eyeVec))); // fresnel term
- #if !GLOSSMAP
- o.eyeVec.w = saturate(_Glossiness + UNIFORM_REFLECTIVITY()); // grazing term
- #endif
-
- UNITY_TRANSFER_FOG(o, o.pos);
- return o;
-}
-
-
-FragmentCommonData FragmentSetupSimple(VertexOutputBaseSimple i, float4 mfxUv, float3 mfxVertexPos)
-{
- //half alpha = Alpha(i.tex.xy);
- //#if defined(_ALPHATEST_ON)
- // clip (alpha - _Cutoff);
- //#endif
-
- //MFX
- half alpha = GetMfxDissolve(i.mfxUv, i.worldPos);
- MfxClip(alpha);
-
- FragmentCommonData s = UNITY_SETUP_BRDF_INPUT (i.tex);
-
- // NOTE: shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
- s.diffColor = PreMultiplyAlpha (s.diffColor, alpha, s.oneMinusReflectivity, /*out*/ s.alpha);
- s.alpha = alpha;
- s.normalWorld = i.normalWorld.xyz;
- s.eyeVec = i.eyeVec.xyz;
- s.posWorld = IN_WORLDPOS(i);
- s.reflUVW = i.fogCoord.yzw;
-
- #ifdef _NORMALMAP
- s.tangentSpaceNormal = NormalInTangentSpace(i.tex);
- #else
- s.tangentSpaceNormal = 0;
- #endif
-
- return s;
-}
-
-UnityLight MainLightSimple(VertexOutputBaseSimple i, FragmentCommonData s)
-{
- UnityLight mainLight = MainLight();
- return mainLight;
-}
-
-half PerVertexGrazingTerm(VertexOutputBaseSimple i, FragmentCommonData s)
-{
- #if GLOSSMAP
- return saturate(s.smoothness + (1-s.oneMinusReflectivity));
- #else
- return i.eyeVec.w;
- #endif
-}
-
-half PerVertexFresnelTerm(VertexOutputBaseSimple i)
-{
- return i.normalWorld.w;
-}
-
-#if !SPECULAR_HIGHLIGHTS
-# define REFLECTVEC_FOR_SPECULAR(i, s) half3(0, 0, 0)
-#elif defined(_NORMALMAP)
-# define REFLECTVEC_FOR_SPECULAR(i, s) reflect(i.tangentSpaceEyeVec, s.tangentSpaceNormal)
-#else
-# define REFLECTVEC_FOR_SPECULAR(i, s) s.reflUVW
-#endif
-
-half3 LightDirForSpecular(VertexOutputBaseSimple i, UnityLight mainLight)
-{
- #if SPECULAR_HIGHLIGHTS && defined(_NORMALMAP)
- return i.tangentSpaceLightDir;
- #else
- return mainLight.dir;
- #endif
-}
-
-half3 BRDF3DirectSimple(half3 diffColor, half3 specColor, half smoothness, half rl)
-{
- #if SPECULAR_HIGHLIGHTS
- return BRDF3_Direct(diffColor, specColor, Pow4(rl), smoothness);
- #else
- return diffColor;
- #endif
-}
-
-half4 fragForwardBaseSimpleInternal (VertexOutputBaseSimple i)
-{
- UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
-
- FragmentCommonData s = FragmentSetupSimple(i);
-
- UnityLight mainLight = MainLightSimple(i, s);
-
- #if !defined(LIGHTMAP_ON) && defined(_NORMALMAP)
- half ndotl = saturate(dot(s.tangentSpaceNormal, i.tangentSpaceLightDir));
- #else
- half ndotl = saturate(dot(s.normalWorld, mainLight.dir));
- #endif
-
- //we can't have worldpos here (not enough interpolator on SM 2.0) so no shadow fade in that case.
- half shadowMaskAttenuation = UnitySampleBakedOcclusion(i.ambientOrLightmapUV, 0);
- half realtimeShadowAttenuation = SHADOW_ATTENUATION(i);
- half atten = UnityMixRealtimeAndBakedShadows(realtimeShadowAttenuation, shadowMaskAttenuation, 0);
-
- half occlusion = Occlusion(i.tex.xy);
- half rl = dot(REFLECTVEC_FOR_SPECULAR(i, s), LightDirForSpecular(i, mainLight));
-
- UnityGI gi = FragmentGI (s, occlusion, i.ambientOrLightmapUV, atten, mainLight);
- half3 attenuatedLightColor = gi.light.color * ndotl;
-
- half3 c = BRDF3_Indirect(s.diffColor, s.specColor, gi.indirect, PerVertexGrazingTerm(i, s), PerVertexFresnelTerm(i));
- c += BRDF3DirectSimple(s.diffColor, s.specColor, s.smoothness, rl) * attenuatedLightColor;
- c += Emission(i.tex.xy);
-
- UNITY_APPLY_FOG(i.fogCoord, c);
-
- return OutputForward (half4(c, 1), s.alpha);
-}
-
-half4 fragForwardBaseSimple (VertexOutputBaseSimple i) : SV_Target // backward compatibility (this used to be the fragment entry function)
-{
- return fragForwardBaseSimpleInternal(i);
-}
-
-struct VertexOutputForwardAddSimple
-{
- UNITY_POSITION(pos);
- float4 tex : TEXCOORD0;
- float3 posWorld : TEXCOORD1;
-
- UNITY_SHADOW_COORDS(2)
-
-#if !defined(_NORMALMAP) && SPECULAR_HIGHLIGHTS
- UNITY_FOG_COORDS_PACKED(3, half4) // x: fogCoord, yzw: reflectVec
-#else
- UNITY_FOG_COORDS_PACKED(3, half1)
-#endif
-
- half3 lightDir : TEXCOORD4;
-
-#if defined(_NORMALMAP)
- #if SPECULAR_HIGHLIGHTS
- half3 tangentSpaceEyeVec : TEXCOORD5;
- #endif
-#else
- half3 normalWorld : TEXCOORD5;
-#endif
-
- UNITY_VERTEX_OUTPUT_STEREO
-};
-
-VertexOutputForwardAddSimple vertForwardAddSimple (VertexInput v)
-{
- VertexOutputForwardAddSimple o;
- UNITY_SETUP_INSTANCE_ID(v);
- UNITY_INITIALIZE_OUTPUT(VertexOutputForwardAddSimple, o);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
-
- float4 posWorld = mul(unity_ObjectToWorld, v.vertex);
- o.pos = UnityObjectToClipPos(v.vertex);
- o.tex = TexCoords(v);
- o.posWorld = posWorld.xyz;
-
- //We need this for shadow receiving
- UNITY_TRANSFER_SHADOW(o, v.uv1);
-
- half3 lightDir = _WorldSpaceLightPos0.xyz - posWorld.xyz * _WorldSpaceLightPos0.w;
- #ifndef USING_DIRECTIONAL_LIGHT
- lightDir = NormalizePerVertexNormal(lightDir);
- #endif
-
- #if SPECULAR_HIGHLIGHTS
- half3 eyeVec = normalize(posWorld.xyz - _WorldSpaceCameraPos);
- #endif
-
- half3 normalWorld = UnityObjectToWorldNormal(v.normal);
-
- #ifdef _NORMALMAP
- #if SPECULAR_HIGHLIGHTS
- TangentSpaceLightingInput(normalWorld, v.tangent, lightDir, eyeVec, o.lightDir, o.tangentSpaceEyeVec);
- #else
- half3 ignore;
- TangentSpaceLightingInput(normalWorld, v.tangent, lightDir, 0, o.lightDir, ignore);
- #endif
- #else
- o.lightDir = lightDir;
- o.normalWorld = normalWorld;
- #if SPECULAR_HIGHLIGHTS
- o.fogCoord.yzw = reflect(eyeVec, normalWorld);
- #endif
- #endif
-
- UNITY_TRANSFER_FOG(o,o.pos);
- return o;
-}
-
-FragmentCommonData FragmentSetupSimpleAdd(VertexOutputForwardAddSimple i, float4 mfxUv, float3 mfxVertexPos)
-{
- //half alpha = Alpha(i.tex.xy);
- //#if defined(_ALPHATEST_ON)
- // clip (alpha - _Cutoff);
- //#endif
-
- half alpha = GetMfxDissolve(i.mfxUv, i.worldPos);
- MfxClip(alpha);
-
- FragmentCommonData s = UNITY_SETUP_BRDF_INPUT (i.tex);
-
- // NOTE: shader relies on pre-multiply alpha-blend (_SrcBlend = One, _DstBlend = OneMinusSrcAlpha)
- s.diffColor = PreMultiplyAlpha (s.diffColor, alpha, s.oneMinusReflectivity, /*out*/ s.alpha);
- s.alpha = alpha;
- s.eyeVec = 0;
- s.posWorld = i.posWorld;
-
- #ifdef _NORMALMAP
- s.tangentSpaceNormal = NormalInTangentSpace(i.tex);
- s.normalWorld = 0;
- #else
- s.tangentSpaceNormal = 0;
- s.normalWorld = i.normalWorld;
- #endif
-
- #if SPECULAR_HIGHLIGHTS && !defined(_NORMALMAP)
- s.reflUVW = i.fogCoord.yzw;
- #else
- s.reflUVW = 0;
- #endif
-
- return s;
-}
-
-half3 LightSpaceNormal(VertexOutputForwardAddSimple i, FragmentCommonData s)
-{
- #ifdef _NORMALMAP
- return s.tangentSpaceNormal;
- #else
- return i.normalWorld;
- #endif
-}
-
-half4 fragForwardAddSimpleInternal(VertexOutputForwardAddSimple i, float4 mfxUv, float3 mfxVertexPos)
-{
- UNITY_APPLY_DITHER_CROSSFADE(i.pos.xy);
-
- FragmentCommonData s = FragmentSetupSimpleAdd(i);
-
- half3 c = BRDF3DirectSimple(s.diffColor, s.specColor, s.smoothness, dot(REFLECTVEC_FOR_SPECULAR(i, s), i.lightDir));
-
- #if SPECULAR_HIGHLIGHTS // else diffColor has premultiplied light color
- c *= _LightColor0.rgb;
- #endif
-
- UNITY_LIGHT_ATTENUATION(atten, i, s.posWorld)
- c *= atten * saturate(dot(LightSpaceNormal(i, s), i.lightDir));
-
- UNITY_APPLY_FOG_COLOR(i.fogCoord, c.rgb, half4(0,0,0,0)); // fog towards black in additive pass
- return OutputForward (half4(c, 1), s.alpha);
-}
-
-half4 fragForwardAddSimple (VertexOutputForwardAddSimple i) : SV_Target // backward compatibility (this used to be the fragment entry function)
-{
- return fragForwardAddSimpleInternal(i);
-}
-
-#endif // UNITY_STANDARD_CORE_FORWARD_SIMPLE_INCLUDED