• [UnityShader基础]02.深度测试 & 深度写入


    参考链接:

    https://blog.csdn.net/v_xchen_v/article/details/79380222

    前面说到了渲染队列,对于两个不透明的物体A和B,它们处于同一个渲染队列中。假如它们一前一后地摆放着,当先渲染A再渲染B,那么B显示在前面;当先渲染B再渲染A,那么A显示在前面。因此,单靠渲染队列还是无法很好解决物体间的遮挡关系,这时就需要利用深度这个东西了。

    1.深度

    指该像素距离摄像机的距离。离摄像机越远,深度越大。

    2.深度缓冲 & 颜色缓冲

    深度缓冲中存储着每个像素对应的深度值。

    颜色缓冲中存储着每个像素对应的颜色值。

    3.深度测试

    将像素的深度与深度缓冲的深度进行比较。如果通过了深度测试,就有机会去改写深度缓冲的对应值;否则该像素会被舍弃。

    语法如下:

    ZTest Less | Greater | LEqual | GEqual | Equal | NotEqual | Always

    默认值为LEqual,小于等于。即表示如果像素的深度小于等于深度缓冲的深度,则通过了深度测试。

    4.深度写入

    是否要将像素的深度写入到深度缓冲中。前提是通过了深度测试。

    语法如下:

    ZWrite On | Off

    默认值为On,即写入深度缓冲。

    5.总结

    a.根据这两个默认值,可以知道,离摄像机近的会遮挡住离摄像机远的,因此也就解决了最开始说的两个物体的遮挡问题:假如A在前B在后,当先渲染A再渲染B,在渲染B时B不能通过深度测试从而被舍弃;当先渲染B再渲染A,在渲染A时A通过深度测试从而覆盖了B。因此对于不透明物体间的遮挡,通过这两个默认值就可以得到很好的处理。

    b.当深度测试不通过时,该像素会被舍弃,深度缓冲和颜色缓冲无变化;否则,该像素的颜色值会覆盖掉颜色缓冲的颜色值,然后根据深度写入来决定是否覆盖掉深度缓冲中的深度值。

  • 相关阅读:
    2011年上半年软考信息系统项目管理师顺利通过了。
    技术工程师之歌
    大家都很注重能力的时候,我却在努力提高学历
    新的开发团队配合模式,适合小型团队
    研发部的四套马车
    mysql给root开启远程访问权限,修改root密码
    js客户端判断文件大小限制上传
    metro 微博api开发,post请求
    VS2010在C#头文件添加文件注释的方法
    android ListView 常见问题 之 高度问题
  • 原文地址:https://www.cnblogs.com/lyh916/p/10543906.html
Copyright © 2020-2023  润新知