123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #ifndef UNITY_META_PASS_INCLUDED
- #define UNITY_META_PASS_INCLUDED
-
- #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
- #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl"
-
- CBUFFER_START(UnityMetaPass)
- // x = use uv1 as raster position
- // y = use uv2 as raster position
- bool4 unity_MetaVertexControl;
-
- // x = return albedo
- // y = return normal
- bool4 unity_MetaFragmentControl;
-
- // Control which VisualizationMode we will
- // display in the editor
- int unity_VisualizationMode;
- CBUFFER_END
-
- struct UnityMetaInput
- {
- half3 Albedo;
- half3 Emission;
- #ifdef EDITOR_VISUALIZATION
- float2 VizUV;
- float4 LightCoord;
- #endif
- };
-
- #ifdef EDITOR_VISUALIZATION
- // Visualization defines
- // Should be kept in sync with the EditorVisualizationMode enum in EditorCameraDrawing.cpp
- // First two are unused.
- #define EDITORVIZ_PBR_VALIDATION_ALBEDO 0
- #define EDITORVIZ_PBR_VALIDATION_METALSPECULAR 1
- #define EDITORVIZ_TEXTURE 2
- #define EDITORVIZ_SHOWLIGHTMASK 3
-
- uniform sampler2D unity_EditorViz_Texture;
- uniform half4 unity_EditorViz_Texture_ST;
- uniform int unity_EditorViz_UVIndex;
- uniform half4 unity_EditorViz_Decode_HDR;
- uniform bool unity_EditorViz_ConvertToLinearSpace;
- uniform half4 unity_EditorViz_ColorMul;
- uniform half4 unity_EditorViz_ColorAdd;
- uniform half unity_EditorViz_Exposure;
- uniform sampler2D unity_EditorViz_LightTexture;
- uniform sampler2D unity_EditorViz_LightTextureB;
- #define unity_EditorViz_ChannelSelect unity_EditorViz_ColorMul
- #define unity_EditorViz_Color unity_EditorViz_ColorAdd
- #define unity_EditorViz_LightType unity_EditorViz_UVIndex
- uniform float4x4 unity_EditorViz_WorldToLight;
- #endif // EDITOR_VISUALIZATION
-
- float2 UnityMetaVizUV(int uvIndex, float2 uv0, float2 uv1, float2 uv2, float4 st)
- {
- if (uvIndex == 0)
- return uv0 * st.xy + st.zw;
- else if (uvIndex == 1)
- return uv1 * st.xy + st.zw;
- else
- return uv2 * st.xy + st.zw;
- }
-
- void UnityEditorVizData(float3 positionOS, float2 uv0, float2 uv1, float2 uv2, float4 st, out float2 VizUV, out float4 LightCoord)
- {
- #ifdef EDITOR_VISUALIZATION
- if (unity_VisualizationMode == EDITORVIZ_TEXTURE)
- VizUV = UnityMetaVizUV(unity_EditorViz_UVIndex, uv0, uv1, uv2, unity_EditorViz_Texture_ST);
- else if (unity_VisualizationMode == EDITORVIZ_SHOWLIGHTMASK)
- {
- VizUV = uv1 * st.xy + st.zw;
- LightCoord = mul(unity_EditorViz_WorldToLight, float4(TransformObjectToWorld(positionOS), 1));
- }
- #endif
- }
-
- void UnityEditorVizData(float3 positionOS, float2 uv0, float2 uv1, float2 uv2, out float2 VizUV, out float4 LightCoord)
- {
- float4 st = unity_LightmapST;
- if (unity_MetaVertexControl.y)
- st = unity_DynamicLightmapST;
- UnityEditorVizData(positionOS, uv0, uv1, uv2, st, VizUV, LightCoord);
- }
-
- float4 UnityMetaVertexPosition(float3 vertex, float2 uv1, float2 uv2, float4 lightmapST, float4 dynlightmapST)
- {
- #ifndef EDITOR_VISUALIZATION
- if (unity_MetaVertexControl.x)
- {
- vertex.xy = uv1 * lightmapST.xy + lightmapST.zw;
- // OpenGL right now needs to actually use incoming vertex position,
- // so use it in a very dummy way
- vertex.z = vertex.z > 0 ? REAL_MIN : 0.0f;
- }
- if (unity_MetaVertexControl.y)
- {
- vertex.xy = uv2 * dynlightmapST.xy + dynlightmapST.zw;
- // OpenGL right now needs to actually use incoming vertex position,
- // so use it in a very dummy way
- vertex.z = vertex.z > 0 ? REAL_MIN : 0.0f;
- }
- return TransformWorldToHClip(vertex);
- #else
- return TransformObjectToHClip(vertex);
- #endif
- }
-
- float4 UnityMetaVertexPosition(float3 vertex, float2 uv1, float2 uv2)
- {
- return UnityMetaVertexPosition(vertex, uv1, uv2, unity_LightmapST, unity_DynamicLightmapST);
- }
-
- float unity_OneOverOutputBoost;
- float unity_MaxOutputValue;
- float unity_UseLinearSpace;
-
- half4 UnityMetaFragment (UnityMetaInput IN)
- {
- half4 res = 0;
- #ifndef EDITOR_VISUALIZATION
- if (unity_MetaFragmentControl.x)
- {
- res = half4(IN.Albedo,1);
-
- // Apply Albedo Boost from LightmapSettings.
- res.rgb = clamp(pow(abs(res.rgb), saturate(unity_OneOverOutputBoost)), 0, unity_MaxOutputValue);
- }
- if (unity_MetaFragmentControl.y)
- {
- half3 emission;
- if (unity_UseLinearSpace)
- emission = IN.Emission;
- else
- emission = Gamma20ToLinear(IN.Emission);
-
- res = half4(emission, 1.0);
- }
- #else
- // SRPs don't support EDITORVIZ_PBR_VALIDATION_ALBEDO or EDITORVIZ_PBR_VALIDATION_METALSPECULAR
- if (unity_VisualizationMode == EDITORVIZ_TEXTURE)
- {
- res = tex2D(unity_EditorViz_Texture, IN.VizUV);
-
- if (unity_EditorViz_Decode_HDR.x > 0)
- res = half4(DecodeHDREnvironment(res, unity_EditorViz_Decode_HDR), 1);
-
- if (unity_EditorViz_ConvertToLinearSpace)
- res.rgb = LinearToGamma20(res.rgb);
-
- res *= unity_EditorViz_ColorMul;
- res += unity_EditorViz_ColorAdd;
- res *= exp2(unity_EditorViz_Exposure);
- }
- else if (unity_VisualizationMode == EDITORVIZ_SHOWLIGHTMASK)
- {
- float result = dot(unity_EditorViz_ChannelSelect, tex2D(unity_EditorViz_Texture, IN.VizUV).rgba);
- if (result == 0)
- discard;
-
- float atten = 1;
- if (unity_EditorViz_LightType == 0)
- {
- // directional: no attenuation
- }
- else if (unity_EditorViz_LightType == 1)
- {
- // point
- atten = tex2D(unity_EditorViz_LightTexture, dot(IN.LightCoord.xyz, IN.LightCoord.xyz).xx).r;
- }
- else if (unity_EditorViz_LightType == 2)
- {
- // spot
- atten = tex2D(unity_EditorViz_LightTexture, dot(IN.LightCoord.xyz, IN.LightCoord.xyz).xx).r;
- float cookie = tex2D(unity_EditorViz_LightTextureB, IN.LightCoord.xy / max(IN.LightCoord.w, 0.0001) + 0.5).w;
- atten *= (IN.LightCoord.z > 0) * cookie;
- }
- clip(atten - 0.001f);
-
- res = float4(unity_EditorViz_Color.xyz * result, unity_EditorViz_Color.w);
- }
- #endif // EDITOR_VISUALIZATION
- return res;
- }
-
-
- #endif // UNITY_META_PASS_INCLUDED
|