learnopengl,learnopengl中文版
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。五. 高级照明:“阴影”(也称为“阴影地图”和“点影子”)阴影图编号5.3.3.1阴影不那么可行,因为在目前的实时转换区还没
本内容由系统网小编为大家分享,Windows系统安装教程、办公系统、软件怎么使用、软件使用教程、办公软件攻略等信息。
五. 高级照明:“阴影”(也称为“阴影地图”和“点影子”)
阴影图编号5.3.3.1
阴影不那么可行,因为在目前的实时转换区还没有发现理想的影子算法。 有很多近似技术,但它们都有自己的缺点和缺点,必须加以考虑。 影子地图是电子游戏中流行的技术。效果不错,而且相对容易实现。这不难理解性能也不会太低,此外,推广到更高的算法(如全向影图和连锁影图)非常简单。阴影映射
影子绘图概念的课程与GAMES101所述相同,后者与GAMES101相比范围更广。深度贴图
在OpenGL,这是已经实现的。 因为我们只关心深度, 我们会把纹理格式 指定给GL_DEPTH_COMPONENT 并把纹理设置到1024: 这是深度标签的分辨率。 由此产生的深度纹理用作深度缓冲的框架缓冲。 因为我们需要的只是光镜头的信息深度, 色缓冲是没有必要的。 然而,不含颜色缓冲的边框缓冲区不完整, 因此我们必须向 OpenGL 演示没有使用颜色数据显示 。 我们这样做的方法是使用 glDrawBuffer 和 glReadBuffer 分别设置 GL_None 的读取和绘图缓冲。 假设深度值被正确配置到纹理框架缓冲, 我们可以开始第一步 : 生成一个深度标签。 这两个阶段的整个交接阶段看起来有点类似 : 代码中隐藏了几种微妙之处, 但它显示了阴影映射的基本概念。 记住要使用 glViewport 。 由于阴影补丁与源场景(通常为窗口解析)的分辨率往往不同,我们必须改变视图端框设置,以适应阴影补丁的大小。 如果查看设置不更新,由此产生的深度要么太小,要么不完整。光源空间的变换
这个光空间矩阵正是我们命名的变换矩阵。有了光空间矩阵,我们就能通过给Shacher一个光空间投影和视图矩阵来显示场景的正常状态。 不幸的是,我们只关心深度值,而并非所有的区段都是在我们的彩色中计算。 为了提高效率,我们将使用一个单独但简单的彩色设备来制作深度标签。渲染至深度贴图
当我们用光镜头重建场景时, 我们使用一个基本的彩色机制, 只能把顶点从黑暗变为光明。 我们不需要处理最后的碎片 因为我们没有颜色缓冲, 所以我们可以使用空的片段颜色。 下方深度缓冲现为 : RenderScene 函数的参数在此是一个彩色程序( 阴影程序), 执行所有所需的绘图功能, 并将匹配的模型矩阵定位到您想要的位置 。 要在四边形上贴上深度标签, 请使用片段颜色 : 应当指出,如果用直观投影矩阵取代正方形投影矩阵以显示深度,则有小改动,因为利用直观投影时深度非线性。渲染阴影
深层形成后,我们可能会开始构建一个阴影。 本节不包括所有守则,应结合原来的课程守则加以研究。 此代码在片段颜色器中执行, 以确定片段是否在阴影中, 但光空间在顶层颜色器中被更改 。 FragPosLightSpace 的输出矢量是顶层彩色新位置。 我们用相同的光空间矩阵将世界顶层空间位置转换成光。 对片段颜色器来说, 顶层颜色器会发送一个正常转换的世界空间封套位置 。 FragPos 和一个光空间 vs_ out. FragPosLightSpace 。 片段颜色主要基于精密的光学课程,但加上影子计算。 我们定义了一个计算阴影的阴影计算函数。 在染色体末端,我们通过1个阴影部件来增加扩散和脉冲,以确定这块碎片有多少不在阴影中。 色素染色体还需要另外两项投入,其中一项是碎片在光空的位置以及在初始形成阶段确定的深度。 函数阴影计算 :改进阴影贴图
阴影失真
由于阴影在分辨率上受到限制,许多区段可能从与光源距离的图片深度的相同价值中取样。 图像的每个斜坡代表了深度标签的不同纹理。 这个问题可以通过一种称为影子束的技术来解决,在这种技术中,我们只是对表层的深度进行偏转(或深度标签),以免错误地认为碎片在表层之下。 A. 零. 005的偏差可能有用,但某些地表斜坡很大,仍然投下阴影。 有一种更可靠的技术可以调整从表面向光的偏移:使用点乘以发生角度。 函数阴影计算 : 这里,我们的最大偏差为零.05,最低偏差为零.005,这取决于表面光线和光线方向。 因此,像地板一样的表面与光源几乎是垂直的,而偏差微乎其微,但像立方体一面的表面则大得多。悬浮
使用阴影抵消的一个后果是您对对象的物理深度进行了平整。 偏差可能足够高, 足以导致相对于对象物理位置的阴影变化 。 由于物品似乎轻轻浮在表面上方,这个阴影被称为彼得潘宁。 我们可以用一个叫做前锋切割的方法 来弥补彼得·潘宁的大部分担忧 来制造深度 我们只需要深度标签的深度值, 在真实物品的前部或后部使用这些标签是正常的。 使用后部深度不会有问题, 因为阴影在对象内部是不正确的, 我们看不到它 。 这是一个相当有效的边际方法, 但只针对身体上的东西 不张开他们的嘴在里面。采样过多
还有一种视觉上的区别,即看不见的光区域被假定为在阴影中,不管它是否在阴影中。 这是因为将横贯信锥的投射坐标定在1.0,使样品的深度纹理超过预期的0至1范围。 根据我们周围的纹理,我们将获得不准确的深度结果,这不是基于光源的真正深度价值。PCF
影子现在在现场,但它仍然不是我们想要的。 随着阴影的扩大,影子地图对分辨率的依赖变得很明显。 由于深度比线具有固定分辨率,许多区段与单个像素相对应。因此,多个区段从与图片深度相同的深度值(即相同的阴影)中取样,结果,深度比线的宽度具有固定分辨率,许多区段与单个像素相对应。结果,多个区段从与图片深度相同的深度值(即相同的阴影)中采样,结果形成弧度边缘。 您可以通过提高深度贴纸的分辨率, 降低标定的马赛克, 或者尽可能接近现场, 尝试获取光线的视觉锥体。 它实际上类似于 MISA。正交 vs 投影
5.3.2 点阴影
然而,由于阴影只在一个方向光源下形成,因此效果良好,它也被称为一个方向影子地图,其中深度(阴影)贴纸产生自己方向光的视野。 这一方法被称为光影子,以前称为全方向影子绘图。 我们要求从点光源显示所有显示场景的深度标签,常规的 2D 深度标签不会起作用。 如果我们使用立方望远镜,会发生什么情况?由于立方电技术可以将环境数据储存在六面,整个图象可能会被重新写到立方电技术的两侧,然后作为点光源的深度值进行取样。 由此产生的深立方体补丁被送至光电像素颜色仪,该彩色仪用定向矢量对立方体补丁进行取样,以确定当前(光透镜)基质的深度。生成深度立方体贴图
在阴影中,有两个绘制阶段:首先,我们制作深度标签,然后用深度标签来制造场景的阴影。 对框架缓冲物体和立方体的处理得出以下结论: 这是与默认的阴影图相同的技术, 但是我们这次制造并使用 立方体覆盖的深度纹理, 而不是 2D 深度纹理 。 在我们开始从照明角度从所有方向重写场景之前,我们必须首先计算适当的过渡矩阵。光空间的变换
我们可以在六个变式矩阵中重复预测矩阵,因为它没有每个方向的不同,我们必须为每个方向提供一个单独的视图矩阵。 使用 grm: bookAt, 创建六个观察方向, 每个方向相继盯着立方体方向之一: 右、 左、 上、 下、 近、 远。深度着色器
要将值转换为深度立方体, 我们需要三个颜色: 上方和像素, 以及它们之间的几何颜色 。 几何颜色器负责将全世界空间的顶部转换为六个不同的光空。 顶层颜色器只需将顶部点更改为世界空间, 然后直接将其发送到几何颜色器 。 随后是带有三个三角顶部和一套光空间转换矩阵统一阵列的几何色谱仪。 几何颜色器随后将负责将顶端转换为光;这里的情况开始令人感兴趣。 几何颜色包括一个名为 gl_Layer 的变量,该变量定义了立方体的哪一侧为立方体提供基本图形。 当无关紧要时, 几何颜色显示器将其基本图形作为正常的发送到管道的下一步, 但是通过更新变量, 我们可以选择每个基本图形的哪一边显示在基于立方体的细卡上 。 当然,这只有在我们有一个立方体覆盖的纹理 绑在被启用的框架缓冲上才有效。 几何色素很容易使用。 我们输入一个三角形,共产生六个三角形(6*3点,共18点)。 在主函数中,我们环绕立方体的六边, 每一个方被我们定义为输出方, 将方的内插( 整数) 保存到 gl_ Layer 。 最后,通过将地表摄影空间转换矩阵由FragPos乘以,我们将每个世界的空间上限转换为适当的光空间,从而产生每个三角形。 值得指出的是,我们也需要将最后一个 FragPos 变量提交到像素颜色器中, 并计算一个深度值 。 像素着色器 这次,我们将计算我们的深度, 也就是每根烟的位置 和光源之间的线性距离。 当你计算你的深度, 你就可以做更多的直觉的影子计算。 像素颜色器输入 Fragpos, 光位置矢量, 以及离几何颜色器的锥形票价 。 在这里,我们绘制了烟雾和光源之间的距离, 以0到1的比例表示, 并记录为烟雾的深度值。 当您使用这些颜色来激活与立方体相关的框架缓冲对象时, 将会给您一个完全填满的深立方体补丁, 以允许进行第二个阴影计算阶段 。万向阴影贴图
一切都已经完成了 是时候释放万向阴影了 此程序与方向影子绘图课程相同, 但这次我们将深度连接为立方皮层, 而不是 2D 纹理, 并向彩色者提供了光投影的长视距 。 具体过程略显示 Cubic 像素图深度缓冲
PCF
在第三个层面,可使用与前一课程相同的基本PCF过滤器。 但是,由于样品定在4.0,我们每部分总共将获得64个样品。 这些样品大多数是多余的,比在样品方向矢量垂直方向的原始方向矢量附近采集的样品重要。 有一种技术可以用一个偏转阵列来使用,这种偏转阵列几乎是分开的,每个偏移阵列的方向完全不同,用来切断彼此相近的子目录。XTw.com.Cn系统网专业应用软件下载教程,免费windows10系统,win11,办公软件,OA办公系统,OA软件,办公自动化软件,开源系统,移动办公软件等信息,解决一体化的办公方案。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com