今天遇到一个奇怪的问题,屏幕后处理时使用_CameraDepthTexture还原世界坐标的时候出问题了,多番调试发现_CameraDepthTexture中保存的深度值 depth = 1 - Zn (Zn指NDC的z分量,即透视除法后的坐标z)(假设NDC坐标取[0, 1]),至于为什么要这样可以看看下面的文章
Reversed-Z详解-幽玄
Nvidia的关于Reverse-Z的文章

我的理解:
当相机是透视投影模式的时候Zn是非线性的,Zn和相机空间下Z轴的关系如下:


从图中可以看出,近裁剪平面的少数Z占用了[0, 1]区间中0附近大范围的值,然后Y轴改成1-Zn如下图

上面的图乍一看然并卵啊,不还是近裁剪平面的少数Z占用了[0, 1]区间中1附近大范围的值,其实非也,因为0值附近的符点数拥有更好的精度,为什么这么说呢,因为计算机保存浮点数有个特点,以float类型为例

0.000101011在计算机中会被保存为1.01011*2^-4,而1.000101011则还是1.000101011

所以上图 中看似近裁剪平面占用了1附近大范围的区间,但是0附近的区间精度是高于1附近的区间的,由此正好弥补了分布规律的缺陷。

UnityShader Reversed-Z的理解相关推荐

  1. Unity-shader学习笔记(七)

    文章目录 Unity-shader学习笔记(七) 15 更复杂的光照 15.1 Unity的渲染路径 15.1.1 前向渲染路径 15.1.1.1 前向渲染路径的原理 15.1.1.2 Unity中的 ...

  2. Python种reverse和reversed反转列表的操作方法

    一.reverse函数 reverse() 函数是列表的一个内置方法,字典.字符串.元组都没有这个内置方法. 用于列表中数据的反转,使用语法为: list1 = ["a", &qu ...

  3. Python函数 - - reverse()和reversed()

    一.reverse() reverse是 列表 的一种内置方法,用于列表中数据的反转 i='abcdef' j=list(i) j.reverse() print(''.join(j))//fedcb ...

  4. 对一些概念的深度理解

    两段不同的信号放在一起分析频谱与单独分析频谱的区别 一个信号可以看做自身乘以幅值为1的函数 时域矩形带宽τ2(s),幅值E--则频域sa(w)=Eτsa(τw2),带宽2πτ(rad)或1τ(Hz)时 ...

  5. scala之product特质理解

    最近在看sparksql源码的时候,发现TreeNode是继承scala的Product特质,所以比较好奇,就找了相关资料,通过编写demo,进行理解Product的具体用法. case class ...

  6. VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解

    目录 一.代码背景 二.主要工具 三.函数解析 1.FindWindow: 2. FindWindowEx: 3.SendMessage: 四.具体代码示例: 1.第一部分功能: A.接收端: B.发 ...

  7. UE5 Lumen实现分析

    概述 Lumen是UE5的GI系统,和传统意义上的实时GI只包含间接漫反射的贡献不同,它同时包含了间接漫反射和间接高光,提供了一套全新的完整间接光照.Lumen同时支持基于硬件的RTX和基于软件Tra ...

  8. Unity Shader PostProcessing - 11 - Depth Fog/Height Fog - 雾效/深度雾效/高度雾/深度+高度雾

    文章目录 观察生活中的雾 Scenario 1 - Pure Depth Fog - 纯深度雾 提取有用信息 Scenario 2 - Height Fog - 带高度的雾 提取有用信息 Scenar ...

  9. 实时渲染(RealTimeRendering-4thEdition)笔记——4变换(下)

    变换(下) 顶点混合(vertex blender) 渐变(Morphing) Geometry Cache Playback 投影(Projections) 透视投影 顶点混合(vertex ble ...

  10. 这样合并Python字典,可以让程序的运行效率提高4倍

    摘要:在Python中,合并字典有多种方式,通过内建函数.运算符.自定义函数等,都可以完成合并字典的功能,但这些方式,哪些效率低,哪些效率高呢?本文将对这些合并字典的方式进行逐个深度详解,最后会比较这 ...

最新文章

  1. Genymotion 模拟器 VirtualBox
  2. 深度学习机器配置 装机指南:从GPU到显示器,全套硬件推荐
  3. shell脚本中的坑
  4. 查看android数据库sqlite3中的表及数据、直接编辑数据库
  5. python 命令模式 设计模式_Python 设计模式——命令模式
  6. 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费
  7. 在dm355上开发DVR杂记(一):跟ip地址有关
  8. 教你炒股票21:缠中说禅买卖点分析的完备性
  9. PLC:学习笔记(西门子)2
  10. 电脑时间显示到秒 设置电脑显示时间为秒
  11. 计算机无法识别游戏手柄,Win10系统使用游戏xbox游戏手柄提示“无法识别”的解决办法...
  12. Linux Minit Xshell5连接虚拟机Minit
  13. Bryntum Gantt 5.2.2 New-Crack
  14. Typro使用以及安装教程来啦
  15. 成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
  16. Redis Cluster集群节点间通信
  17. 一招解决python pip install 安装库失败
  18. 钓鱼网站与病毒频发背后 网络支付黑色利益链
  19. 开源ERP Tryton 的用户权限管理
  20. 服务器改为电脑要修改什么,怎么样更改电脑服务器名

热门文章

  1. FTDI 234XD USB转串口 PC识别串口固定的解决方法
  2. idea 参数显示s: o:
  3. Odoo16 教程含源码
  4. HTTPS代理的工作原理
  5. java学习之javaWeb
  6. Theta*: 连续环境下平滑的任意角度的路径规划
  7. C语言 自动排课系统课程设计(附源码,实验报告)
  8. 2020年下半年网络规划设计师上午真题及答案解析
  9. PDF文件如何转换成txt文本文档
  10. 什么是危机公关与舆情监测?