Unity3D带自发光及边缘高光的shader

 1 Shader "Custom/Ill_RimLight" 

 2 {

 3     Properties {

 4         _Color ("Main Color", Color) = (.5,.5,.5,1)

 5         _OutlineColor ("Rim Color", Color) = (0,0,0,1)

 6         _Outline ("Rim width", Range (.002, 0.03)) = .005

 7         _MainTex ("Base (RGB)", 2D) = "white" { }

 8         _Illum ("Illumin (A)", 2D) = "white" { }

 9         _EmissionLM ("Emission (Lightmapper)", Float) = 0

10     }

11     

12     SubShader 

13     {

14 

15         Tags { "RenderType"="Opaque" }

16         LOD 200

17     

18         CGPROGRAM

19         #pragma surface surf Lambert

20 

21         sampler2D _MainTex;

22         sampler2D _Illum;

23         fixed4 _Color;

24 

25         struct Input {

26             float2 uv_MainTex;

27             float2 uv_Illum;

28         };

29 

30         void surf (Input IN, inout SurfaceOutput o) {

31             fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);

32             fixed4 c = tex * _Color;

33             o.Albedo = c.rgb;

34             o.Emission = c.rgb * tex2D(_Illum, IN.uv_Illum).a;

35             o.Alpha = c.a;

36         }

37         ENDCG

38 

39         Pass 

40         {

41             CGINCLUDE

42             #include "UnityCG.cginc"

43     

44             struct appdata {

45                 float4 vertex : POSITION;

46                 float3 normal : NORMAL;

47             };

48 

49             struct v2f {

50                 float4 pos : POSITION;

51                 float4 color : COLOR;

52             };

53     

54             uniform float _Outline;

55             uniform float4 _OutlineColor;

56     

57             v2f vert(appdata v) {

58                 v2f o;

59                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);

60 

61                 float3 norm   = mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal);

62                 float2 offset = TransformViewToProjection(norm.xy);

63 

64                 o.pos.xy += offset * o.pos.z * _Outline;

65                 o.color = _OutlineColor;

66                 return o;

67             }

68             ENDCG

69 

70             Name "OUTLINE"

71             Tags { "LightMode" = "Always" }

72             Cull Front

73             ZWrite On

74             ColorMask RGB

75             Blend SrcAlpha OneMinusSrcAlpha

76 

77             CGPROGRAM

78             #pragma vertex vert

79             #pragma fragment frag

80             half4 frag(v2f i) :COLOR { return i.color; }

81             ENDCG

82         }

83     } 

84     

85     Fallback "Self-Illumin/VertexLit"

86 }

 

你可能感兴趣的:(unity3d)