Silhouetted Bumped Diffuse.shader 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. Shader "Outlined/Silhouetted Bumped Diffuse" {
  3. Properties{
  4. _Color("Main Color", Color) = (.5,.5,.5,1)
  5. _OutlineColor("Outline Color", Color) = (0,0,0,1)
  6. _Outline("Outline width", Range(0.0, 0.03)) = .005
  7. _MainTex("Base (RGB)", 2D) = "white" { }
  8. _BumpMap("Bumpmap", 2D) = "bump" {}
  9. }
  10. CGINCLUDE
  11. #include "UnityCG.cginc"
  12. struct appdata {
  13. float4 vertex : POSITION;
  14. float3 normal : NORMAL;
  15. };
  16. struct v2f {
  17. float4 pos : POSITION;
  18. float4 color : COLOR;
  19. };
  20. uniform float _Outline;
  21. uniform float4 _OutlineColor;
  22. v2f vert(appdata v) {
  23. // just make a copy of incoming vertex data but scaled according to normal direction
  24. v2f o;
  25. o.pos = UnityObjectToClipPos(v.vertex);
  26. float3 norm = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
  27. float2 offset = TransformViewToProjection(norm.xy);
  28. o.pos.xy += offset * o.pos.z * _Outline;
  29. o.color = _OutlineColor;
  30. return o;
  31. }
  32. ENDCG
  33. SubShader{
  34. Tags { "Queue" = "Transparent" }
  35. // note that a vertex shader is specified here but its using the one above
  36. Pass {
  37. Name "OUTLINE"
  38. Tags { "LightMode" = "Always" }
  39. Cull Off
  40. ZWrite Off
  41. ZTest Always
  42. // you can choose what kind of blending mode you want for the outline
  43. Blend SrcAlpha OneMinusSrcAlpha // Normal
  44. //Blend One One // Additive
  45. //Blend One OneMinusDstColor // Soft Additive
  46. //Blend DstColor Zero // Multiplicative
  47. //Blend DstColor SrcColor // 2x Multiplicative
  48. CGPROGRAM
  49. #pragma vertex vert
  50. #pragma fragment frag
  51. half4 frag(v2f i) : COLOR {
  52. return i.color;
  53. }
  54. ENDCG
  55. }
  56. CGPROGRAM
  57. #pragma surface surf Lambert
  58. struct Input {
  59. float2 uv_MainTex;
  60. float2 uv_BumpMap;
  61. };
  62. sampler2D _MainTex;
  63. sampler2D _BumpMap;
  64. uniform float3 _Color;
  65. void surf(Input IN, inout SurfaceOutput o) {
  66. o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb * _Color;
  67. o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
  68. }
  69. ENDCG
  70. }
  71. SubShader{
  72. Tags { "Queue" = "Transparent" }
  73. Pass {
  74. Name "OUTLINE"
  75. Tags { "LightMode" = "Always" }
  76. Cull Front
  77. ZWrite Off
  78. ZTest Always
  79. Offset 15,15
  80. // you can choose what kind of blending mode you want for the outline
  81. Blend SrcAlpha OneMinusSrcAlpha // Normal
  82. //Blend One One // Additive
  83. //Blend One OneMinusDstColor // Soft Additive
  84. //Blend DstColor Zero // Multiplicative
  85. //Blend DstColor SrcColor // 2x Multiplicative
  86. CGPROGRAM
  87. #pragma vertex vert
  88. #pragma exclude_renderers gles xbox360 ps3
  89. ENDCG
  90. SetTexture[_MainTex] { combine primary }
  91. }
  92. CGPROGRAM
  93. #pragma surface surf Lambert
  94. struct Input {
  95. float2 uv_MainTex;
  96. float2 uv_BumpMap;
  97. };
  98. sampler2D _MainTex;
  99. sampler2D _BumpMap;
  100. uniform float3 _Color;
  101. void surf(Input IN, inout SurfaceOutput o) {
  102. o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb * _Color;
  103. o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap));
  104. }
  105. ENDCG
  106. }
  107. Fallback "Outlined/Silhouetted Diffuse"
  108. }