【Unity3D】远处的物体会闪烁问题(深度冲突) Reversed-Z
知识点:深度冲突、像素闪烁现象、Reversed-Z(反向Z)、浮点数精度问题
前提概要:深度值都是由32位浮点数存储
原因:深度冲突,多个物体之间无法正确地渲染远近关系,出现上一帧可能是A物体在B物体前面,下一帧则反过来是B物体在A物体前面,每帧的这种远近关系情况都会变化情况下,就会产生闪烁表现。
问题1:为什么多个物体之间有明确的深度值却在计算机里无法得到正确的远近关系?
因为深度值是浮点类型float32,其浮点数记录无法保证精确度的,它仅有23个二进制有效位保存数据,8位是指数位,1位是符号位,其中23位只是小数有效位,若只谈纯整数它有24位有效位,2^24代表16777216个整数,例如:1.1111111....111 小数点后面是23个1,指数是2^23,那么就会得到 11111111...1111 (24个1)的二进制数,这个最前面的1是默认存在的(IEEE754规范)
具体浮点数精度问题解释:【Unity3d】C#浮点数丢失精度问题_c#double精度-CSDN博客
答案:由于无法有足够的精度准确表达出浮点数深度值,所以深度相近的2个物体可能会发生闪烁。
注意并不是只有远处的物体会发生闪烁,只要2个深度相近到计算机无法用浮点数精确表达的数值,那么就会发生不准确而闪烁。
问题2:那么为什么远处的物体更容易引发闪烁现象?而近处的物体只要不是靠的特别近(非重叠)都很难发生闪烁现象【本文重点】
答案:由于我们的深度值是由32位浮点数存储,浮点数的存储结构决定了它的性质是越大的浮点数它的精度越小,越小的浮点数它的精度越大;精度是指有效小数位数的数量。
为什么有这个性质?(数值越小精度越大,数值越大精度越小)
很简单的道理,当浮点数整数越大时,浮点数整数部分占据23位有效二进制位越多,自然留给浮点数小数部分的有效二进制位就越少,自然精度越小;反之当你浮点数整数越小时,整数部分占据23位有效二进制越少,自然留给小数部分的有效二进制位就越多,自然精度越大。
Reversed-Z 反向Z原理为什么可以降低发生闪烁的现象概率?
想避免远处物体闪烁,就得提高远处物体的深度值存储精度,1是用更多二进制位去存储深度,2是利用浮点数(数值越小精度越大,数值越大精度越小)性质去改善深度精度情况,采用2方案则是利用Reversed-Z技术,具体介绍参考如下文章
反向Z(Reversed-Z)的深度缓冲原理
在看完上篇文章之后大概会有个了解就是摄像机NDC归一化之后的远平面深度为0,近平面深度为1。(正常是近平面是0,远平面是1)
上面2张图,左图(Y轴是View深度,X轴是反向的NDC深度)红点代表有效数值标记,越密集代表越多有效值(精度高),反之精度低。右图(Y轴是精度程度,X轴是View深度)
无论左图还是右图都要以View Space Depth(View深度)为主轴看;
例如,左图Y轴[80,100]范围,其红色点密集,代表深度大的物体能准确表达深度;其他范围同理,然后你会发现Y轴[0,5]之类的近处小范围它的红点疏散,实际上看似很少红点,当右图统计[0,20]都有着不错的准确性,可能作者没有取更精确的刻度,或许[0,5]的精度会变少,但反向Z技术保证了[5,100]的范围精度是可靠的,即保证大部分深度范围的物体不会闪烁,小部分范围闪烁,相比较之前的情况要好。
原文将near和far数值继续拉大到10000单位,主要看右图,远处的精度变小了,近处的精度明显变大,但整体上来看,中、远距离的物体精度仍然有所保证,它们的远近关系仍然可以比较不错的表达出来,而降低闪烁现象。
下面这张是未使用反向Z之前的效果,可看到远处物体的精度几乎是接近0,代表远处物体的深度无法正常准确表达,会大概率发生闪烁现象。
可以尝试复刻原文,画出更精确刻度的右图来获得反向Z后的不同距离的物体深度精度情况。
注意:OpenGL NDC是(-1,1)范围的,所以无法利用浮点数性质,因为远平面和近平面都是趋近于1,而非0,也就只有中间的物体它的精度值是很高的...尬住了
好像Unity在DirectX平台下默认帮我们处理Reversed-Z,但OpenGL则不会了,具体如何避免闪烁,大多数做法就是把Near拉大,就能改善不少,缺点是摄像机到近平面距离的物体看不到了。其次就是隐藏或裁剪掉远距离的物体了,好像没啥办法。
相关文章:
![](https://i-blog.csdnimg.cn/direct/c3f6dc58393b49e7b62c3a91211c77ef.png)
【Unity3D】远处的物体会闪烁问题(深度冲突) Reversed-Z
知识点:深度冲突、像素闪烁现象、Reversed-Z(反向Z)、浮点数精度问题 前提概要:深度值都是由32位浮点数存储 原因:深度冲突,多个物体之间无法正确地渲染远近关系,出现上一帧可能是A物体在B物体…...
![](https://i-blog.csdnimg.cn/direct/0a8e99edec424272b2eb838b1ea8abf6.jpeg)
探索与创作:2024年CSDN平台上的成长与突破
文章目录 我与CSDN的初次邂逅初学阶段的阅读CSDN:编程新手的避风港初学者的福音:细致入微的知识讲解考试复习神器:技术总结的“救命指南”曾经的自己:为何迟迟不迈出写博客的第一步兴趣萌芽:从“读”到“想写”的初体验…...
![](https://i-blog.csdnimg.cn/direct/a43f68a5740c46b0ad8a316260c2a74d.png)
QT笔记- Qt6.8.1 Android编程 添加AndroidManifest.xml文件以支持修改权限
1. 切换项目选项卡,找到构建的步骤下的最后一项构建安卓APK,展开后找到应用程序栏,点击安卓自定义中的创建模板. 2. 弹出对话框勾选图中选项后点完成 3. 回到项目,查看.pro文件,里面多了很多内容不管,在下…...
![](https://www.ngui.cc/images/no-images.jpg)
【Leetcode 每日一题 - 扩展】421. 数组中两个数的最大异或值
问题背景 给你一个整数数组 n u m s nums nums,返回 n u m s [ i ] X O R n u m s [ j ] nums[i]\ XOR\ nums[j] nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n 0 ≤ i ≤ j < n 0≤i≤j<n。 数据约束 1 ≤ n u m s . l e n g…...
![](https://www.ngui.cc/images/no-images.jpg)
计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解
关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…...
![](https://www.ngui.cc/images/no-images.jpg)
C#如何调用执行命令行窗口(CMD)
一、引言 在 C# 的编程世界里,我们常常会遇到需要与操作系统底层进行交互的场景。这时,调用命令行窗口(CMD)就成为了一个强大的工具。无论是自动化日常任务,还是执行外部程序和批处理文件,通过 C# 调用 CM…...
![](https://i-blog.csdnimg.cn/blog_migrate/af8f455017bc0fd93f05cf5f906067f5.png)
vim练级攻略(精简版)
vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格,tab&am…...
![](https://i-blog.csdnimg.cn/direct/1956c2fa302f4152af671d3f0c9dc3ee.png)
一文速通Java的JDBC编程
目录 🐽JDBC的引入 什么是API JDBC的概念及作用 🍇准备工作 数据库驱动包 下载第三方库 🐾JDBC 使用 将jar包导入项目 通过代码使用JDBC的API (1)创建数据源对象并设置属性 (2)和数据库服务器建立网络连接 (3)程序构造SQL语句 (…...
![](https://www.ngui.cc/images/no-images.jpg)
laravel中请求失败重试的扩展--Guzzle
背景 开发过程中,跟外部接口对接时,很常见的要考虑到失败重新的情况,这里记录一下我用的失败重试的情况, 重试方法 1、使用 Laravel 的 HTTP 客户端和异常处理 结合异常处理和重试逻辑 use Illuminate\Support\Facades\Http;…...
![](https://i-blog.csdnimg.cn/direct/6b03ef239a104ef3be945b8786fe94c1.png#pic_center)
如何在vue中渲染markdown内容?
文章目录 引言什么是 markdown-it?安装 markdown-it基本用法样式失效?解决方法 高级配置语法高亮 效果展示 引言 在现代 Web 开发中,Markdown 作为一种轻量级的标记语言,广泛用于文档编写、内容管理以及富文本编辑器中。markdown…...
![](https://i-blog.csdnimg.cn/direct/f2595344c28847babd75b1deb06246dc.png)
Mysql MVCC
MVCC 什么是MVCC MVCC(多版本并发控制,Multi-Version Concurrency Control) 是一种用于数据库管理系统(DBMS)中的并发控制机制,它允许多个事务同时执行而不互相阻塞,并通过创建数据的多个版本…...
![](https://i-blog.csdnimg.cn/direct/d54548c789fb4677bbd9727cc6c10923.png)
Spring6.0新特性-HTTP接口:使用@HttpExchange实现更优雅的Http客户端
文章目录 一、概述二、使用1、创建接口HttpExchange方法2、创建一个在调用方法时执行请求的代理3、方法参数4、返回值5、错误处理(1)为RestClient(2)为WebClient(3)为RestTemplate 注意 一、概述 官方文档…...
![](https://i-blog.csdnimg.cn/img_convert/75b4b37a142d81879af10cc8a08ef0a7.png)
springboot医院信管系统
摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代&a…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=https%3A%2F%2Fwww.eechina.com%2Fdata%2Fattachment%2Fforum%2F202501%2F17%2F150606kto6y6z333m3wxt4.jpg&pos_id=y9DphToa)
迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-编写内核 LED HDF 驱动程序
接下来编译 LED 驱动,该驱动用于在基于华为设备框架(HDF)的系统中控制 LED 灯的开关,完整代码如下所示: 更多内容可以关注:迅为RK3568开发板篇OpenHarmony...
![](https://i-blog.csdnimg.cn/direct/d72dd084cd9e49fda2a0a6197234a6ca.png)
[javaWeb]初识Web
将该图片在浏览器中打印出来 代码: <html> <head> <title>HTML初识</title> </head> <body> <h1>猫猫</h1> <img src "img/1.jpg"> </body> &l…...
![](https://i-blog.csdnimg.cn/direct/4dc2f4edbab54ac19f92a86a37c19c2f.png)
复健第二天之[MoeCTF 2022]baby_file
打开题目在线环境可以看到: 感觉要用伪协议去求,但是我们并不知道flag的位置,这里我选择用dirsearch去扫一下: 最像的应该就是flag.php了 于是就构建payload: **?filephp://filter/convert.base64-encode/resource…...
![](https://i-blog.csdnimg.cn/direct/92d83b23ebd845e0b2770d55d5282a98.png)
uniapp 微信小程序 editor 富文本编辑器
<view class"inp boxsizing"><view class"contentBox"><!-- 富文本编辑器 --><view classwrapper><view classtoolbar tap"format"><view :class"formats.bold ? ql-active : " class"iconfon…...
![](https://i-blog.csdnimg.cn/direct/8754f39694934798becbb38459ea7e19.png#pic_center)
SparkSQL函数
文章目录 1. SparkSQL函数概述2. SparkSQL内置函数2.1 常用内置函数分类2.2 常用数组函数2.2.1 array()函数1. 定义2. 语法3. 示例 2.3 常用日期与时间戳函数2.4 常见聚合函数2.5 常见窗口函数 3. SparkSQL自定义函数3.1 自定义函数分类3.2 自定义函数案例演示 1. SparkSQL函数…...
![](https://i-blog.csdnimg.cn/direct/cb0fe06019aa45609da3f63c00ca1c5d.png)
从零开始学数据库 day2 DML
从零开始学数据库:DML操作详解 在今天的数字化时代,数据库的使用已经成为了各行各业的必备技能。无论你是想开发一个简单的应用,还是想要管理复杂的数据,掌握数据库的基本操作都是至关重要的。在这篇博客中,我们将专注…...
![](https://i-blog.csdnimg.cn/direct/97f005a8c55a4081ae54ab314caca6de.jpeg)
电脑换固态硬盘
参考: https://baijiahao.baidu.com/s?id1724377623311611247 一、根据尺寸和缺口可以分为以下几种: 1、M.2 NVME协议的固态 大部分笔记本是22x42MM和22x80MM nvme固态。 在京东直接搜: M.2 2242 M.2 2280 2、msata接口固态 3、NGFF M.…...
![](https://i-blog.csdnimg.cn/direct/e14c4ceb0a6d439dad90ddec5e99efc2.png#pic_center)
【大数据】机器学习------支持向量机(SVM)
支持向量机的基本概念和数学公式: 1. 线性可分的支持向量机 对于线性可分的数据集 ,其中(x_i \in R^d) 是特征向量 是类别标签,目标是找到一个超平面 ,使得对于所有 的样本 ,对于所有(y_i -1) 的样本,…...
![](https://i-blog.csdnimg.cn/direct/873d2402793d468bb17e3663a75a5ec5.png#pic_center)
Android系统开发(八):从麦克风到扬声器,音频HAL框架的奇妙之旅
引言:音浪太强,我稳如老 HAL! 如果有一天你的耳机里传来的不是《咱们屯里人》,而是金属碰撞般的杂音,那你可能已经感受到了 Android 音频硬件抽象层 (HAL) 出问题的后果!在 Android 音频架构中,…...
![](https://i-blog.csdnimg.cn/direct/f26d9cedd52a465aba35b2b009197e16.png)
Golang Gin系列-2:搭建Gin 框架环境
开始网络开发之旅通常是从选择合适的工具开始的。在这个全面的指南中,我们将引导你完成安装Go编程语言和Gin框架的过程,Gin框架是Go的轻量级和灵活的web框架。从设置Go工作空间到将Gin整合到项目中,本指南是高效而强大的web开发路线图。 安装…...
![](https://www.ngui.cc/images/no-images.jpg)
FGC_grasp复现
复现FGC_grasp 环境配置数据集准备RuntimeError: CUDA error: invalid device ordinal 问题的解决方案raise BadZipFile("File is not a zip file") zipfile.BadZipFile: File is not a zip file问题的解决方案加载数据集时总是被kill然后服务器也卡住了动不了问题的…...
![](https://i-blog.csdnimg.cn/img_convert/92041ff254b9665ae09f5db4abd631c3.jpeg)
实力认证 | 海云安入选《信创安全产品及服务购买决策参考》
近日,国内知名安全调研机构GoUpSec发布了2024年中国网络安全行业《信创安全产品及服务购买决策参考》,报告从产品特点、产品优势、成功案例、安全策略等维度对各厂商信创安全产品及服务进行调研了解。 海云安凭借AI大模型技术在信创安全领域中的创新应用…...
![](https://i-blog.csdnimg.cn/img_convert/4683c0c9624ac27ced534c3462dafc49.png)
Avalonia系列文章之小试牛刀
最近有朋友反馈,能否分享一下Avalonia相关的文章,于是就抽空学习了一下,发现Avalonia真的是一款非常不错的UI框架,值得花时间认真学习一下,于是边学习边记录,整理成文,分享给大家,希…...
![](https://i-blog.csdnimg.cn/direct/2efea1b2e72244448a3d24e46522e01d.jpeg#pic_center)
中国数字安全产业年度报告(2024)
数字安全是指,在全球数字化背景下,合理控制个人、组织、国家在各种活动中面临的数字风险,保障数字社会可持续发展的政策法规、管理措施、技术方法等安全手段的总和。 数字安全领域可从三个方面对应新质生产力的三大内涵:一是基于大型语言模型…...
![](https://i-blog.csdnimg.cn/img_convert/92469ba8679ae6a032fee6ccb8b4ec12.png)
LabVIEW桥接传感器配置与数据采集
该LabVIEW程序主要用于配置桥接传感器并进行数据采集,涉及电压激励、桥接电阻、采样设置及错误处理。第一个VI("Auto Cleanup")用于自动清理资源,建议保留以确保系统稳定运行。 以下是对图像中各个组件的详细解释&#…...
![](https://www.ngui.cc/images/no-images.jpg)
简明docker快速入门并实践方法
简明docker快速入门并实践方法 前言:1. 什么是Docker?2. Docker的基本概念3. 安装配置Docker4. Docker基本命令:5. 简单实践:拉取Nginx镜像-自定义配置-推送镜像步骤 1:拉取Nginx镜像步骤 1.5(可选…...
![](https://i-blog.csdnimg.cn/direct/fc35bfc3307b42479f1605c020a6239c.png)
《MambaIR:一种基于状态空间模型的简单图像修复基线方法》学习笔记
paper:2402.15648 目录 摘要 一、引言 1、模型性能的提升依赖于网络感受野的扩大: 2、全局感受野和高效计算之间存在固有矛盾: 3、改进版 Mamba的巨大潜力 4、Mamba 在图像修复任务中仍面临以下挑战: 5、方法 6、主要贡献…...
![](/images/no-images.jpg)
wordpress 统计浏览量/西安seo和网络推广
曾经也在找看看有没有快捷的方法全选,但是网上很多都是重复,并且错误的,比如: 1,$y,这是什么?要写也要写成:1,$y,但是我告诉你,写成:1,$y是全部复制,不是全选 dG,这个就更加误导人了…...
![](https://img-blog.csdnimg.cn/20210508162530922.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0xfSl9YMDM=,size_16,color_FFFFFF,t_70)
国内优秀企业网站设计/线上推广外包公司
如何考虑线程池: CPU密集型: cpu的核数1个线程的线程池:减少上下文的切换 IO密集型: 当出现大量的IO阻塞的时候...
做外贸出口衣服的网站/网站策划是干什么的
i.MX6邮票孔核心板,核心板引出146PIN脚 核心板尺寸:38mm*42mm 内存:512MDDR3 存储:8G EMMC 工作电压:5V电压供电 运行温度:-20℃ ~ 80℃ 引脚间距:1.27mm 连接方式:邮票孔 PCB&…...
![](https://img-blog.csdnimg.cn/img_convert/e9921bd4e72028cec16d63e7a5c33a22.png)
昆明大型网站建设费用/沈阳百度推广优化
一.真正有用的内存地址 实际上真正有用的地址是写入位置,在VS的内存窗口中去查看该位置,可以看到具体出现的问题. 二.发生访问冲突的可能原因 1.访问了0x00位置的数据 2.对内存中常量进行修改. char * pcontent " abcdef "; //待去掉前后空格的字符串(共10字节) c…...
![](/images/no-images.jpg)
外贸网站建设设计/站长工具备案查询
用iterator一直有问题,后来用for each循环就好了。 for循环遍历:for (String str : set) { System.out.println(str);} refurl: http://blog.sina.com.cn/s/blog_4f925fc3010182zi.html...
![](http://www.cocoachina.com/upload_images/csdn/20190806174818140.png)
个人网站开发要多久/站长之家端口扫描
?当linux运行久点,会产生很多不必要的cache或者buff,导致占用太多的内存,其实这可以手动去释放它。[rootDD-Server-9F ~]# freetotal used free shared buff/cache availableMem: 8073628 1374360 2004964 385620 4694304 5820840Swap: 8388604 0 83886…...