OpenGL3.3_C++_Windows(23)

伽ga马校正

  • 物理亮度 = 光子数量 
  • 线性空间:光子数(亮度)和颜色值的线性关系
  • 人眼感知的亮度:对比较暗的颜色变化更敏感,感知亮度基于人的感觉
  • 非线性空间:光子数(亮度)和 颜色值^2.2,
  • 恰好符合屏幕显示的CRT2.2(显示设备都有自己的Gamma值,设备输出亮度 = 电压的Gamma次幂)符合人眼规律,也就是屏幕自动的为我们更改符合人眼规律的亮度

注意:

  • 应用中配置的亮度和颜色是基于监视器所看到的,是非线性的配置
  • 也就是:我们把物体颜色值翻倍,将颜色值改变为【0.5——1】,可是在监视器中,我们看到的颜色变化其实是【0.25——1】,亮度翻了4.5倍以上
  • 通常将光照值设置得比本来更亮一些(由于监视器会将其亮度显示的更暗一些)

Gamma校正(最终颜色变回线性):

  • 在最终的颜色输出上应用监视器Gamma的倒数(1/2.2次幂),这样应用了监视器Gamma以后最终的颜色将会变为线性的
    • 方法一:
    • glEnable(GL_FRAMEBUFFER_SRGB);在颜色储存到颜色缓冲之前先校正sRGB颜色。包括默认帧缓冲。
    • 注意:如果你使用多个帧缓冲,应只将发送给监视器的最后的那个帧缓冲应用gamma校正。让两个帧缓冲之间传递的中间结果仍然保持线性空间颜色,
    • 方法二:
float gamma = 2.2;
fragColor.rgb = pow(fragColor.rgb, vec3(1.0/gamma));
    • 第二个方法有完全的控制权:很好了解决了上面多个帧缓冲的问题,但是同时有很多Fragment着色器的话,必须在像素着色器里加上这个gamma校正

gamma校正的问题:(针对外部引用的sRGB空间创作的资源)   

  • sRGB空间(Gamma == 2.2):创建或编辑的图片,是在非线性空间进行,比如将颜色翻倍,实际上是根据你所感知到的亮度进行的,并不等于将颜色值加倍。
  • 在我们没有应用gamma校正,没有问题的,纹理在sRGB空间创建和展示,同样我们还是在sRGB空间中使用,
  • 当应用gamma校正之后:纹理在sRGB空间创建和展示,在线性空间中使用,纹理图像会特别亮,
  • 原因是:基于sRGB空间中显示的更暗一些,纹理制作者设置的颜色值就比本来更亮,当将这个颜色值应用gamma校正之后,转变为线性空间,颜色会比没有应用gamma校正看到的更亮

解决:

  • 确保纹理制作者是在线性空间中进行创作的,这样颜色值是正确的,应用gamma校正之后,亮度也是相同的
  • 但是:大多数纹理制作者并不知道什么是gamma校正,另一个解决方案是重校:
  • 每个sRGB空间的纹理:在进行任何颜色值的计算前^2.2,变回监视器看到的颜色效果
  • 但是:为每个sRGB空间的纹理做这件事非常烦人。OpenGL给我们提供了另一个方案,glTexImage2D(),GL_SRGB和GL_SRGB_ALPHA内部纹理格式。

另一个不同之处是光照衰减

  • 物理公式:光照的衰减和光源的距离的平方成反比。
  • 二次函数:1.0 / (distance * distance);但是衰减效果总是过于强烈,光只能照亮一小圈,看起来并不真实
  • 双曲线方程:1.0 / distance;
  • 不用gamma校正的时候,双曲线比使用二次函数变体更真实,开启gamma校正以后,符合物理的二次函数突然出现了更好的效果
  • 不用gamma校正,为什么?双曲线比使用二次函数变体更真实?
  • 二次函数:(1.0/distance2)2.2将产生更强烈的衰减,双曲线1.0/distance2.2,和物理公式是很相似

Gamma校正作用:

  • 线性空间更符合物理世界,大多数物理公式现在都可以获得较好效果,
  • 应用中配置的亮度和颜色,在不同的显示设备上呈现一致的效果,正确的设置物理颜色值

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GIT版本管理工具轻松入门 | TortoiseGit

目录 一、下载git 二、下载tortoisegit(可视化git) 三、Git本地仓库创建 四、git克隆 五、添加,提交,推送,拉取 六、分支 七、冲突 八、忽略文件(修改gitignore文件) 一、下载git 安装…

<Linux> 缓冲区谁维护?

缓冲区是谁提供的&#xff1f; 来看一段代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> int main() {const char *str1 "a";printf("%s", str1);const char *str2 "b";writ…

AI副业新风口项目,AI绘画+古诗文视频,轻松吸引大批粉丝,变现简单,收益稳

前言 一个不吹牛逼不聊人生不谈理想只聊赚钱的自媒体从业者 问题都在过程中产生&#xff0c;努力做了也许会成功&#xff0c;但不做永远没有机会 — — — 小红书副业新风口项目&#xff0c;AI绘画古诗文视频&#xff0c;轻松吸引大批粉丝&#xff0c;变现简单&#xff0c;收…

