TA百人计划学习笔记 2.6伽马矫正

news2024/10/6 14:30:13
  • 资料
    • 源视频 【技术美术百人计划】图形 2.6 伽马校正_哔哩哔哩_bilibili
    • PPT 2600_伽马矫正
    • 参考笔记
      • 2.6伽马(Gamma)校正 · 语雀
      • 从0开始的技术美术之路(十)伽马校正_线性工作流 技术美术-CSDN博客
  • 为什么
    • 韦伯定理
      •  
        • 人眼对于暗部是更敏感的
          • 举例
      • 中灰
        • 说明
          • 如果均匀记录物理灰阶,画面的样本分布是下图这样的(绿线为0.5,样本明显往高光区集中)
          • 如果均匀美术灰阶,画面的样本分布是下图这样的(红线为0.5,亮暗部分格式128个灰阶)
          • 在下图中可以看到,如果线性记录像素的物理光强数据,在物理灰阶中,美术暗部只有56个灰阶,这样的结果就是暗部会有明显的色阶断层。
        • 如果做一次非线性映射(就是gamma校正),把美术灰阶中的中灰提到中间,这样亮部和暗部就都能分配到128个样本。这样下来保存的才是人眼看着舒服的/正常的结果。
        • 美术中灰50%=物理中灰21.8%
    • 美术与物理的转换
      • 把人感受到的均匀灰阶和自然界线性增长的亮度进行一个映射,就是gamma编码的曲线
    • CRT(阴极射线显像管)
      • 这种设备的亮度和电压不成线性关系,而是和gamma值约为2.2类似幂律的关系
      • 由于CRT的这个物理特性,刚好可以把亮度压暗,也就说,左图变亮的情况下,经过右图显示器的压低亮度校正,结果刚好可以显示正常。
      • 值得注意的是,上述所说的前提是,在条件相同的情况下(在明暗不同的环境下,看到的结果可能不同),我们取的中灰值,也不是指特定的一个值。
  • 是什么
    • 简单定义
      • Vout = Vingamma
        • 传递函数其实就是伽马校正所使用的函数,我们一般看到的是被简化的幂函数
      • Gamma是指对线性三色值和非线性视频信号之间进行编码和解码的操作。
        • 色彩值与视频信号
          • 知道了颜色的颜色值之后,想要在电子设备上显示,就需要把它转换为视频信号,传递函数就是用来做转换的。
        • 传递函数包括两部分:
          • 分类
            • 光转电传递函数(OETF),把场景线性光转到非线性视频信号值。
            • 电转光传递函数(EOTF),把非线性视频信号值转到显示光亮度。
          • 一个简单理解:拍照时,将照片存储在内存卡中,就是用视频信号存储的,如果要看这个照片,就把视频信号再转换成光信号。
          • 传递函数其实就是Gamma校正所使用的函数。
        • 编码和解码的理解:
          • 当保存为图片时,就用gamma小于1的函数处理,这样一来,物理上0.218的色值,就可以映射到美术上的中灰。
          • 如果这张图片要被打开查看时,如果直接用物理数据,是偏亮的,这个时候又要进行一次校正,也就是显示器要用到一条gamma大于1的下压曲线来校正,把亮度压低,达到符合人眼的美术灰阶。
          • 上述流程如图:
            • 用一张图来举例:

              • gamma编码:
                • 目的
                  • 储存更多的暗部信息
                • 左图为存在硬盘中,将捕获到的物理数据做一次gamma值约为0.4的映射,这个过程称为gamma编码
                • 由图中可以看到,此时图像要比实际物理像素更亮(图不一定是实际的情况,只是亮度提高了的直观表示)
              • gamma校正:
                • 目的
                  • 适应人眼的感光
                • 中间为显示图像时,需要为每一个像素做一次gamma值约为2.2的校正,来使的最终结果为正确的物理数据。
                • 可以看到经过gamma校正好,之前偏亮的图像亮度降低了。
        • 为什么不用线性的方式存储,而要来回转换呢?
          • 非线性转换为了优化存储空间和带宽
          • 我们用于显示图像数据都是8bit,要充分利用带宽,就需要使用更多位置去存储暗部值。也就是 暗部使用高精度保存,亮部使用相对较低精度保存。
  • 这么用
    • 不规范产生的问题
      • 亮度叠加
        •  
          • 可以看到非线性空间下亮度叠加出现了过曝(亮度>1的)的情况
          • 因为Gamma空间经过gamma编码后的亮度值相对之前会变大。
      • 颜色混合
        •  
          • 如果在混合前没有非线性的颜色进行转换,就会在纯色的边界出现一些硬边。
      • 光照计算
        •  
          • 在光照渲染结算时,如果我们把非线性空间下(视觉上的)的棕灰色0.5当做实际物理光强为0.5来计算时,就会出现左边这种情况
          • 在显示空间下是0.5,但在渲染空间下它的实际物理光强为0.18(如右图)
    • 确保线性工作流的规范
      • 在生产的各个环节,正确使用Gamma编码及解码,使最终的到的颜色数据与最开始输入的物理数据一致;如,若是使用Gamma空间的贴图,在传给着色器前需要从Gamma空间转到线性空间;
      • unity前
        • Substance Painter到unity过程
        • PS到Unity
          •  
            • PS会读取显示器的Color Profile 反向补偿回去,即不会经过显示器伽马变换;
            • PS有名为Document Color的第二个Color Profile,其默认值就是SRGB COLOR Profile,和显示器的一致,颜色因此被压暗,所以PS中看到结果和unity一样;
          • 关于PS和Unity中的混合:
            • Unity混合为线性混合;
            • PS图层间混合,则是每个上层图层经过伽马变换后,再做混合,故而会显得较暗。设置中更改,“用灰度系数混合RGB颜色”,参数为1,结果才为直接混合结果。
          • 绘制时
            • 在32位通道下完成操作(计算),最后再切换为8位通道保存
              • 目的
                • 确保trl+t缩小、柔边笔刷涂抹、高斯模糊等操作所得图片的准确性
      • unity中
        • 设置部分
        • 目前支持线性空间的平台
          • Unity硬件特性支持,主要由两个硬件特性支持:SRGB Frame Buffer,SRGB Sampler;
            • SRGB Frame Buffer:
              • 将shader计算结果输出到显示器前进行Gamma校正;
              • 作为纹理被读取时,自动把存储的颜色从sRGB空间转换到线性空间;
              • 调用ReadPixels(),ReadBackImage()时,直接返回sRGB空间下的颜色;
              • sRGB Frame Buffer仅支持每通道为8bit的格式,不支持浮点;
              • HDR开启后,会先把渲染结果绘制到浮点格式的FB中,最后绘制到sRGB FB上输出;
            • SRGB Sampler:将sRGB贴图进行线性采用转换;
              • 利用硬件特性进行sRGB贴图线性采样和shader计算结果Gamma校正,比起在shader中对贴图采样和计算结果校正要快;
        • 手动修改
          • 《Shader入门精要》
          • 利用Unity CG.cgnic中封装的函数
            • GammaToLinearSpace
              • 采样贴图时使用
            • LinearToGammaSpace
              • 最后输出

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

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

