UnityShader Reversed-Z的理解
今天遇到一个奇怪的问题,屏幕后处理时使用_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的理解相关推荐
- Unity-shader学习笔记(七)
文章目录 Unity-shader学习笔记(七) 15 更复杂的光照 15.1 Unity的渲染路径 15.1.1 前向渲染路径 15.1.1.1 前向渲染路径的原理 15.1.1.2 Unity中的 ...
- Python种reverse和reversed反转列表的操作方法
一.reverse函数 reverse() 函数是列表的一个内置方法,字典.字符串.元组都没有这个内置方法. 用于列表中数据的反转,使用语法为: list1 = ["a", &qu ...
- Python函数 - - reverse()和reversed()
一.reverse() reverse是 列表 的一种内置方法,用于列表中数据的反转 i='abcdef' j=list(i) j.reverse() print(''.join(j))//fedcb ...
- 对一些概念的深度理解
两段不同的信号放在一起分析频谱与单独分析频谱的区别 一个信号可以看做自身乘以幅值为1的函数 时域矩形带宽τ2(s),幅值E--则频域sa(w)=Eτsa(τw2),带宽2πτ(rad)或1τ(Hz)时 ...
- scala之product特质理解
最近在看sparksql源码的时候,发现TreeNode是继承scala的Product特质,所以比较好奇,就找了相关资料,通过编写demo,进行理解Product的具体用法. case class ...
- VB.net 进程通信中FindWindow、FindWindowEX、SendMessage函数的理解
目录 一.代码背景 二.主要工具 三.函数解析 1.FindWindow: 2. FindWindowEx: 3.SendMessage: 四.具体代码示例: 1.第一部分功能: A.接收端: B.发 ...
- UE5 Lumen实现分析
概述 Lumen是UE5的GI系统,和传统意义上的实时GI只包含间接漫反射的贡献不同,它同时包含了间接漫反射和间接高光,提供了一套全新的完整间接光照.Lumen同时支持基于硬件的RTX和基于软件Tra ...
- Unity Shader PostProcessing - 11 - Depth Fog/Height Fog - 雾效/深度雾效/高度雾/深度+高度雾
文章目录 观察生活中的雾 Scenario 1 - Pure Depth Fog - 纯深度雾 提取有用信息 Scenario 2 - Height Fog - 带高度的雾 提取有用信息 Scenar ...
- 实时渲染(RealTimeRendering-4thEdition)笔记——4变换(下)
变换(下) 顶点混合(vertex blender) 渐变(Morphing) Geometry Cache Playback 投影(Projections) 透视投影 顶点混合(vertex ble ...
- 这样合并Python字典,可以让程序的运行效率提高4倍
摘要:在Python中,合并字典有多种方式,通过内建函数.运算符.自定义函数等,都可以完成合并字典的功能,但这些方式,哪些效率低,哪些效率高呢?本文将对这些合并字典的方式进行逐个深度详解,最后会比较这 ...
最新文章
- Genymotion 模拟器 VirtualBox
- 深度学习机器配置 装机指南:从GPU到显示器,全套硬件推荐
- shell脚本中的坑
- 查看android数据库sqlite3中的表及数据、直接编辑数据库
- python 命令模式 设计模式_Python 设计模式——命令模式
- 生信老司机以中心法则为主线讲解组学技术的应用和生信分析心得—限时免费
- 在dm355上开发DVR杂记(一):跟ip地址有关
- 教你炒股票21:缠中说禅买卖点分析的完备性
- PLC:学习笔记(西门子)2
- 电脑时间显示到秒 设置电脑显示时间为秒
- 计算机无法识别游戏手柄,Win10系统使用游戏xbox游戏手柄提示“无法识别”的解决办法...
- Linux Minit Xshell5连接虚拟机Minit
- Bryntum Gantt 5.2.2 New-Crack
- Typro使用以及安装教程来啦
- 成功实现NAS家庭服务器(流媒体播放、文件共享及下载机)
- Redis Cluster集群节点间通信
- 一招解决python pip install 安装库失败
- 钓鱼网站与病毒频发背后 网络支付黑色利益链
- 开源ERP Tryton 的用户权限管理
- 服务器改为电脑要修改什么,怎么样更改电脑服务器名