LearnOpenGL学习笔记——HDR

OpenGL textures combined组合纹理的实例 OpenGL textures combined组合纹理先上图,再解答。完整主要的源代码源代码剖析 先上图,再解答。 完整主要的源代码 #include <glad/glad.h> #include <GLFW/glfw3.h> #include <stb_image.h> #include <learnopengl/filesystem.h> #include <learnopengl/shader_s.h> #include <iost 阅读详情

HDR

一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0~1.0之间的。但是如果我们遇上了一个特性的区域,其中有多个光源使这些数值综合超过了1.0,又会发生什么呢?答案是这些片段中超过1.0的亮度或者颜色会被约束在1.0,从而导致场景混成一片,难以分辨:
在这里插入图片描述
这是由于大量片段的颜色值都非常接近1.0,在很大一个区域内每一个亮的片段都有相同的白色。这损失了很多的细节,使场景看起来非常假。解决这个问题的一个方案是减小光源的强度从而保证场景内没有一个片段亮于1.0。然而这并不是一个好的方案,因为你需要使用不切实际的光照参数。一个更好的方案是让颜色暂时超过1.0,然后将其转换至0.0到1.0的区间内,从而防止损失细节。显示器被限制为只能显示值为0.0到1.0间的颜色,但是在光照方程中却没有这个限制。通过使片段的颜色超过1.0,我们有了一个更大的颜色范围,这也被称作HDR(High Dynamic Range, 高动态范围)。有了HDR,亮的东西可以变得非常亮,暗的东西可以变得非常暗,而且充满细节。

HDR原本只是被运用在摄影上,摄影师对同一个场景采取不同曝光拍多张照片,捕捉大范围的色彩值。这些图片被合成为HDR图片,从而综合不同的曝光等级使得大范围的细节可见。看下面这个例子,左边这张图片在被光照亮的区域充满细节,但是在黑暗的区域就什么都看不见了;但是右边这张图的高曝光却可以让之前看不出来的黑暗区域显现出来。
在这里插入图片描述
这与我们眼睛工作的原理非常相似,也是HDR渲染的基础。当光线很弱的啥时候,人眼会自动调整从而使过暗和过亮的部分变得更清晰,就像人眼有一个能自动根据场景亮度调整的自动曝光滑块。

HDR渲染和其很相似,我们允许用更大范围的颜色值渲染从而获取大范围的黑暗与明亮的场景细节,最后将所有HDR值转换成在[0.0, 1.0]范围的LDR(Low Dynamic Range,低动态范围)。转换HDR值到LDR值得过程叫做色调映射(Tone Mapping),现在现存有很多的色调映射算法,这些算法致力于在转换过程中保留尽可能多的HDR细节。这些色调映射算法经常会包含一个选择性倾向黑暗或者明亮区域的参数。

在实时渲染中,HDR不仅允许我们超过LDR的范围[0.0, 1.0]与保留更多的细节,同时还让我们能够根据光源的真实强度指定它的强度。比如太阳有比闪光灯之类的东西更高的强度,那么我们为什么不这样子设置呢?(比如说设置一个10.0的漫亮度) 这允许我们用更现实的光照参数恰当地配置一个场景的光照,而这在LDR渲染中是不能实现的,因为他们会被上限约束在1.0。

因为显示器只能显示在0.0到1.0范围之内的颜色,我们肯定要做一些转换从而使得当前的HDR颜色值符合显示器的范围。简单地取平均值重新转换这些颜色值并不能很好的解决这个问题,因为明亮的地方会显得更加显著。我们能做的是用一个不同的方程与/或曲线来转换这些HDR值到LDR值,从而给我们对于场景的亮度完全掌控,这就是之前说的色调变换,也是HDR渲染的最终步骤。

浮点帧缓冲

在实现HDR渲染之前,我们首先需要一些防止颜色值在每一个片段着色器运行后被限制约束的方法。当帧缓冲使用了一个标准化的定点格式(像GL_RGB)为其颜色缓冲的内部格式,OpenGL会在将这些值存入帧缓冲前自动将其约束到0.0到1.0之间。这一操作对大部分帧缓冲格式都是成立的,除了专门用来存放被拓展范围值的浮点格式。

