Files
2026-03-12 00:22:03 +08:00

122 lines
4.6 KiB
Plaintext

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Game/Role/Role-Diffuse" {
Properties {
_MainTex ("Base (RGB) Trans (A)", 2D) = "white" {}
_StencilComp("Stencil Comparison", Float) = 8
_Stencil("Stencil ID", Float) = 0
_StencilOp("Stencil Operation", Float) = 0
_StencilWriteMask("Stencil Write Mask", Float) = 255
_StencilReadMask("Stencil Read Mask", Float) = 255
_ColorMask("Color Mask", Float) = 15
_LightDir_0 ("Light0 direction", Vector) = (0.6, -0.8, 0.2, 1.0)
_LightColor_0 ("Light0 color", Color) = (0.6196,0.5255,0.46275,1)
_LightIntensity_0 ("Light0 intensity", Range(0,8)) = 0.8
_LightDir_1 ("Light1 direction", Vector) = (-0.9, 0.5, 0.1, 1.0)
_LightColor_1 ("Light1 color", Color) = (0.2196,0.498,0.61176,1)
_LightIntensity_1 ("Light1 intensity", Range(0,8)) = 0.6
_RimColor ("Rim color", Color) = (0.4, 0.4, 0.4, 1)
_RimWidth ("Rim width", Range(0,1)) = 0.7
_Direction ("Direction", Range(-1,1)) = 1
_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
}
SubShader {
Pass {
Tags {"Queue"="AlphaTest" "IgnoreProjector"="True"}
AlphaTest Greater [_Cutoff]
Lighting Off
Fog {Mode Off}
Offset 0,-1
Cull Back
ZWrite On
LOD 200
Stencil
{
Ref[_Stencil]
Comp[_StencilComp]
Pass[_StencilOp]
ReadMask[_StencilReadMask]
WriteMask[_StencilWriteMask]
}
CGPROGRAM
#include "UnityCG.cginc"
#pragma exclude_renderers flash xbox360 ps3
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
float4 _LightDir_0;
float4 _LightColor_0;
float _LightIntensity_0;
float4 _LightDir_1;
float4 _LightColor_1;
float _LightIntensity_1;
float4 _RimColor;
float _RimWidth;
float _Direction;
struct appdata {
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 texcoord : TEXCOORD0;
};
struct v2f {
float4 pos : POSITION;
float2 texcoord : TEXCOORD0;
float4 posWorld : TEXCOORD1;
float3 normalDir : TEXCOORD2;
};
float4 _MainTex_ST;
v2f vert(appdata v) {
v2f o;
float4x4 modelMatrix = unity_ObjectToWorld;
o.posWorld = mul(modelMatrix, v.vertex);
o.pos = UnityObjectToClipPos(v.vertex);
o.normalDir = normalize(mul(modelMatrix, float4(v.normal, 0.0)).xyz);
o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));
float dotProduct = 1 - dot(v.normal, viewDir);
return o;
}
half4 frag(v2f i) :COLOR {
float3 normalDirection = normalize(i.normalDir);
float3 viewDirection = normalize(_WorldSpaceCameraPos - i.posWorld.xyz);
float3 cDir = float3(_Direction,1,1);
float3 lightDirection0 = normalize(-_LightDir_0 * cDir);
float3 NDotL0 = max(0.0, dot(normalDirection, lightDirection0));
float4 diffuseReflection0 = float4(_LightIntensity_0 * _LightColor_0.rgb * NDotL0, 1.0);
float3 lightDirection1 = normalize(-_LightDir_1 * cDir);
float3 NDotL1 = max(0.0, dot(normalDirection, lightDirection1));
float4 diffuseReflection1 = float4(_LightIntensity_1 * _LightColor_1.rgb * NDotL1, 1.0);
float dotProduct = 1 - dot(normalDirection, viewDirection);
float4 rim = smoothstep(1 - _RimWidth, 1.0, dotProduct) * _RimColor;
half4 tex = tex2D(_MainTex, i.texcoord);
half4 c = ((UNITY_LIGHTMODEL_AMBIENT + diffuseReflection0 + diffuseReflection1) * 2+ rim) * tex ;
c.a = tex.a;
return c;
}
ENDCG
}
}
FallBack "Diffuse"
}