利用模板测试实现遮罩效果

作者:追风剑情 发布于:2017-8-4 17:15 分类:Shader

模板测试

参考 http://blog.csdn.net/u011047171/article/details/46928463

官方文档 https://docs.unity3d.com/Manual/SL-Stencil.html

示例: Unity5.5

一、创建Cube和Quad,如图

11111.png

二、挂上Shader,如图

222.png33333.png

以下是Shader代码


  1. Shader "Custom/Stencil" {
  2. Properties {
  3. _Color ("Main Color", Color) = (1,1,1,0)
  4. _SpecColor ("Spec Color", Color) = (1,1,1,1)
  5. _Emission ("Emmisive Color", Color) = (0,0,0,0)
  6. _Shininess ("Shininess", Range (0.01, 1)) = 0.7
  7. _MainTex ("Base (RGB)", 2D) = "white" {}
  8. }
  9. SubShader {
  10. Tags { "RenderType"="Opaque" "Queue"="Geometry"}
  11. Pass {
  12. //设置模板测试
  13. Stencil{
  14. //参考值
  15. Ref 1
  16. //如果Ref值等于StenciBuffer值,则模板测试通过
  17. Comp Equal
  18. }
  19. Material {
  20. //漫反射颜色
  21. Diffuse [_Color]
  22. //环境光颜色
  23. Ambient [_Color]
  24. //亮度
  25. Shininess [_Shininess]
  26. //高光颜色
  27. Specular [_SpecColor]
  28. //自发光颜色
  29. Emission [_Emission]
  30. }
  31. //开启光照
  32. Lighting On
  33. //开启高光
  34. SeparateSpecular On
  35. //混合纹理
  36. SetTexture [_MainTex] {
  37. //纹理混合模式参见: https://docs.unity3d.com/Manual/SL-SetTexture.html
  38. //主纹理rgb * 光照颜色rgb 2倍亮度, 主纹理alpha * 光照颜色的alpha
  39. Combine texture * primary DOUBLE, texture * primary
  40.  
  41. //Quad: 4倍亮度
  42. //Combine texture * primary Quad, texture * primary
  43. }
  44. }
  45. }
  46. }



  1. Shader "Custom/StencilMask" {
  2. Properties {
  3. _Color ("Main Color", Color) = (1,1,1,0)
  4. _SpecColor ("Spec Color", Color) = (1,1,1,1)
  5. _Emission ("Emmisive Color", Color) = (0,0,0,0)
  6. _Shininess ("Shininess", Range (0.01, 1)) = 0.7
  7. _MainTex ("Base (RGB)", 2D) = "white" {}
  8. }
  9. SubShader {
  10. Tags { "RenderType"="Opaque" "Queue"="Geometry-1"}
  11. Pass {
  12. //关闭RGBA输出通道
  13. ColorMask 0
  14. //关闭深度写入
  15. ZWrite Off
  16. //设置模板测试
  17. Stencil{
  18. //参考值
  19. Ref 1
  20. //总是通过
  21. Comp Always
  22. //模板测试和深度测试都成功后,用Ref值替换掉stencilBuffer值
  23. Pass Replace
  24. }
  25. Material {
  26. //漫反射颜色
  27. Diffuse [_Color]
  28. //环境光颜色
  29. Ambient [_Color]
  30. //亮度
  31. Shininess [_Shininess]
  32. //高光颜色
  33. Specular [_SpecColor]
  34. //自发光颜色
  35. Emission [_Emission]
  36. }
  37. //开启光照
  38. Lighting On
  39. //开启高光
  40. SeparateSpecular On
  41. //混合纹理
  42. SetTexture [_MainTex] {
  43. //纹理混合模式参见: https://docs.unity3d.com/Manual/SL-SetTexture.html
  44. //主纹理rgb * 光照颜色rgb 2倍亮度, 主纹理alpha * 光照颜色的alpha
  45. Combine texture * primary DOUBLE, texture * primary
  46.  
  47. //Quad: 4倍亮度
  48. //Combine texture * primary Quad, texture * primary
  49. }
  50. }
  51. }
  52. }


三、预览效果,只有被Quad遮挡住的Cube部分会被渲染到屏幕上。

44444.png

标签: Shader

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号