Stencil模板测试说明

参考衔接:
【Unity Shader】 模板测试
参考这个博客中的模板测试代码,进行了下面探究

1、三个的顺序

三个物体的空间位置关系如下图;
在这里插入图片描述

三个物体的渲染队列如下,通过FrameDebug查看其渲染顺序为:Wall_Grayness(中间的墙)→ Sphere_InforntWall_Red(红色小球)→ Cube_BehindWall(墙后面的方块)
在这里插入图片描述
在这里插入图片描述
显示效果说明,Wall_Grayness的渲染队列为Background,先进行渲染,渲染完成后,Wall_Grayness所占屏幕区域内referenceValue值为9;其Shader中Comp Always,直接通过模板测试;显示效果如下图:
在这里插入图片描述
Sphere_InforntWall_Red渲染队列为Geometry,在Background之后,因此再渲染Sphere_InforntWall_Red,其shader中referenceValue值为2,判断条件为Comp NotEqual;就是说Sphere_InforntWall_Red所在区域内,如果模板缓冲区的referenceValue与Sphere_InforntWall_Red的referenceValue值不相等时,说明模板测试通过,显示Sphere_InforntWall_Red的像素;如果相等时,说明Sphere_InforntWall_Red模板测试不通过,丢弃其像素值,显示模板缓冲区中的像素值;
因此其显示效果如下:由于中间灰色墙的referenceValue(Ref)值9,与红色小球的值不相等,因此红色小球和灰色墙重叠部分,显示红色小球的像素值;
在这里插入图片描述

Cube_BehindWall渲染队列为Transparent,在Geometry之后,因此最后渲染Cube_BehindWall,其shader中referenceValue值为2,判断条件为Comp Equal;就是说Cube_BehindWall所在区域内,如果模板缓冲区的referenceValue与Cube_BehindWall的referenceValue值相等时,说明模板测试通过,显示Cube_BehindWall的像素;如果不相等时,说明Cube_BehindWall模板测试不通过,丢弃其像素值,显示模板缓冲区中的像素值;
因此其显示效果如下:由于中间灰色墙的referenceValue(Ref)值9,而红色小球的referenceValue(Ref)值2,因此墙后面方块在进行模板测试时,与红色小球重叠部分模板测试通过,其像素显示到模板缓冲区中,而与灰色墙重叠部分模板测试不通过丢弃;
其显示效果如下:
在这里插入图片描述

2、总结

上面实验中主要探讨模板测试相关,因此设置三种不同的渲染队列,在实际应用场景中,还需要考虑深度测试等其他影响渲染的因素;
按照下面三个测试,可以实现相同的效果;
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值