相关文章

《MyBatis》-- 流式查询内存性能优化-单条数据加工

阿丹-需求/场景: 在项目场景中涉及到数据二次加工。需要将单个对象数据转为按照规定的数据字典的转换。以及需要转换数据结构。从对象转换为按照规定的值和规则的数组。 因为要写入csv文件,涉及到文件的输出流。 之前讨论针对的解决方案: …

HCIP第一次练习 -- RIP复习实验

要求: 需求:R1-R2-R3-R4-R5运行RIPV2 R6-R7运行RIPV1 1.使用合理地址规划网络,各自创建环回接口 2.R1创建环回172.16.1.1/24172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条自数量,增加路由传递安全性 5.R5创建一个环回模拟运营商,不…

FFmpeg之SwrRessample

文章目录 一、概述二、重采样流程三、重要结构体3.1、SwrContext3.2、ResamplerContext 四、重要函数4.1、swr_alloc4.2、swr_alloc_set_opts4.3、av_opt_set_*4.4、swr_init4.5、av_samples_alloc_array_and_samples4.6、av_samples_alloc4.7、swr_convert4.8、swr_get_delay4…

Apache Solr <= 8.8.1任意文件读取漏洞复现CVE-2019-17558

一、环境准备 搭建环境vulhub,需要提前安装docker环境 docker安装:docker--安装docker-ce-CSDN博客 vulhub地址:https://github.com/vulhub/vulhub #创建靶场环境 mkdir /opt/vulhub cd /opt/vulhub git https://github.com/vulhub/vulhu…

Python基础知识:整理15 列表的sort方法

1 sorted() 方法 之前我们学习过 sorted() 方法,可以对列表、元组、集合及字典进行排序 # 1.列表 ls [1, 10, 8, 4, 5] ls_new sorted(ls, reverseTrue) print(ls_new) …

【Vue】后端返回文件流,前端预览文件

