openGL
Dezeming
研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程
曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派
展开
-
切线空间的注意事项
TBN矩阵的计算一般是先在CPU上根据每个三角形的三个顶点,计算出该顶点的TBN矩阵。TBN矩阵的第三行是法向量,这个法向量可以是共顶点面的柔化的顶点法向量(顶点属性平均化)。故其实T和B也可以平均化,获得更柔和的切线向量和副切线向量。副切线可以简化计算:vec3 B = cross(T, N);操作方法第一种,计算TBN矩阵,然后作用于视向量、光源(GLSL语言,来自LearnOpenGL)//顶点着色器 mat3 normalMatrix = transpose(inve.原创 2020-12-16 20:42:42 · 210 阅读 · 0 评论 -
LearnOpenGL PBR章节最后一个手枪模型导入需要注意的问题
openGL高级光照部分目录见openGL高级光照部分目录我们一般拿这个的代码修改成最后的显示效果:但是修改需要注意一些问题:一、首先是为了让程序调用我们自己输入的PBR纹理,我们需要把纹理的序号设置的高一点: pbrShader.setInt("irradianceMap", 5); pbrShader.setInt("prefilterMap", 6); pbrShader.setInt("brdfLUT", 7); pbrShader.setInt("albed..原创 2020-07-27 17:17:30 · 1974 阅读 · 1 评论 -
Lighting
openGL高级光照部分目录见openGL高级光照部分目录在前一章中,我们为从地面获得一个真实的基于物理的渲染器奠定了基础。在本章中,我们将着重于将前面讨论的理论转化为使用直接(或分析)光源的实际渲染器:考虑点光源、平行光和/或聚光灯。让我们重新访问上一章中的最终反射率方程:我们现在基本上知道发生了什么,但是仍然是一个很大的未知数,就是我们将如何准确地表示场景的总辐射率L。我们知道,辐亮度L(在计算机图形学领域中解释)测量给定立体角ω上光源的辐射通量ψ或光能。在我们的例子中,我们假设立体..翻译 2020-07-14 20:32:36 · 289 阅读 · 1 评论 -
PBR理论(五)
openGL高级光照部分目录见openGL高级光照部分目录Cook-Torrance reflectance equation在描述了Cook-Torrance BRDF的每个组成部分后,我们可以将基于物理的BRDF包括到现在的最终反射方程中:然而,这个方程式在数学上并不完全正确。你可能还记得,菲涅耳项F代表光在表面上反射的比率。这实际上就是我们的比值ks,这意味着反射率方程的镜面反射(BRDF)部分隐含着反射比ks。考虑到这一点,我们的最终反射率方程为:这个等式现在完全描述了一..翻译 2020-07-14 15:31:33 · 829 阅读 · 0 评论 -
PBR理论(四)
openGL高级光照部分目录见openGL高级光照部分目录法线分布函数法线分布函数D在统计学上近似于微区的相对表面积,精确地与矢量h对齐。在给定一些粗糙度参数的情况下,有许多NDF在统计上近似于微面总体排列,我们将使用的NDF称为Trowbridge Reitz GGX:这里h是测量表面微区的中间矢量,α是表面粗糙度的量度。如果我们将h作为曲面法线和光线方向在不同粗糙度参数下的中间向量,我们将得到以下视觉结果:粗糙度较低(因此表面是光滑的)时,高度集中的微区在一个小半径上与一半矢..翻译 2020-07-14 15:07:27 · 656 阅读 · 0 评论 -
PBR理论(三)
openGL高级光照部分目录见openGL高级光照部分目录BRDFBRDF或双向反射分布函数是一个函数,它将入射(光)方向ωi、输出(视图)方向ωo、曲面法线n和表示微表面粗糙度的曲面参数a作为输入。考虑到不透明表面的材料特性,BRDF近似于每个单独光线ωi对最终反射光的贡献。例如,如果曲面有一个非常平滑的曲面(如镜子),则BRDF函数将为所有入射光线ωi返回0.0,除了一条与传出光线ωo具有相同(反射)角度的光线外,该函数返回1.0。基于反射理论和反射材料理论,讨论了反射材料的反射特性。为..翻译 2020-07-14 10:59:21 · 1074 阅读 · 0 评论 -
PBR理论(二)
openGL高级光照部分目录见openGL高级光照部分目录这给我们带来了一个叫做渲染方程的东西,一个非常聪明的人想出的一个精心设计的方程,它是目前我们用来模拟光的视觉效果的最好的模型。基于物理的渲染强烈遵循渲染方程的一个更专门的版本,即反射方程。要正确理解PBR,首先要对反射率方程建立坚实的理解:反射率方程一开始看起来让人望而生畏,但当我们仔细分析它时,你会发现它慢慢开始有意义了。为了理解这个方程,我们必须深入研究辐射测量学。辐射测量是测量电磁辐射,包括可见光。有几种辐射量可以用来测量表面和..翻译 2020-07-14 10:32:49 · 528 阅读 · 0 评论 -
PBR理论(一)
PBR,或者更常见的基于物理的渲染,是一组渲染技术的集合,这些渲染技术或多或少基于与物理世界更接近的基本理论。由于基于物理的渲染旨在以一种物理上合理的方式模拟光,因此与我们的原始照明算法(如Phong和Blinn-Phong)相比,它通常看起来更真实。它不仅看起来更好,因为它非常接近实际物理,我们(尤其是艺术家)可以根据物理参数编写表面材料,而不必求助于廉价的技巧和调整来使灯光看起来正确。基于物理参数编写材质的一个更大的优点是,无论照明条件如何,这些材质都会看起来正确;有些在非PBR管线中则是不正确的。翻译 2020-07-13 22:28:29 · 2891 阅读 · 0 评论 -
Bloom 未完成
openGL高级光照部分目录见openGL高级光照部分目录种方法是使其发光;然后光线在光源周围流动。这有效地给观者一种错觉,这些光源或明亮的区域非常明亮。这种轻微流动或发光效果是通过称为Bloom的后处理效果实现的。Bloom为场景中所有明亮的区域提供类似辉光的效果。下面是带有和不带发光的场景示例(图片由Epic Games提供):Bloom提供了关于物体亮度的明显视觉线索。当以一种微妙的方式完成时(有些游戏根本无法做到),Bloom会显著提高场景的照明度,并允许产生大量的戏剧性效果。..翻译 2020-07-13 22:11:16 · 215 阅读 · 0 评论 -
HDR
openGL高级光照部分目录见openGL高级光照部分目录默认情况下,当存储到帧缓冲区时,亮度和颜色值在0.0和1.0之间。这句话一开始看起来很无辜,却让我们总是在这个范围内的某个地方指定光和颜色值,试图使它们适合场景。这个方法很好,而且效果不错,但是如果我们走在一个非常明亮的区域,有多个明亮的光源,总的和超过1.0,会发生什么呢?答案是,所有亮度或颜色和大于1.0的片段都被限制为1.0,这看起来不太好看:由于大量片段的颜色值被钳制为1.0,每个明亮片段在大区域具有完全相同的白色值,因此会丢..翻译 2020-07-13 20:04:34 · 299 阅读 · 0 评论 -
Normal Mapping (一)
openGL高级光照部分目录见openGL高级光照部分目录我们所有的场景都是用网格填充的,每个网格都由数百个或数千个三角形组成。我们通过在这些平面三角形上包装二维纹理来增强真实感,隐藏了多边形只是很小的平面三角形的事实。纹理有帮助,但是当你仔细观察网格时,仍然很容易看到底层的平面。然而,大多数现实生活中的表面并不是平坦的,并且显示出很多(凹凸不平)的细节。例如,以砖表面为例。砖的表面是一个相当粗糙的表面,而且显然不是完全平坦的:它含有凹陷的水泥条纹和许多细密的小孔和裂缝。如果我们在一个明亮的场景..翻译 2020-07-13 14:28:05 · 339 阅读 · 0 评论 -
Point Shadows(二)
openGL高级光照部分目录见openGL高级光照部分目录PCF由于全向阴影贴图基于与传统阴影贴图相同的原理,因此它也具有相同的分辨率相关伪影。如果你放大足够近,你可以再次看到锯齿状的边缘。通过过滤片段位置周围的多个样本,并对结果进行平均,百分比闭合滤波(PCF)允许我们平滑这些锯齿状边缘。如果我们使用上一章中相同的简单PCF过滤器并添加第三维度,我们可以得到:float shadow = 0.0;float bias = 0.05; float samples = 4.0..翻译 2020-07-12 16:26:37 · 290 阅读 · 0 评论 -
Point Shadows(一)
在上一章中,我们学习了使用阴影贴图创建动态阴影。它工作得很好,但它主要适用于平行光(或聚光灯),因为阴影只在光源的方向生成。因此,它也被称为方向阴影映射,因为深度(或阴影)贴图仅从灯光所观察的方向生成。本章将着重于在周围所有方向上生成动态阴影。我们使用的技术非常适合点光源,因为真实的点光源会向各个方向投射阴影。这种技术被称为点(光)阴影,或者更以前称为全向阴影贴图。本章建立在上一章阴影映射的基础上,因此除非您熟悉传统的阴影映射,否则建议您先阅读阴影映射一章。该技术主要类似于方向阴影映射:我们从灯翻译 2020-07-12 10:36:47 · 245 阅读 · 0 评论 -
Shadow Mapping (2)
openGL高级光照部分目录见openGL高级光照部分目录改进阴影贴图我们设法使阴影映射的基础工作,但正如你所能做到的那样,由于与阴影映射相关的一些(清晰可见的)工件,我们还需要修复。我们将在下一节集中讨论修复这些工件。暗疮很明显,与之前的图像相比有些问题。更近距离的变焦显示了一个非常明显的云纹图案:我们可以看到地板四边形的大部分以交替的方式呈现出明显的黑色线条。此阴影映射伪影称为阴影痤疮,可以通过以下图像进行解释:由于多个阴影碎片距离贴图的深度相对较远,因此它们与贴图的距离..翻译 2020-07-11 22:07:19 · 204 阅读 · 0 评论 -
Shadow Mapping (1)
openGL高级光照部分目录见openGL高级光照部分目录阴影是由于遮挡而缺少灯光的结果。当一个光源的光线没有击中一个物体,因为它被其他物体挡住了,这个物体就处于阴影中。阴影为照亮的场景添加了大量的真实感,使观看者更容易观察对象之间的空间关系。它们给我们的场景和物体以更大的深度感。例如,请查看具有和不包含阴影的场景的以下图像:你可以看到,有了阴影,物体之间的关系变得更加明显。例如,一个立方体漂浮在其他立方体之上的事实,只有当我们有阴影时才真正明显。阴影的实现有点棘手,特别是在当前的实时(..翻译 2020-07-11 09:30:02 · 245 阅读 · 0 评论 -
Gamma Correction
openGL高级光照部分目录见openGL高级光照部分目录一旦我们计算出场景的最终像素颜色,我们就必须在监视器上显示它们。在数字成像的旧时代,大多数显示器是阴极射线管(CRT)显示器。这些显示器的物理特性是输入电压的两倍不会产生亮度的两倍。将输入电压加倍后,亮度将达到大约2.2的指数关系,即监视器的伽马值。这恰好(巧合地)也与人类测量亮度的方式密切匹配,因为亮度也以类似的(逆)幂关系显示。为了更好地理解这一切意味着什么,请看下图:在人眼看来,顶行看起来像是正确的亮度比例,将亮度加倍(例如从0..翻译 2020-07-10 22:37:40 · 495 阅读 · 0 评论 -
LearnOpengl 高级光照目录
openGL高级光照部分目录 见learnOpenGL在线教程是目前可以说最好的OpenGL新特性的教程版本,可编程管线极大增加了灵活性。但是高级光照部分的中文版翻译的有问题,也很久没有再版了,这里我将自己翻译总结一下高级光照部分的内容。...原创 2020-07-10 21:16:29 · 1836 阅读 · 1 评论