[自学记录08*]LDR、HDR与ToneMapping

news2024/11/28 10:42:58

一、Dynamic Range—动态范围

Dynamic Range表示动态范围,检测DR,DR又分为LDR(Low Dynamic Range)HDR(High Dynamic Range)。它们都是表示亮度值范围的一种方式,那么有什么区别呢。

1.LDR

LDR的亮度范围是单通道8位精度0~1存储,也就是0~255这个范围。

在伽马矫正中我们知道0~255,这些数字远不够表达自然界中那么丰富的细节,因此如果用LDR来存储图片,会丢失很多细节。

LDR常见的格式有png,jpg等。

拾色器、一般的图片、我们的显示器,都是LDR。

2.HDR

HDR的亮度范围是单通道超过8位存储,值得一提的是HDR并没有统一的标准,有12位精度的,还有16位精度的。

常见的格式有hdr,exr,raw,tif等。

总结一下,对于渲染来说,HDR有以下的优缺点。

(1)优点:

  • 增加亮部的细节,减少了细节丢失和过曝效果
  • 更好地支持Bloom效果
  • 减少低亮光照区域的条带效果

(2)缺点:

  • 使用浮点渲染纹理,渲染速度较慢,需要更多显存
  • 不支持硬件抗锯齿(但可以使用后处理)
  • 部分手机不支持

二、ToneMapping

因为真实世界的范围其实就是一种HDR,但在即使我们想表达那么多的颜色,却只能用LDR,那么如何把HDR较好地变到LDR呢?这其中的方法就是ToneMapping,其实就是一种色调映射。当然这种映射并不是线性的。

这里我们就拿8位和16位举例子好了,8位能表示的精度为256个精度。而16位可以表示的精度则是65536个精度,相差了256倍。也就是说如果采用线性映射的话,在16位精度下的0~255表示的亮度值都会被映射到8位精度下的0表示的亮度值。

 在图像上的反应也就是在HDR下的图上的稍微暗一些的地方,到了LDR可能就是完全的死黑。

其实也非常好理解,我们完全可以把真实世界的亮度理解为一种信号,而无论是LDR还是HDR,都是对现实世界的一种采样,HDR的精度更大,采样率也就更高,自然恢复出来的信号更拟合真实世界的连续的信号。

下两幅图为32位精度存储下的HDR图,线性映射到8位精度的结果

32位精度
8位精度

这里我找的例子并不是太好,但是可以明显感觉到,下面的8位精度的图,亮度上丢失了许多细节。如草阴影下的细节,由暗绿色变成了纯黑。

因此,我们需要不同的映射曲线来实现较好的还原细节。其中最广泛的是ACES曲线。ACES曲线可以较好的提高对比度,在一定程度上还原亮部暗部的细节。

如下图分别为线性映射(左),和ACES(Academy Color Encoding System)曲线映射(右)的结果。 

 

当然了,有各种各样的ToneMapping,它们有它们各自的特点,这里不一一细说了。 

三、Unity中的HDR 

1.Camera开启HDR

当Camera开启HDR,场景就会被渲染到HDR的图像缓冲区,这个缓冲区可以存0~1范围外的像素值,然后这个缓冲区可以被渲染操作使用,如Bloom后处理效果,这意味着使用较为真实的值进行计算,因此可能会产生更逼真的效果。

2.Light map开启HDR

在Unity的Edit的Project Settings中的Player选项中,下拉选择Lightmap Encoding,选择High Quality则可开启light map对HDR的支持。 

3.拾色器HDR

在Shader中,如果想把颜色属性开启HDR,在变量前加上[HDR]即可为拾色器开启HDR的支持。

在Intensity滑动条中可以更改颜色的强度,每增加1,相应的亮度增加1倍。

对于不同模式的解释,这里贴上官方文档的解释,大家自行参考。个人认为没什么不同,看个人习惯的问题。

四、参考资料 

使用亮度直方图自动曝光 |Bruno Opsenica 的博客 (bruop.github.io)

 高动态范围 - Unity 手册 (unity3d.com)

 Unity - Manual: HDR color picker (unity3d.com)

Tone Mapping | Bruno Opsenica's Blog (bruop.github.io)

Academy Color Encoding System - 维基百科,自由的百科全书 (wikipedia.org)

HDR,ToneMapping,Bloom之间的关系 - 知乎 (zhihu.com)

Tone mapping进化论 - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系列六、过滤器(二)#案例演示

一、案例演示 说明&#xff1a;如下案例通过springboot的方式演示Filter是如何使用的&#xff0c;以获取Controller中的请求参数为切入点进行演示 1.1、前置准备工作 1.1.1、pom <dependencies><!-- spring-boot --><dependency><groupId>org.spring…

晨控CK-GW08系列网关控制器与CODESYS软件MODBUSTCP通讯手册

晨控CK-GW08系列是一款支持标准工业通讯协议ModbusTCP的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口&#xff0c;用户可通过通信接口使用Modbus TCP协议对8路读写接口所连接的读卡器进行相对独立的读写操作。 晨控CK-GW08系列网关控制器适用于本公司多…

高等数学教材重难点题型总结(十一)曲线积分与曲面积分

同济倒数第二章&#xff0c;论公式复杂程度排名第一&#xff0c;但其实做题难度并不会很高——核心的知识点在于&#xff1a;对弧长的曲线积分、对坐标的曲线积分、对面积的曲面积分、对坐标的曲面积分。想追求尽善尽美的要会使用高斯公式和格林公式&#xff0c;学有余力可以看…