当一个帧缓冲的颜色缓冲的内部格式被设定成了GL_RGB16F, GL_RGBA16F, GL_RGB32F 或者GL_RGBA32F时,这些帧缓冲被叫做浮点帧缓冲(Floating Point Framebuffer),浮点帧缓冲可以存储超过0.0到1.0范围的浮点值,所以非常适合HDR渲染。想要创建一个浮点帧缓冲,我们只需要改变颜色缓冲的内部格式参数就行了(注意GL_FLOAT参数):

glBindTexture(GL_TEXTURE_2D, colorBuffer);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, SCR_WIDTH, SCR_HEIGHT, 0, GL_RGB, GL_FLOAT, NULL);  

默认的帧缓冲默认一个颜色分量只占用8位(bits)。当使用一个使用32位每颜色分量的浮点帧缓冲时(使用GL_RGB32F 或者GL_RGBA32F),我们需要四倍的内存来存储这些颜色。所以除非你需要一个非常高的精确度,32位不是必须的,使用GLRGB16F就足够了。有了一个带有浮点颜色缓冲的帧缓冲,我们可以放心渲染场景到这个帧缓冲中。在这个教程的例子当中,我们先渲染一个光照的场景到浮点帧缓冲中,之后再在一个铺屏四边形(Screen-filling Quad)上应用这个帧缓冲的颜色缓冲,代码会是这样子:

glBindFramebuffer(GL_FRAMEBUFFER, hdrFBO);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
    // [...] 渲染(光照的)场景
glBindFramebuffer(GL_FRAMEBUFFER, 0);

// 现在使用一个不同的着色器将HDR颜色缓冲渲染至2D铺屏四边形上
hdrShader.Use();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, hdrColorBufferTexture);
RenderQuad();

这里场景的颜色值存在一个可以包含任意颜色值的浮点颜色缓冲中,值可能是超过1.0的。这个简单的演示中,场景被创建为一个被拉伸的立方体通道和四个点光源,其中一个非常亮的在隧道的尽头:

std::vector<glm::vec3> lightColors;
lightColors.push_back(glm::vec3(200.0f, 200.0f, 200.0f));
lightColors.push_back(glm::vec3(0.1f, 0.0f, 0.0f));
lightColors.push_back(glm::vec3(0.0f, 0.0f, 0.2f));
lightColors.push_back(glm::vec3(0.0f, 0.1f, 0.0f));  

渲染至浮点帧缓冲和渲染至一个普通的帧缓冲是一样的。新的东西就是这个的hdrShader的片段着色器,用来渲染最终拥有浮点颜色缓冲纹理的2D四边形。我们来定义一个简单的直通片段着色器(Pass-through Fragment Shader):

#version 330 core
out vec4 color;
in vec2 TexCoords;

uniform sampler2D hdrBuffer;

void main()
{             
    vec3 hdrColor = texture(hdrBuffer, TexCoords).rgb;
    color = vec4(hdrColor, 1.0);
}  

在这里插入图片描述
很明显,在隧道尽头的强光的值被约束在1.0,因为一大块区域都是白色的,过程中超过1.0的地方损失了所有细节。因为我们直接转换HDR值到LDR值,这就像我们根本就没有应用HDR一样。为了修复这个问题我们需要做的是无损转化所有浮点颜色值回0.0-1.0范围中。我们需要应用到色调映射。

色调映射

色调映射(Tone Mapping)是一个损失很小的转换浮点颜色值至我们所需的LDR[0.0, 1.0]范围内的过程,通常会伴有特定的风格的色平衡(Stylistic Color Balance)。

最简单的色调映射算法是Reinhard色调映射,它涉及到分散整个HDR颜色值到LDR颜色值上,所有的值都有对应。Reinhard色调映射算法平均地将所有亮度值分散到LDR上。我们将Reinhard色调映射应用到之前的片段着色器上,并且为了更好的测量加上一个Gamma校正过滤(包括SRGB纹理的使用):

void main()
{             
    const float gamma = 2.2;
    vec3 hdrColor = texture(hdrBuffer, TexCoords).rgb;

    // Reinhard色调映射
    vec3 mapped = hdrColor / (hdrColor + vec3(1.0));
    // Gamma校正
    mapped = pow(mapped, vec3(1.0 / gamma));

    color = vec4(mapped, 1.0);
}   

有了Reinhard色调映射的应用,我们不再会在场景明亮的地方损失细节。当然,这个算法是倾向明亮的区域的,暗的区域会不那么精细也不那么有区分度。
没有HDR
在这里插入图片描述
打开HDR
在这里插入图片描述

