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

  • 相关阅读:
    注解的作用
    962. Maximum Width Ramp
    594. Longest Harmonious Subsequence
    1042. Flower Planting With No Adjacent
    419. Battleships in a Board
    1041. Robot Bounded In Circle
    leetcode 395. Longest Substring with At Least K Repeating Characters(高质量题)
    leetcode 44. Wildcard Matching(模糊匹配)
    HEU预热赛
    780. Reaching Points
  • 原文地址:https://www.cnblogs.com/lyh916/p/10543906.html
Copyright © 2020-2023  润新知