BITFALL/Assets/Plugins/_MK/MKGlow/Shaders/Selective/MKGlowSelectiveRender.shader

389 lines
8.1 KiB
Plaintext

//////////////////////////////////////////////////////
// MK Glow Selective Render Shader //
// //
// Created by Michael Kremmel //
// www.michaelkremmel.de //
// Copyright © 2017 All rights reserved. //
//////////////////////////////////////////////////////
Shader "Hidden/MK/Glow/SelectiveRender"
{
SubShader
{
Tags { "RenderType"="MKGlow" "Queue"="Transparent" "LightMode"="ForwardBase" }
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
ZTest LEqual
Fog { Mode Off }
Cull Back
Lighting Off
ZWrite On
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile _EMISSION
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform sampler2D _EmissionMap;
uniform fixed3 _EmissionColor;
uniform fixed4 _Color;
struct Input
{
float2 texcoord : TEXCOORD0;
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Output
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Output vert (Input i)
{
UNITY_SETUP_INSTANCE_ID(i);
Output o;
UNITY_INITIALIZE_OUTPUT(Output,o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos(i.vertex);
o.uv = i.texcoord.xy;
return o;
}
fixed4 frag (Output i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
#ifdef _EMISSION
fixed4 glow = tex2D(_EmissionMap, i.uv.xy);
glow.rgb *= _EmissionColor * glow.a;
glow.a = tex2D(_MainTex, i.uv.xy).a * _Color.a;
return glow;
#else
return fixed4(0,0,0, tex2D(_MainTex, i.uv.xy).a * _Color.a);
#endif
}
ENDHLSL
}
}
SubShader
{
Tags { "RenderType"="MKGlowLegacy" "Queue"="Transparent" "LightMode"="ForwardBase"}
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
ZTest LEqual
Fog { Mode Off }
Cull Back
Lighting Off
ZWrite On
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform sampler2D _MKGlowTex;
uniform float4 _MKGlowTex_ST;
uniform fixed4 _MKGlowColor;
uniform half _MKGlowPower;
uniform half _MKGlowTexPower;
uniform fixed4 _Color;
struct Input
{
float2 texcoord : TEXCOORD0;
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Output
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Output vert (Input i)
{
UNITY_SETUP_INSTANCE_ID(i);
Output o;
UNITY_INITIALIZE_OUTPUT(Output,o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos(i.vertex);
o.uv = i.texcoord.xy;
return o;
}
fixed4 frag (Output i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
fixed4 glow = tex2D(_MKGlowTex, i.uv.xy);
glow.rgb *= (_MKGlowColor * _MKGlowPower);
glow.rgb *= glow.a;
glow.a = tex2D(_MainTex, i.uv.xy).a * _Color.a;
return glow;
}
ENDHLSL
}
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="MKGlowUI"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
"LightMode"="ForwardBase"
}
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Cull Off
Lighting Off
ZWrite Off
ZTest [unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Pass
{
Name "Default"
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 2.0
#pragma multi_compile __ UNITY_UI_CLIP_RECT
#pragma multi_compile __ UNITY_UI_ALPHACLIP
#define _EMISSION_ONLY
#include "UnityCG.cginc"
#include "UnityUI.cginc"
#include "../Inc/UI.hlsl"
ENDHLSL
}
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="MKGlowSprite"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
"LightMode"="ForwardBase"
}
Cull Off
Lighting Off
ZWrite On
Blend One OneMinusSrcAlpha
Pass
{
HLSLPROGRAM
#pragma vertex SpriteVert
#pragma fragment SpriteNoMainFrag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
#pragma multi_compile _ PIXELSNAP_ON
#pragma multi_compile _ ETC1_EXTERNAL_ALPHA
#define _EMISSION_ONLY
#include "UnityCG.cginc"
#include "../Inc/Sprite.hlsl"
ENDHLSL
}
}
SubShader
{
Tags { "RenderType"="Opaque" "LightMode"="ForwardBase" }
Pass
{
Fog { Mode Off }
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
#include "UnityCG.cginc"
struct Input
{
float2 texcoord : TEXCOORD0;
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Output
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Output vert (Input i)
{
UNITY_SETUP_INSTANCE_ID(i);
Output o;
UNITY_INITIALIZE_OUTPUT(Output,o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos (i.vertex);
o.uv = i.texcoord;
return o;
}
fixed4 frag (Output i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
return fixed4(0,0,0,1);
}
ENDHLSL
}
}
SubShader
{
Tags { "RenderType"="Transparent" "LightMode"="ForwardBase" }
Pass
{
Cull Off
Fog { Mode Off }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform fixed4 _Color;
struct Input
{
float2 texcoord : TEXCOORD0;
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Output
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Output vert (Input i)
{
UNITY_SETUP_INSTANCE_ID(i);
Output o;
UNITY_INITIALIZE_OUTPUT(Output,o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos (i.vertex);
o.uv = i.texcoord;
return o;
}
fixed4 frag (Output i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
return fixed4(0,0,0, tex2D(_MainTex, i.uv).a * _Color.a);
}
ENDHLSL
}
}
SubShader
{
Tags { "RenderType"="TransparentCutout" "LightMode"="ForwardBase" }
Pass
{
Fog { Mode Off }
Blend SrcAlpha OneMinusSrcAlpha
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 2.0
#pragma multi_compile_instancing
uniform half _Cutoff;
#include "UnityCG.cginc"
struct Input
{
float2 texcoord : TEXCOORD0;
float4 vertex : POSITION;
UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Output
{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Output vert (Input i)
{
UNITY_SETUP_INSTANCE_ID(i);
Output o;
UNITY_INITIALIZE_OUTPUT(Output,o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
o.pos = UnityObjectToClipPos (i.vertex);
o.uv = i.texcoord;
return o;
}
fixed4 frag (Output i) : SV_TARGET
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i)
clip(_Cutoff);
return fixed4(0,0,0,1);
}
ENDHLSL
}
}
}