现在你可以看到在隧道的尽头纹理变得可见了。用了这个非常简单地色调映射算法,我们可以合适的看到存在浮点帧缓冲中整个范围的HDR值,使我们能在不丢失细节的前提下,对场景光照有精确的控制。

另一个有趣的色调映射应用是曝光(Exposure)参数的使用。你可能还记得之前我们在介绍里讲到的,HDR图片包含在不同曝光等级的细节。如果我们有一个场景要展现日夜交替,我们当然会在白天使用低曝光,在夜间使用高曝光,就像人眼调节方式一样。有了这个曝光参数,我们可以去设置可以同时在白天和夜晚不同光照条件工作的光照参数,我们只需要调整曝光参数就行了。

一个简单的曝光色调映射算法会像这样:

uniform float exposure;

void main()
{             
    const float gamma = 2.2;
    vec3 hdrColor = texture(hdrBuffer, TexCoords).rgb;

    // 曝光色调映射
    vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
    // Gamma校正 
    mapped = pow(mapped, vec3(1.0 / gamma));

    color = vec4(mapped, 1.0);
}  

在这里我们将exposure定义为默认为1.0的uniform,从而允许我们更加精确设定我们是要注重黑暗还是明亮的区域的HDR颜色值。举例来说,高曝光值会使隧道的黑暗部分显示更多的细节,然而低曝光值会显著减少黑暗区域的细节,但允许我们看到更多明亮区域的细节。下面这组图片展示了在不同曝光值下的通道:
EXPOSURE 1.0
在这里插入图片描述
EXPOSURE5.0
在这里插入图片描述
EXPOSURE1.0
在这里插入图片描述

HDR拓展

在这里展示的两个色调映射算法仅仅是大量(更先进)的色调映射算法中的一小部分,这些算法各有长短。一些色调映射算法倾向于特定的某种颜色/强度,也有一些算法同时显示低高曝光颜色从而能够显示更加多彩和精细的图像。也有一些技巧被称作自动曝光调整(Automatic Exposure Adjustment)或者叫人眼适应(Eye Adaptation)技术,它能够检测前一帧场景的亮度并且缓慢调整曝光参数模仿人眼使得场景在黑暗区域逐渐变亮或者在明亮区域逐渐变暗。

HDR渲染的真正优点在庞大和复杂的场景中应用复杂光照算法会被显示出来,但是出于教学目的创建这样复杂的演示场景是很困难的,这个教程用的场景是很小的,而且缺乏细节。但是如此简单的演示也是能够显示出HDR渲染的一些优点:在明亮和黑暗区域无细节损失,因为它们可以通过色调映射重新获得;多个光照的叠加不会导致亮度被截断的区域的出现,光照可以被设定为它们原来的亮度值而不是被LDR值限制。而且,HDR渲染也使一些有趣的效果更加可行和真实; 其中一个效果叫做泛光(Bloom),我们将在下一节讨论。

HDR知识总结

1.什么是HDR
2.简单的色调映射算法

	const float gamma = 2.2;
    vec3 mapped = hdrColor / (hdrColor + vec3(1.0));
    // Gamma校正
    mapped = pow(mapped, vec3(1.0 / gamma));

3.曝光参数使用

	const float gamma = 2.2;
	vec3 hdrColor = texture(hdrBuffer, TexCoords).rgb;

	// 曝光色调映射
	vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
	// Gamma校正 
	mapped = pow(mapped, vec3(1.0 / gamma));
OpenGL 泛光效果实现(Bloom) 在计算机图形学中,泛光(Bloom)效果是一种常用的渲染技术,用于增强图像的亮度和辉光效果。实现泛光效果的基本思路是将图像分为两个部分:明亮的高光区域和常规的图像区域。然后,对提取的高光区域进行模糊处理,最后将模糊后的结果与原始图像进行混合,以达到泛光效果。以上是一个简单的OpenGL泛光效果实现的示例,具体的实现方式可以根据个人需求进行调整和优化。至此,泛光(Bloom)效果的实现就完成了。整个过程包括渲染场景到帧缓冲对象、提取高光区域、模糊处理高光区域以及混合原始图像和模糊处理结果。 阅读详情

相关推荐

MATLAB/Simulink BLDC电机控制模型搭建:六步换相与速度环实战

