RimEdge.shader 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. Shader "RO/RimEdgeGlow"
  3. {
  4. Properties{
  5. _MainTex("Base (RGB)", 2D) = "white" {}
  6. _RimColor("Rim Color",COLOR) = (1,1,1,1)
  7. _Scale("Scale",range(1,8)) = 2
  8. _Outer("Outer",range(0,1)) = 0.2
  9. }
  10. SubShader
  11. {
  12. Tags { "RenderType" = "Opaque" "queue" = "Transparent"}
  13. LOD 300
  14. //=================卡通渲染PASS======================
  15. Pass {
  16. blend srcalpha one
  17. zwrite off
  18. CGPROGRAM
  19. #pragma vertex vert
  20. #pragma fragment frag
  21. #include "UnityCG.cginc"
  22. float4 _RimColor;
  23. float _Scale;
  24. float _Outer;
  25. struct a2v {
  26. float4 vertex : POSITION;
  27. float3 normal : NORMAL;
  28. float4 texcoord : TEXCOORD0;
  29. };
  30. struct v2f {
  31. float4 pos : POSITION;
  32. float3 normal:TEXCOORD0;
  33. float4 vertex:TEXCOORD1;
  34. };
  35. v2f vert(a2v v) {
  36. v.vertex.xyz += v.normal*_Outer;
  37. v2f o;
  38. o.pos = UnityObjectToClipPos(v.vertex);
  39. o.vertex = v.vertex;
  40. o.normal = v.normal;
  41. return o;
  42. }
  43. fixed4 frag(v2f i) : COLOR {
  44. float3 N = UnityObjectToWorldNormal(i.normal);
  45. float3 V = normalize(WorldSpaceViewDir(i.vertex));
  46. float bright = pow(saturate(dot(N,V)),_Scale);
  47. _RimColor.a *= bright;
  48. return _RimColor;
  49. }
  50. ENDCG
  51. }
  52. //========================================
  53. Pass {
  54. Tags { "LightMode" = "ForwardBase" }
  55. //blend one one // 当前都不渲染
  56. //zwrite off
  57. CGPROGRAM
  58. #pragma vertex vert
  59. #pragma fragment frag
  60. #include "UnityCG.cginc"
  61. //只有点乘在frag做
  62. float4 _RimColor;
  63. float _Scale;
  64. sampler2D _MainTex;
  65. struct a2v {
  66. float4 vertex : POSITION;
  67. float3 normal : NORMAL;
  68. float4 texcoord : TEXCOORD0;
  69. };
  70. struct v2f {
  71. float4 pos : POSITION;
  72. float2 uv0 : TEXCOORD0;
  73. };
  74. v2f vert(a2v v) {
  75. v2f o;
  76. o.pos = UnityObjectToClipPos(v.vertex);
  77. o.uv0 = v.texcoord;
  78. return o;
  79. }
  80. fixed4 frag(v2f i) : COLOR {
  81. fixed4 clr = tex2D(_MainTex, i.uv0.xy);
  82. return clr;
  83. }
  84. ENDCG
  85. }
  86. }
  87. //FallBack "Diffuse"
  88. }