let date;request({url: this.$route.query.url,method: get,responseType: blob,}).then(resp > {date respthis.path window.URL.createObjectURL(new Blob([resp], {type: "application/pdf"}))}).catch((e) > {//旧版本浏览器下的blob创建对象window.Blo…

2019年认证杯SPSSPRO杯数学建模C题(第二阶段)保险业的数字化变革全过程文档及程序

2019年认证杯SPSSPRO杯数学建模 基于统计建模的车险业数字变革研究 C题 保险业的数字化变革 原题再现: 车险,即机动车辆保险。保险自身是一种分散风险、消化损失的经济补偿制度,车险即为分散机动车辆在行驶过程中可能发作的未知风险和损失…

基于无人机的消防灭火系统设计

摘要:人类社会的进步,使火灾变得更加频繁且越来越复杂,随着这些年无人机技术的发展,将无人机技术融入消防灭火逐渐变成必然。消防救援采用无人机主要有以下几点原因:一、对火场及火场周围环境信息十分匮乏,…

CUDA tips

命令行查看核函数消耗的寄存器和共享内存数量 nvcc --ptxas-options-v reduce_sum.cu nvprof 使用 由于 8.0 及以上计算能力的显卡用不了 nvprof,官方建议用 nsight system 和 ncu,但是如果只想命令行打印表格查看 kernel 概况感觉还是 nvprof 方便&am…

.Net Core 使用 AspNetCoreRateLimit 实现限流

上一篇文章介绍过ASP.NET Core 的 Web Api 实现限流 中间件-CSDN博客 使用.NET 7 自带的中间件 Microsoft.AspNetCore.RateLimiting 可以实现简单的Api限流,但是这个.NET 7以后才集成的中间件,如果你使用的是早期版本的.NET,可以使用第三方库…

「解析」Jetson配置 git服务

这两天感冒了在家休养,想着把之前买的 Jetson 开发板用起来,买Jetson的初衷就是用来学习Linux系统,顺道可以部署算法,以及一些其他需求,相比树莓派而言,Jetson开发相对更贵,但是其配备了英伟达的…

科研绘图(五)玫瑰图

柱状图的高级平替可视化 “玫瑰图”,通常也被称为“科克斯图”。它类似于饼图,但不同之处在于每个部分(或“花瓣”)的角度相同,半径根据它表示的值而变化。这种可视化工具对于周期性地显示信息非常有用,比…

log4j2漏洞综合利用_CVE-2021-44228_CNVD-2021-95919

1.漏洞利用 1.1.rmi 利用 1、在检测到目标存在 log4j2 漏洞后,确定漏洞参数,尝试接受目标 rmi 请求。 成功接收到请求。 出现 JRMIK 字样即代表可接受 RMI 请求。 2、漏洞利用。 使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar执行命令&#xff0…

SAP 销售订单审批状态(查询/修改)

销售订单审批状态启用后,前端显示界面如下图 销售订单审批状态读取:STATUS_READ 销售订单审批状态修改:I_CHANGE_STATUS 销售订单审批状态读取 代码样例如下: DATA: lv_objnr TYPE vbak-objnr,lv_objnr_t TYPE jsto-objnr,l…

区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测

区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测 目录 区间预测 | Matlab实现BiLSTM-Adaboost-ABKDE的集成双向长短期记忆网络自适应带宽核密度估计多变量回归区间预测效果一览基本介绍程序设计参考资料 效果一览 …

soso移动营业大厅(纯后端+MySQL数据库+JDBC)

一、项目需求 中国移动,中国联通,中国电信是国内3大通信运营商,每个运营商都提供了不同的品牌套餐来应对不同的用户群,比如北京移动主要有全球通,神州行,动感地带等3大品牌套餐,每种套餐的内容和费用不同,嗖嗖移动是一个假定的通信运营商,提供了话痨套餐,网虫套餐,超人套餐,各…

ElasticSearch入门篇

目录 一、 ElasticSearch的定位 二、 什么是倒排索引 三、 什么是全文检索 四、 ElasticSearch的数据存储原理 4.1 ElasticSearch与关系型数据库的数据结构对比 4.2 ElasticSearch的倒排索引原理 一、 ElasticSearch的定位 ElasticSearch是一款开源的分布式 搜索和…

【Linux终端工具】Tmux的使用教程,如何正确使用Tmux

文章目录 入门tmux什么是tmux?安装tmux快速启动tmux基本操作入门1. 分离与退出2. 帮助信息3. 新建会话4. 重新接入会话5. 窗格操作 进阶操作1. 会话管理2. 切换窗口3. 窗格间切换 总结 入门tmux 什么是tmux? tmux是一款终端复用器,它允许你…

一、ArcGIS Pro SDK for Microsoft .NET 开发环境配置

ArcGIS Pro二次开发需要的工具: 1.Visual Studio 2.ArcGIS Pro SDK 一、Visual Studio安装 经过查阅资料,ArcGIS Pro3.0版本需要安装Visual Studio2022版,因为只有22版的才会有有ArcGIS Pro3.0以上版对应ArcGIS Pro SDK,因此&…

MySQL核心SQL

一.结构化查询语言 SQL是结构化查询语言(Structure Query Language),它是关系型数据库的通用语言。 SQL 主要可以划分为以下 3 个类别: DDL(Data Definition Languages)语句 数据定义语言,这…