表面着色器(alphatest)

作者:追风剑情 发布于:2018-12-29 11:36 分类:Shader

  1. Shader "Custom/vertexTest"
  2. {
  3. Properties {
  4. _Color ("Main Color", Color) = (1,1,1,1)
  5. _SpecColor ("Specular Color", Color) = (0.5, 0.5, 0.5, 0)
  6. _Shininess ("Shininess", Range (0.01, 1)) = 0.078125
  7. _MainTex ("Base (RGB) TransGloss (A)", 2D) = "white" {}
  8.  
  9. _Cut("Cut", Range(0,1)) = 0.5
  10. _Amount ("Amount", Float) = 0
  11. }
  12.  
  13. SubShader {
  14. Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"}
  15. LOD 300
  16.  
  17. CGPROGRAM
  18. //https://docs.unity3d.com/Manual/SL-SurfaceShaders.html
  19. //Lambert、BlinnPhong
  20. //如果要处理alpha通道,需要加上alpha、alpha:auto、alpha:fade、alpha:premul、alphatest选项之一
  21. //这里用了AlphaTest,alpha大于_Cut值的像素才会显示出来
  22. //alpha:blend 透明度混合
  23. #pragma surface surf Lambert vertex:vert alphatest:_Cut
  24.  
  25. sampler2D _MainTex;
  26. fixed4 _Color;
  27. half _Shininess;
  28. half _Amount;
  29.  
  30. struct Input {
  31. float2 uv_MainTex;
  32. };
  33.  
  34. void vert (inout appdata_full v)
  35. {
  36. //将顶点沿法线方向偏移
  37. v.vertex.xyz += v.normal * _Amount;
  38. }
  39.  
  40. void surf (Input IN, inout SurfaceOutput o) {
  41. fixed4 tex = tex2D(_MainTex, IN.uv_MainTex);
  42. o.Albedo = tex.rgb * _Color.rgb;
  43. o.Gloss = tex.a;
  44. o.Alpha = tex.a * _Color.a;
  45. o.Specular = _Shininess;
  46. }
  47. ENDCG
  48. }
  49.  
  50. Fallback "Legacy Shaders/Transparent/VertexLit"
  51. }

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号