zoukankan      html  css  js  c++  java
  • 3、shader深度测试(Cull、ZWrite 、ZTest )

    剔除和深度测试是渲染法线中的一个流程

    Cull:默认情况下,Unity中给的所有Shader都是单面的,它都把反面的渲染给关闭掉了,如果你在开发的过程中需要使用到双面,只要把cull关闭(off)即可!

    ZWrite:深度缓存ZWrite默认情况下都是开启的,因为我们3D场景中的模型非常多,那么模型与模型之间的前后关系就是由ZWrite来控制的,所以默认情况下要开启,前面已经介绍过它了

    直接看效果来介绍

    Cull:Unity中给的所有Shader都是单面的,它都把反面的渲染给关闭掉了,我们来看下图就知道什么回事了,我们来新建一个Plane,看下它就知道了,

    这是cull back时的效果,前面被绘制了,后面被剔除了,unity中默认也是这样的

    当cull为fornt时,只有后面绘制了,前面被剔除了,效果为:

    当cull为off时,正反两面都被绘制了,效果为:

    ZTest:对这个了解的还不是很透彻,先这样理解吧,后面了解了,会更新!

    如上所述,默认为LEqual,就是绘制前面的对象与现有对象有一段距离的对象,隐藏现有对象后面的对象

    LEqual为lessEqual小于等于,可以理解为如果自己的深度小于或者等于某些物体时,就绘制这些物体,反之,进行隐藏处理!

    如果为greater时,就绘制那些深度小于自己的物体,而自己所有面积都隐藏,而如果深度大于自己的话,那么自己显示的面积为:自己和深度大于自己的物体相交的面积部分,而深度大于自己的物体面积全显示

    实例:场景中新建一个cube,再新建一个capsule,分别为两个物体创建两个默认的shader,两个物体的x和y轴是一样的,

    而capsule更靠近摄像机,而cube是会被capsule遮挡的,如图所示

    此时我们设置capsule的ztest为greater,效果如下:

    always:表示无论被不被遮住,都一直绘制,一般用在当人物被墙壁等物体遮挡时,要以一种描边的效果展示:

  • 相关阅读:
    HttpClient post封装
    UGUI 自动布局的重叠BUG
    什么时候必须使用UI相机? 多个相机的作用原理?
    UGUI BUG
    C# StopWatch的BUG????
    TrinityCore3.3.5编译过程-官方指导-踩坑总结
    C# unsafe模式内存操作深入探索
    C++提高编译与链接速度的资料
    C++复习笔记
    WOW研究资料收集
  • 原文地址:https://www.cnblogs.com/MrZivChu/p/shader3.html
Copyright © 2011-2022 走看看