无刷直流电机(BLDC)控制是电机驱动领域的核心技术,其六步换相原理通过霍尔信号控制逆变器开关,使定子磁场与转子磁场保持垂直以产生最大转矩。在MATLAB/Simulink中搭建BLDC控制系统,需从电机本体建模入手,结合PWM占空比调节和速度环PI控制器,实现速度闭环与波形观测。该技术广泛应用于电动工具、无人机电调和伺服驱动器等场景。本文详细解析BLDC六步换相逻辑、反电动势建模及Simulink分层设计方法,帮助读者掌握从零搭建完整控制模型的工程实践。

weixin_28273593的博客 207

OpenGL完整教程专栏完整目录

OpenGL完整教程专栏完整目录

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1325

MAX3232芯片引脚功能详解与外围电路设计避坑指南(从电荷泵到静电防护)

本文详细解析了MAX3232芯片的引脚功能与外围电路设计,重点介绍了其电荷泵架构和RS232通信接口的应用。通过实际案例和参数对比,提供了电路设计中的常见问题解决方案和静电防护建议,帮助工程师优化工业控制与嵌入式系统中的通信可靠性。

weixin_30596165的博客 432

LearnOpenGL学习笔记—高级光照 06:HDR

LearnOpenGL学习笔记—高级光照 06:HDR1 引入2 浮点帧缓冲2.1 基础代码3 色调映射4 HDR拓展5 其他色调映射方法 本节对应官网学习内容:HDR 结合英文原站,中文站,以及个人实践进行描述。 1 引入 一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0到1.0之间的。 这个看起来无辜的语句,使我们一直将亮度与颜色的值设置在这个范围内,尝试着与场景契合。 这样是能够运行的,也能给出还不错的效果。 但是如果我们遇上了一个特定的区域,其中有多个亮光源

清清!的博客 949

ArcGIS Pro MCP 开源:自然语言驱动的 AI 制图与分析

人工智能与大模型的快速发展,正推动专业软件从“手动操作”走向“自然语言控制”。模型上下文协议(MCP)作为连接 AI 与外部工具的标准接口,类似为 AI 安装的“USB 接口”,让大模型可以通过统一协议调用 GIS 软件能力。基于 ArcPy 构建的 ArcGIS Pro MCP 项目,将复杂的地图制图与空间分析封装为 112 个可被 AI 调用的工具,使文本指令直接驱动软件完成数据加载、符号化、出图乃至叠加统计等任务。对 GIS 工程师、数据分析师与测绘规划从业者而言,该开源项目显著降低专业软件使用门槛,

weixin_29054195的博客 274

Coze智能体网页集成实战:从零搭建免登录AI助手

本文详细介绍了如何利用Coze Chat SDK从零开始为网站集成免登录AI助手。通过获取访问令牌和智能体ID,仅需几行JavaScript代码即可将功能完整的对话窗口嵌入网页,实现开箱即用的智能交互。文章重点讲解了核心部署步骤、会话隔离方案以及UI深度定制方法,帮助开发者快速打造贴合品牌、提升用户体验的网页AI助手。

gold8的专栏 558

HDR渲染器的实现(基于OpenGL)

from: http://dev.gameres.com/Program/Visual/3D/HDRTutorial/HDRTutorial.htm   HDR渲染器的实现(基于OpenGL) HDR简介           这篇教程讲解了如何实现一个高动态范围渲染系统。HDR(High Dynamic Range,高动态范围)是一种图像后处理技术,是一种表达超过了显示器所能表现的...

Flash Flex AIR 3D 510

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 404

LearnOpenGL——HDR、Bloom学习笔记

色调映射(Tone Mapping)是一个损失很小的转换浮点颜色值至我们所需的LDR[0.0, 1.0]范围内的过程,通常会伴有特定的风格的色平衡(Stylistic Color Balance)。默认的帧缓冲默认一个颜色分量只占用8位,当使用32位每颜色分量的浮点帧缓冲时,就相当于要4倍的内存,所以除非非常高的精度,一般16够用。高斯模糊基于高斯曲线,高斯曲线通常被描述为一个钟形曲线,中间的值达到最大化,随着距离的增加,两边的值不断减少。我么可以通过MRT,在单独的一个渲染pass中提取两张图片。

weixin_70073176的博客 1261

把MinerU集成到Dify