2020年全国大学生数学建模竞赛C题中小微企业信贷决策(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码&#xff08;一&#xff09;数据处理代码&#xff08;二&#xff09;熵权法与TOPSIS代码&#xff08;三&#xff09;最小二乘法代码&#xff08;四&#xff09;粒子群代码 四、完整word版论文和源代码&#xff08;两种获取方式…

FireFox 编译指南2024 Windows10篇-环境准备(一)

1. 引言 在开源浏览器项目中&#xff0c;Firefox因其高性能和灵活性而备受开发者青睐。为了在本地环境中编译和定制Firefox&#xff0c;开发者需要做好充分的环境准备工作。这不仅是编译成功的基础&#xff0c;也是后续调试、优化和二次开发的关键步骤。 编译Firefox是一个复…

缓存双写一致性(笔记)

缓存更新方案 旁路缓存模式 这是比较多的 旁路缓存模式&#xff1a;缓存有就返回&#xff0c;没有数据库查询&#xff0c;放入缓存返回。 还有些常用缓存策略 读穿透模式 读穿透和旁路很相似&#xff0c;程序不需要关注从哪里读取数据&#xff0c;它只需要从缓存查询数据。…

PPT录屏怎么录?PPT录屏,3种方法简单操作

在数字化时代&#xff0c;PPT已经成为我们日常工作、学习和生活中不可或缺的一部分。无论是商务报告、教学课件还是产品展示&#xff0c;PPT都能帮助我们更加生动、直观地传递信息。然而&#xff0c;有时候我们会面临PPT录屏怎么录的问题。这时&#xff0c;一个好的PPT录屏功能…

OpenAI发布CriticGPT:纠错GPT生成错误代码?

OpenAI发布CriticGPT&#xff1a;纠错GPT生成错误代码&#xff1f; 前言 OCriticGPT 就在6月28日&#xff0c;OpenAI 训练出了一个基于 GPT-4 的模型—— CriticGPT&#xff0c;它可以用于查验ChatGPT 写出的代码是否出错。OpenAI的团队说&#xff0c;用户从 CriticGPT 获得帮助…

1panel 搭建多个网站

1panel 部署多个网站&#xff0c;另外的域名&#xff0c;或无域端口搭建方法。 当我们已经部署好一个网站后&#xff0c;想再部署一个网站在我们的服务器上时&#xff0c; 步骤&#xff1a;&#xff08;另外的域名&#xff0c;部署在同一个服务器方法&#xff09; 运行环境里…

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…

光伏设计:光伏项目开发中最关键的一环

随着全球对可再生能源的需求不断增长&#xff0c;光伏技术作为其中的佼佼者&#xff0c;已经成为许多国家实现能源转型和应对气候变化的重要手段。在光伏项目的开发过程中&#xff0c;光伏设计作为最关键的一环&#xff0c;其重要性不言而喻。本文将从光伏设计的角度&#xff0…

【深度学习】单机多卡 | DataParallel将计算任务在多个 GPU 上并行执行,可以在多个 GPU 上分摊工作负载,从而加快训练速度

【深度学习】单机多卡 | DataParallel将计算任务在多个 GPU 上并行执行&#xff0c;可以在多个 GPU 上分摊工作负载&#xff0c;从而加快训练速度 写在最前面DataParallel (DP) 简介使用 DataParallel 的场景使用 DataParallel 的基本步骤 代码部分train.py简单的代码示例代码解…

抗击.michevol勒索病毒:保障数据安全的新策略

导言&#xff1a; 在今天高度互联的数字化环境中&#xff0c;数据安全面临着越来越复杂和普遍的威胁&#xff0c;勒索病毒如.michevol已成为了用户和企业普遍面临的风险。本文91数据恢复将探讨.michevol勒索病毒的特点、感染方式以及创新的防御策略&#xff0c;旨在帮助读者更…

Typora 2024 安装教程

本章教程&#xff0c;介绍一下如何使用Typora 最新版本1.9.4&#xff0c;仅供学习交流&#xff0c;切勿滥用。 一、下载安装包 下载地址&#xff1a;https://www.alipan.com/s/8pvKf5ns6GH 当然&#xff0c;你也可以去官网下载&#xff0c;但是官网有可能随时更新&#xff0c;该…

MySQL事务——Java全栈知识(31)

1、事务的特性 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的最小操作单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 一致性&#xff08;Consistency&#xff09;&#xff1a;事务完成时&#xff0c;必须使所有的数据都保持一致状态。 隔离…

《互联网政务应用安全管理规定》自2024年7月1日起,关于日志存储至少保存一年说明

学习目标&#xff1a;《互联网政务应用安全管理规定》第二十条 机关事业单位应当留存互联网政务应用相关的防火墙、主机等设备的运行日志&#xff0c;以及应用系统的访问日志、数据库的操作日志&#xff0c;留存时间不少于1年&#xff0c;并定期对日志进行备份&#xff0c;确保…

Ingress Controller介绍及部署实践

Ingress Controller介绍及部署实践 1. 概念 1.1 Ingress Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源所定义的规则来控制。 下面是 Ingress 的一个简单示例&#xff0c;可将所有流量都发送到同一 Service&#xff1a; 通过配置&am…

国标GB28181视频汇聚平台EasyCVR安防监控系统常见播放问题分析及解决方法

国标GB28181安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。平台支持多协议接入&#xff0c;包括&#xff1a;国标GB/T 28181协议、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视…

经验分享之会员 SaaS 系统

前言 2018年&#xff0c;这是不平凡的一年&#xff1b;互联网行业的中台战略、会员经济等模式如火如荼&#xff0c;同时也逐渐地走入我们公司每个人的视野。在南海集团的战略规划背景下&#xff0c;当时我所在的公司作为集团的研发中心&#xff0c;承担了对会员 SaaS 系统的建…

Java--回顾方法的定义

1.修饰符 public 公共的 修饰String类型 2.返回类型 返回的值得类型 返回值为String&#xff08;字符串&#xff09;类型 3.break continue return的区别 break&#xff0c;结束整个循环 continue&#xff0c;结束本次循环 return&#xff0c;结束整…