You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
CrowdControl/Assets/Feel/MMTools/Tools/MMShaders/MMMatcap.shader

111 lines
3.5 KiB
Plaintext

1 month ago
Shader "MoreMountains/MMMatcap"
{
Properties
{
_MatcapTexture("MatcapTexture", 2D) = "white" {}
[HideInInspector] __dirty( "", Int ) = 1
}
SubShader
{
Tags
{
"RenderType" = "Opaque" "Queue" = "Geometry+0" "IsEmissive" = "true"
}
Cull Back
ZTest LEqual
CGINCLUDE
#include "UnityShaderVariables.cginc"
#include "UnityPBSLighting.cginc"
#include "Lighting.cginc"
#pragma target 3.0
struct Input
{
half3 worldNormal;
};
uniform sampler2D _MatcapTexture;
void surf(Input i, inout SurfaceOutputStandard o)
{
half3 ase_worldNormal = i.worldNormal;
o.Emission = tex2D(_MatcapTexture,
((mul(half4(ase_worldNormal, 0.0), UNITY_MATRIX_V).xyz * 0.5) + 0.5).xy).rgb;
o.Alpha = 1;
}
ENDCG
CGPROGRAM
#pragma surface surf Standard keepalpha fullforwardshadows
ENDCG
Pass
{
Name "ShadowCaster"
Tags
{
"LightMode" = "ShadowCaster"
}
ZWrite On
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma target 3.0
#pragma multi_compile_shadowcaster
#pragma multi_compile UNITY_PASS_SHADOWCASTER
#pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
#include "HLSLSupport.cginc"
#if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )
#define CAN_SKIP_VPOS
#endif
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "UnityPBSLighting.cginc"
struct v2f
{
V2F_SHADOW_CASTER;
float3 worldPos : TEXCOORD1;
float3 worldNormal : TEXCOORD2;
UNITY_VERTEX_INPUT_INSTANCE_ID
UNITY_VERTEX_OUTPUT_STEREO
};
v2f vert(appdata_full v)
{
v2f o;
UNITY_SETUP_INSTANCE_ID(v);
UNITY_INITIALIZE_OUTPUT(v2f, o);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
UNITY_TRANSFER_INSTANCE_ID(v, o);
float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
half3 worldNormal = UnityObjectToWorldNormal(v.normal);
o.worldNormal = worldNormal;
o.worldPos = worldPos;
TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)
return o;
}
half4 frag(v2f IN
#if !defined( CAN_SKIP_VPOS )
, UNITY_VPOS_TYPE vpos : VPOS
#endif
) : SV_Target
{
UNITY_SETUP_INSTANCE_ID(IN);
Input surfIN;
UNITY_INITIALIZE_OUTPUT(Input, surfIN);
float3 worldPos = IN.worldPos;
half3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos));
surfIN.worldNormal = IN.worldNormal;
SurfaceOutputStandard o;
UNITY_INITIALIZE_OUTPUT(SurfaceOutputStandard, o)
surf(surfIN, o);
#if defined( CAN_SKIP_VPOS )
float2 vpos = IN.pos;
#endif
SHADOW_CASTER_FRAGMENT(IN)
}
ENDCG
}
}
Fallback "Diffuse"
}