本文介绍了如何将本地部署的MinerU与Dify平台进行集成。首先需要确保Dify和MinerU在Docker环境中正常运行,并通过配置虚拟网络实现互联。然后详细说明了在Dify平台安装MinerU插件的步骤,包括从插件市场搜索安装、配置连接参数等关键操作。特别强调了要等待MinerU容器完全启动(healthy状态)后再进行Dify配置,否则会出现连接错误。通过简单的URL指向和API密钥设置,用户即可实现Dify平台与本地MinerU算力网络的对接,为后续的AI应用开发提供基础支持。

lyxerlau的博客 313

51单片机嵌入式开发:14、STC89C52RC 之HX1838红外解码NEC+数码管+串口打印+LED显示

对于C51单片机的设计思路,你可以使用类似的步骤来实现红外解码、数码管显示和LED显示的功能。下面是一个简单的设计思路:(1) 连接HX1838红外解码器、数码管和LED到C51单片机。将HX1838的信号引脚连接到C51单片机的外部中断引脚(例如INT0),数码管的CLK引脚连接到C51单片机的某个IO口引脚,数码管的DIO引脚连接到C51单片机的另一个IO口引脚,LED连接到C51单片机的某个IO口引脚。(2) 在C51的程序中,定义并初始化所需的IO口和外部中断。

sinat_30943509的博客 2977

【OpenGL】LearnOpenGL学习笔记27 - HDR、Bloom

LearnOpenGL学习笔记 - HDR、Bloom

Duo1J的随笔 1622

ardupilot开发 --- 避障篇

适配ardupilot的雷达避障功能开发,使用低成本雷达思岚科技系列雷达,配置简单,灵敏度高,障碍物检测范围不低于30m。

记录老板的每次pua,分享领导每天的毒鸡汤... 4301

LearnOpenGL学习笔记—PBR:IBL

LearnOpenGL学习笔记—PBR:IBL0 引入1 渲染方程的求解2 hdr文件转成cubemap3 预计算漫反射积分4 预计算镜面反射积分4.1 预滤波HDR环境贴图4.1.1 蒙特卡洛积分4.1.1.1 概率密度函数、概率分布函数4.1.1.2 数学期望4.1.1.3 大数定律4.1.1.4 蒙特卡罗积分4.1.1.5 随机抽样4.1.1.6 重要性采样4.1.1.7 预滤波HDR环境贴图4.2 预计算 BRDF 本节对应官网学习内容:漫反射辐照,镜面IBL 结合英文原站,中文站,以及个人实践进行

清清!的博客 3145

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LearnOpenGL HDR

HDR 传统渲染中颜色值会被限制到[0, 1.0], 但是为了实际物理中, 亮度等值是可以超过1.0的, 那么在图片中怎么表现超过1.0的细节呢, 这也就是HDR(High Dynamic Range 高动态范围). HDR原本是在摄影中的运用, 摄影师发现暗的图片中, 具有非常多亮的细节, 亮的图片中, 暗的细节会非常明显, 可以合成HDR图片. 如下图所示 跟人眼相似, 光线弱的时候, 人眼会自动调整, 从而使得过暗或者过量的部分更加清晰. HDR渲染, 也是这个原理, 我们先大范围获取黑暗与明亮的细

esjiang的博客 358

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

learnopengl——HDR——完结

https://learnopengl.com/Advanced-Lighting/HDR

小孔明的专栏 342

LearnOpenGL——高级光照(七)HDR

HDR(高动态范围)渲染技术通过使用浮点帧缓冲存储超出[0.0,1.0]范围的颜色值,解决了传统LDR渲染中高亮区域细节丢失的问题。当多个亮光源导致颜色值超过1.0时,HDR允许保留完整的亮度信息,再通过色调映射将其转换为显示器可显示的LDR范围。文章介绍了两种色调映射算法:Reinhard算法均匀分布亮度值,而曝光算法通过调整曝光参数控制明暗区域表现。实现上,需创建GL_RGB16F等格式的浮点帧缓冲,在渲染管线后期应用色调映射和Gamma校正。这项技术能更真实地表现光照强度差异(如太阳与闪光灯),为场景

QQ805009795的博客 642

learnOpenGL 5.5 HDR

图像传感器的动态范围都很小, 但是真实场景中亮度的动态变化范围却非常广, 平常大部分场景的亮度范围都远远超过了图像传感器所能感受的动态范围, 因此, 需要一种特殊的图像, 即高动态范围图像HDR。 HDR的实现有两个部分,一个是拍摄HDR图像,一个是显示HDR图像。OPENGL不涉及拍摄,所以我们要实现的是显示HDR。 主要过程分为两步 将渲染画面保存到帧缓存中 这里要注意的是颜色附件的格式不能定义为GL_RGB,因为它只能保存0-1.0之间的颜色,HDR中可能有超过1.0的颜色,所以要设置成GL_RG