AD9371 官方例程裸机SW 和 HDL配置概述(一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

3 函数的升级-上

常量与宏回顾 C中的const常量可以替代常数定义&#xff0c;如: "Const int a 8; --> 等价于 #define a 8 " 宏在预编译阶段处理&#xff0c;而c const常量则在编译阶段处理&#xff0c;比宏 更为安全。 C中&#xff0c;我们可以用宏代码片段去实现某个函数&…

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解

时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 目录 时序分解 | Matlab实现FEEMD快速集合经验模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现FEEMD快速集合经验模态分解时间序列信号分解 算法新颖小众&#xff0c…

企业级SpringBoot单体项目模板 —— 使用 AOP + JWT实现登陆鉴权

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;SpringBoot、企业级、项目模板☀️每日 一言&#xff1a;没学会走就学跑从来都不是问题&#xff0c;要问问自己是不是天才&#xff0c;如果不是&#xff0c;那就要一步步来 文章目录 使用JWT实现…

docker 常用

系统 Ubuntu 20.04 64位 安装文档 ubuntu&#xff1a;https://docs.docker.com/engine/install/ubuntu/ centos&#xff1a;https://docs.docker.com/engine/install/centos/ debian&#xff1a;https://docs.docker.com/engine/install/debian/ 常用命令 查看镜像 docke…

NeRF-SLAM部署运行(3060Ti)

记录在部署运行期间遇到的一些问题&#xff0c;分享给大家~ 一、环境 RTX 3060 Ti、8G显存、Ubuntu18.04 二、部署 1. 下载代码 git clone https://github.com/jrpowers/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive cd thirdparty/insta…

Nacos 的底层实现原理 注册中心的两种调用方式

目录 1. Nacos 的底层实现原理 1.1 配置中心自动刷新实现原理 1.2 注册中心底层实现原理 2. Nacos 注册中心的两种调用方式 2.1 RestTemplate Spring Cloud LoadBalancer 的调用方式 2.2 使用 OpenFeign Spring Cloud LoadBalancer 1. Nacos 的底层实现原理 1.1 配置中心…

Python测试之Pytest详解

概要 当涉及到python的测试框架时&#xff0c;pytest是一个功能强大且广泛应用的第三方库。它提供简洁而灵活的方式来编写和执行测试用例&#xff0c;并具有广泛的应用场景。下面是pytest的介绍和详细使用说明&#xff1a; pytest是一个用于python单元测试的框架&#xff0c;它…

node插件express(路由)的插件使用(二)——body-parser和ejs插件的基本使用

文章目录 前言一、express使用中间件body-parser获取请全体的数据1. 代码2. 效果 二、express使用ejs&#xff08;了解即可&#xff09;1.安装2.作用3.基本使用&#xff08;1&#xff09;代码&#xff08;2&#xff09;代码分析和效果 4.列表渲染&#xff08;1&#xff09;代码…

Canvas 实现进度条展示统计数据示例

canvas可以画柱状图&#xff0c;如下就是一个例子&#xff0c;主要用到了lineWidth&#xff0c;beginPath&#xff0c;lineCap等知识点。 效果图 源代码 <!DOCTYPE Html> <html> <head><title>Line Chart Demo</title><meta http-equiv&quo…

一个球从100m高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

一.思路分析 这是一个简单的物理题目&#xff0c;解题思路比较明确。程序使用 for 循环来模拟球的下落和反弹过程&#xff0c;通过多次计算得到最终结果&#xff0c;最后使用 printf 函数将结果输出。 定义初始高度 height 和总共经过的米数 distance 的变量&#xff0c;初始化…

【密评】商用密码应用安全性评估从业人员考核题库(十九)

商用密码应用安全性评估从业人员考核题库&#xff08;十九&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 4501 判断题 依据《信息系统密码应用高风险判定指引》&#xff0c…

服务器感染了.locked勒索病毒,如何确保数据文件完整恢复?

引言&#xff1a; 网络安全威胁的不断演变使得恶意软件如.locked勒索病毒成为当今数字时代的一大挑战。.locked勒索病毒能够加密您的文件&#xff0c;然后要求支付赎金以解锁它们。本文将深入探讨.locked勒索病毒的特点&#xff0c;以及如何应对感染&#xff0c;以及预防这种类…

数据可视化:动态柱状图

终于来到最后一个数据可视化的文章拿啦~~~ 在这里学习如何绘制动态柱状图 我先整个活 (๑′ᴗ‵๑)&#xff29; Lᵒᵛᵉᵧₒᵤ❤ 什么是pyecharts&#xff1f; 答&#xff1a; Python的Pyecharts软件包。它是一个用于Python数据可视化和图表绘制的库&#xff0c;可用于制作…

安装 2023最新版本的Tableau Desktop 时出现“0x80070643”错误

安装失败的原因&#xff1a; “0x80070643”错误是Microsoft错误。 必需的安装组件无法启动&#xff0c;通常是C库&#xff0c;或者使用了无效的操作系统版本。 通过控制面板——程序与功能可以查看到自己电脑Microsoft Visual C的版本&#xff0c;像我的话是比较低的&…

第四章IDEA操作Maven

文章目录 创建父工程开启自动导入配置Maven信息创建Java模块工程创建 Web 模块工程 在IDEA中执行Maven命令直接执行手动输入 在IDEA中查看某个模块的依赖信息工程导入来自版本控制系统来自工程目录 模块导入情景重现导入 Java 类型模块 导入 Web 类型模块 创建父工程 开启自动导…

【GitHub】Watch、Star、Fork、Follow 有什么区别?

目录 一、前言二、区别1. Watch2. Star3. Fork4. Follow 一、前言 GitHub 是最受欢迎的代码托管平台之一&#xff0c;拥有大量的开源代码可供学习。 Github 中也有类似 “点赞”、“收藏”、“加关注” 的功能。 下面介绍下&#xff0c;GitHub 中 Watch、Star、Fork、Follow 有…