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

  • 相关阅读:
    cell list of blocks physical read等待事件
    cell manager discovering disks等待事件
    OOP
    静态网页与动态网页的区别
    一个HTTP请求的详细过程
    PING 确认网络连接情况
    软件开发模型
    搭建网站的全套流程
    Design Diagram
    网络基础
  • 原文地址:https://www.cnblogs.com/lyh916/p/10543906.html
Copyright © 2011-2022 走看看