qq_43533956的博客 198

LearnOpenGL 总结记录<16> HDR

1.   To implement high dynamic range rendering we need some way to prevent color values getting clamped after each fragment shader run. When framebuffers use a normalized fixed-point color format (li...

aa20274270的博客 352

LearnOpenGL学习笔记—PBR:理论

LearnOpenGL学习笔记—PBR1 理论1.1 引入1.2 微表面模型1.3 能量守恒1.4 反射方程1.4.1 辐射度量学1.4.2 辐射通量(Radiant Flux)1.4.3 立体角(Solid Angle)1.4.4 辐射强度(Radiant Intensity)1.4.5 入射辐照度(Irradiance)1.4.6 出射辐射度(Radiance)1.4.6 概念:双向反射分布函数(Bidirectional ReflectanceDistribution Function,BRDF)1.

清清!的博客 2880

LearnOpenGL->gamma矫正/HDR

LearnOpenGL->高级光照->gamma较正/HDR的笔记

2201_75303014的博客 801

LearnOpenGL-笔记-其十二

看起来似乎非常复杂,但是其实本质上就是:当我们开启SSAO功能之后,我们的屏幕上会多一层四边形,也就是铺屏四边形,这个四边形会检查每一个在屏幕里的像素:准确地说是以每个像素为球心扩展出一个球,然后我们在这个球内容去采样后检查采样点和像素的深度进行比较,比如这个球内采样了一百个点,六十个的深度值小于该像素深度而四十个大于,那么这个像素的遮蔽因子就是0.4,也就是他只会收获到正常亮度的百分之六十。,它是我们渲染物体的一种非常直接的方式,在场景中我们根据所有光源照亮一个物体,之后再渲染下一个物体,以此类推。

lastXuanGod的博客 1331

LearnOpenGL笔记——五、高级光照:“HDR”和“泛光”

LearnOpenGL笔记——五、高级光照:“HDR”和“泛光” 5.6 HDR 一般来说,当存储在帧缓冲(Framebuffer)中时,亮度和颜色的值是默认被限制在0.0到1.0之间的。 这个看起来无辜的语句使我们一直将亮度与颜色的值设置在这个范围内,尝试着与场景契合。 这样是能够运行的,也能给出还不错的效果。 但是如果我们遇上了一个特定的区域,其中有多个亮光源使这些数值总和超过了1.0,又会发生什么呢? 答案是这些片段中超过1.0的亮度或者颜色值会被约束在1.0,从而导致场景混成一片,难以分辨

weixin_44478658的博客 929

LearnOpenGL学习笔记——泛光

泛光 高斯模糊 多渲染目标

VIPCCJ的博客 705

LearnOpenGL学习笔记—PBR:光照

LearnOpenGL学习笔记—PBR1 引入2 一个PBR表面模型3 直接光照明3 线性空间和HDR渲染4 完整的直接光照PBR着色器5 带贴图的PBR6 动手试试 本节对应官网学习内容:光照 结合英文原站,中文站,以及个人实践进行描述。 并且结合了个人在games101中的相关笔记 GAMES101课程学习笔记—Lec 14(2)~16:Ray Tracing(2) BRDF、渲染方程、全局光照、路径追踪 GAMES101课程学习笔记—Lec 17:Materials and Appearances 材

清清!的博客 1370

LearnOpenGL学习笔记—高级光照 07:泛光

LearnOpenGL学习笔记—高级光照 07:泛光1 引入2 提取亮色3 高斯模糊3.1 高斯模糊着色器4 把两个纹理混合5 Kalogirou的观点:关于缩小图像进行高斯模糊6 注 本节对应官网学习内容:泛光 结合英文原站,中文站,以及个人实践进行描述。 1 引入 由HDR的知识我们知道,因为监视器的亮度范围是有限的,所以明亮的光源和区域经常很难向观察者表达出来。 一种区分明亮光源的方式是使它们在监视器上发出光芒,光源的光芒向四周发散。这样观察者就会产生光源或亮区的确是强光区。 注:这个问题的提出简单

清清!的博客 865
上一篇: LearnOpenGL学习笔记——视差贴图
下一篇: LearnOpenGL学习笔记——泛光
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值