LinearEyeDepth 定义

2023-11-10

UnityCG.cginc中原函数如下:

// Z buffer to linear 0..1 depth (0 at eye, 1 at far plane)
inline float Linear01Depth( float z )
{
return 1.0 / (_ZBufferParams.x * z + _ZBufferParams.y);
}
// Z buffer to linear depth
inline float LinearEyeDepth( float z )
{
return 1.0 / (_ZBufferParams.z * z + _ZBufferParams.w);
}
其中_ZBufferParams的定义如下:
double zc0, zc1;
// OpenGL would be this:
// zc0 = (1.0 - m_FarClip / m_NearClip) / 2.0;
// zc1 = (1.0 + m_FarClip / m_NearClip) / 2.0;
// D3D is this:
zc0 = 1.0 - m_FarClip / m_NearClip;
zc1 = m_FarClip / m_NearClip;
// now set _ZBufferParams with (zc0, zc1, zc0/m_FarClip, zc1/m_FarClip);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

参考资料链接:http://forum.unity3d.com/threads/_zbufferparams-values.39332/

经过透视投影变换时,Z值的计算方式如下: 
Z’ = f*n/[(n-f)*z] + f/(f-n); 
可以简单的理解为将z值的倒数进行插值计算,映射到[0, 1](d3d)空间中。 
将上式带入Linear01Depth中,可得最后计算结果为z/f; 
就是说,是将[0, f]映射到[0, 1]空间,若要映射[n, f]到[0, 1]则是(z-n)/(f-n)。 
将上式带入LinearEyeDepth中,可得最后计算结果为z。很明显,LinearEyeDepth是将经过透视投影变换的深度值还原了。 
至于在透视投影变换中为什么要用公式Z’ = f*n/[(n-f)*z] + f/(f-n);这个说起来比较麻烦,简单来说是为了将深度值映射到[0, 1]空间方便裁剪,以及x’和y’与1/z成线性关系(这是为了光栅化时的透视纹理映射所做的准备),读者可以参考下面链接http://wenku.baidu.com/link?url=GoxRM0e3Neo121CPWVdh7RRYZpN1Gj7xkfNeGxNN92bo-RULSAyEZv_odGdrteg8sBUd7MuX2ihlrBaAcqxRwVop-S3DI2pkKL5rBXlrTvO 
注意链接中是以Opengl作为例子进行讲解,其z值的映射空间为[-1, 1]。 
关于为什么x’要与1/z成线性关系可参考下面链接:http://blog.csdn.net/popy007/article/details/5570803

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LinearEyeDepth 定义 的相关文章

  • 【三分钟教程】docker快速部署nginx服务

    1 下载nginx镜像 root localhost docker pull nginx 1 14 1 14 Pulling from library nginx 27833a3ba0a5 Pull complete 0f23e58bd0b
  • 【Elasticsearch】学好Elasticsearch系列-Mapping

    本文已收录至Github 推荐阅读 Java随想录 先看后赞 养成习惯 点赞收藏 人生辉煌 文章目录 Mapping 的基本概念 查看索引 Mapping 字段数据类型 数字类型 基本数据类型 Keywords 类型 Dates 时间类型
  • Python3中出现'gbk' codec can't encode characte的成功解决方法?

    亲身测试 所遇问题完全解决 2018 07 08 21 37 环境 windows Pycharm python3 6 2 使用Python写文件的时候 或者将网络数据流写入到本地文件的时候 大部分情况下会遇到 UnicodeEncodeE
  • 爱心css特效,CSS3 SVG点击爱心散开动画特效

    margin 0 padding 0 box sizing border box position relative svg like position fixed z index 10 top calc 50vh 160px left c
  • C#_基础题1-10套

    one 1 用户输入一个整数 用if else判断是偶还是奇 2 输入一个字母 判断是大写还是小写字母 3 求1 99所有奇数的和 用while语句 4 用户输入三个整数 将最大数和最小数输出 5 输入三个数 按从小到大的顺序排列 6 将1
  • 【JavaWeb】 CSS基础 学习笔记

    CSS 一 CSS选择器 标签名选择器 id选择器 class 选择器 类选择器 组合选择器 二 常用样式 字体颜色 宽度 和 高度 背景颜色 字体样式 红色 1 像素实线边框 DIV 居中 文本居中 超连接去下划线 表格细线 列表去除修饰
  • 2022-02-08 读书笔记:《精通特征工程》1 基础特征工程

    精通特征工程 速读学习1 基础特征工程 该系列文章系个人读书笔记及总结性内容 任何组织和个人不得转载进行商业活动 time 2022 02 08 学习目标 通过Python示例掌握特征工程基本原则和实际应用 增强机器学习算法效果 目录 第1
  • 每日一题(最长回文长度字符串)

    题目要求 给你一个字符串 s 找到 s 中最长的回文子串 原串中连续不断的串 如果字符串的反序与原始字符串相同 则该字符串称为回文字符串 示例 1 输入 s babad 输出 bab 解释 aba 同样是符合题意的答案 示例 2 输入 s
  • python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv

    python爬取美食数据根据人气可视化基于XPath的HTML解析器以及数据保存到csv 在这篇技术博客中 我将介绍如何从头开始构建一个基于XPath的HTML解析爬取到的美食数据并可视化 并将其应用于一个具体的例子 我亲自写的完整代码 c
  • 输入网址后到网页显示出来会发生什么?

    当你输入一个网址的时候 后台到底发生了一件件什么样的事 原文http www cnblogs com wenanry archive 2010 02 25 1673368 html
  • python——变量和简单的数据类型

    第2章 变量和简单数据类型 2 1 运行hello world py时发生了什么 print Hello python world Hello python world 在运行以上文件时 python解释器读取整个程序 确定其中每个单词的含
  • 【msvcr120.dll下载】msvcr120.dll丢失怎么修复

    遇到因为msvcr120 dll文件丢失而无法正常运行软件或游戏程序的朋友们不用着急了 根据小编整理的这篇教程文章 将msvcr120 dll文件放在操作系统 system32 文件夹的合适位置 便能解决这一问题 缺少哪一项dll 在运行软
  • RangeRCNN阅读笔记

    RangeRCNN阅读笔记 概述 摘要 绪论 创新点与主要贡献 相关工作 3D目标检测 3D语义分割 方法描述 网络结构 距离图主干 RV PV BEV 3D RoI Pooling 损失函数 实验 细节 消融实验 结论 另一波总结与思考

随机推荐