SSDO AO 图像空间的动态全局光照

本文仅记述SSDO学习笔记!

概述

SSDO Screen-space Direction Occlusion 是对AO的扩充,在AO的基础上,假设没有遮蔽的方向有直接入射光,有遮蔽的方向,可能有间接光的反射。

SSAO理论分析

在这里插入图片描述

AO:在计算点的周围进行采样,如果采样点的深度大于采样点所对应的屏幕空间的深度,则认为是没有光照进入,否则我们则认为有间接光照,这样我们就可以对所有采样方向进行积分,计算这一点的光照。

让我们来看一下如何进行计算的:

一切起源于渲染方程,在渲染方程中我们有三项值得注意,入射光BRDF以及可见度
在这里插入图片描述
然而在实时渲染中,我们有一个伟大的近似公式:

  1. 这里需要f(x) 必须要比较光滑。
  2. 或者average f(x) in the support of G

在这里插入图片描述
在这里插入图片描述

那么我们可以依据这个公式将可见度分离出来,并进行积分,注意在AO里面是间接光照,并且是个常数。
在这里插入图片描述
cosθidωicos\theta_{i}\mathrm{d}\omega_{i}cosθidωi的积分是什么呢? 对,其实就是算一个投影立体角,即π\piπ
在这里插入图片描述

由此,我们的渲染方程就转变为:

实则,在这里我们就可以看出来,这还是求解渲染方程,那么就可以理解为屏幕空间的光线追踪
在object space进行光线追踪是非常慢的,并且依赖于屏幕的分辨率以及难以理解和计算麻烦。
在屏幕空间计算则非常简单,不依赖于屏幕分辨率,但不符合物理
结果呢:

  1. 产生的结果依赖于采样,因为我们还是在求解积分,采样越多,质量越好。
  2. 需要采样的位置必须随机,指定半径。
  3. 噪点,会产生噪声,那么我们还需要后期的降噪过滤。

但总之增加了图像的细节,效果还不错。左边AO,右边 no AO。

感谢闫老师的课程。

那么我们在此基础上来看一看DO吧!

SSDO理论分析

如何重建世界坐标.

一切来源于渲染方程,讨论过AO之后,我们知道了AO假设未被遮挡的方向有间接光照,那么DO则进行大胆假设:

  1. 未被遮挡的地方有直接光照
  2. 遮挡住的地方存在间接光照

在这里插入图片描述
很重要的一副图,其中CCC点是直接光照,A,B,DA,B,DABD点都表示会有间接光照,B,DB,DBD点会有间接光照。

直接光照

是不是很眼熟,对,这时对AO方程的离散化形式,并用作直接光照的计算,让我们分析一下:
在这里插入图片描述

  1. PPP就是我们需要计算的着色点
  2. Lin(ωi)L_{in} (\omega _{i})Lin(ωi)是从ωi\omega_{i}ωi方向来的直接光照
  3. 由于是屏幕空间所以这里将fr(ωi,ωo,f_{r}(\omega_{i},\omega_{o},fr(ωi,ωo,p)))假设为diffusediffusediffuseBRDFBRDFBRDF
  4. Δω\Delta\omegaΔω 则是均匀采样的立体角 Δω=2π/N\Delta\omega = 2\pi/NΔω=2π/NNNN是采样数量 。

因为是离散化形式,那么我们所需的积分变量就不再是单位立体角,而是一个具体的立体角,这里假设我们是均匀采样,并且我们不能在离散的计算机中表达出连续量。

间接光照

我们要知道一点的光照强度来源于直接光照和间接光照。
那么对于被遮挡住的间接光照我们怎么计算呢?
在这里插入图片描述
对,一切起源于渲染方程,对于间接光,我们则做了一个更大的假设,假设每一点都是一个VPL(虚拟点光源)
让我们来分析一下不同:

  1. LpixelL_{pixel}Lpixel:来源于采样点所映射到的屏幕点的Radiance,简单来说就是屏幕像素颜色。

  2. ρ\rhoρ与直接光相同,是albeoalbeoalbeo

  3. AsA_{s}As 是一块 sender patch,即发送光线的虚拟点所占的面积的投影,投影是因为接收点所接收的能量是从来自发射方的投影,即这是对VPL的修正,因为假设是均匀采样故这时一个常数,即πr2/N\pi r^{2}/Nπr2/N。可以从下图理解一下,即从发射光线的角度去思考。
    在这里插入图片描述

  4. di2d_{i}^{2}di2 的理解从下图理解:即点光源沿着某个方向传播有着r2r^{2}r2的衰减。
    在这里插入图片描述

  5. cosθsicos\theta_{si}cosθsicosθricos\theta_{ri}cosθri 则是发送方的法线和接收方的法线与采样方向的coscoscos值,即光线不可能从采样点的背面发送到着色点,也可能与 3. 中的意图一样,即着色点会接收垂直于它的所有光线的能量。

至此SSDO的理论全部结束,通过LdirL_{dir}Ldir可以算出遮蔽光,LindirL_{indir}Lindir则可以增加反射光。

注意点

  1. 对于这种方法自然是采样越多效果越好,噪点越少,cost越多。
  2. 对于深度的比较,自然需要bias的修正。
  3. 对于提升质量或者修正错误有着Depth Peeling方法。即记录多层深度法。图1
  4. Additional Cameras增加多个摄像机来渲染深度图,分别进行比较。

结语

SSAO与SSDO都是很不错的方法对于提升画面质量,很值得我们学习!

对那充满不安的日子说再见吧,对那充满不安的日子说再见吧,
向着未知的梦境之地前行,向着未知的梦境之地前行,
我想总有一日我会变得更加坚强!我想总有一日我会变得更加坚强!

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

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

相关文章

GPU Gems1 - 17 环境遮挡

环境光遮蔽(Ambient Occlusion)“AO”为Amblent Occlusion的缩写,中文译为环境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升级为SSAO(Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽)&#…

GPU Gems1 - 18 空间BRDF(Spatial BRDFs)

这章主要介绍了空间双向反射分布函数(SBRDF),接着文章讨论了压缩SBRDF表达式,以及由离散光或环境贴图所照明的SBRDF的渲染方法。关于BRDF请参考大佬浅墨的这篇文章https://blog.csdn.net/poem_qianmo/article/details/75943714 S…

浅谈表面反射——波动光学篇

Radiometric Definitions 首先让我们来回忆一下辐射度量学中关于irradiance和radiance的定义: 我们在这里定义光源(source)在x-z平面,因此入射光就可以只用θi\theta_{i}θi​来描述。dAs\mathrm{d}A_{s}dAs​是表面积。定义dΦi\mathrm{d}\Phi_{i}dΦ…

GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)

这篇文章打破了当时立方体贴图环境(Cube-Map Environment)用法的桎梏,深入研究了更多可能的逼真光照效果。文章主要研究了基于图像的光照(Image-Based Lighting,IBL),包括局部化的立方体映射&am…

Polygonal-Light Shading with LTC

概述 如果我们有一个上半球的余弦分布函数(Do)(D_{o})(Do​),并对这个余弦分布函数进行一个矩阵(M)(M)(M)变换,变换为一个新的分布函数(D)(D)(D)。 DMDoD M D_{o}DMDo​ 这就是基本思想:用一个余弦分布函数来拟合出不同的分布函数&#xff…

GPU Gems1 - 20 纹理爆炸(Texture Bombing)

【章节概览】 这章介绍了纹理爆炸(Texture Bombing)和相关的细胞技术,它们能在Shader中增加视觉的丰富性,图像的多样性,并减少大块纹理图案的重复性。 【核心要点】 纹理爆炸(Texture bombing&#xff0…

Catlike Coding网站文章解析 -- 1.Procedural Grid

原文英文版链接https://catlikecoding.com/unity/tutorials/procedural-grid/,里面有每一部分的untiy工程链接,文章内容也更详实。 本章内容: 创建一系列点使用协程实现他们的摆放位置定义一个由三角形组成的平面自动生成法线添加纹理坐标和…

GPU Gems1 - 21 实时辉光(Real-Time Glow)

这章浅墨的文章讲的很细了,这里基本照扒一遍加深印象,原文链接:https://zhuanlan.zhihu.com/p/36499291 【章节概览】 这章讲到2D光照效果中的辉光(Glow)和光晕(Halo),展示了如何通…

Catlike Coding网站文章解析 -- 2.Procedural Grid

本章内容 创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes(子mesh)创建一个常规shader合并碰撞体1.合成一个cube 上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成&#xff…

GPU Gems1 - 23 景深技术综述

本章主要介绍如何使用GPU创建实时的景深(Depth of Field)效果。参考浅墨总结文章的链接https://zhuanlan.zhihu.com/p/36499291 聚焦在枪上,背景模糊【核心要点】 物体在距离镜头的一个范围之内能够清晰成像(经过聚焦&#xff09…

GPU Gems1 - 22 颜色控制(Color Controls)

这章将在游戏中图像处理的讨论,扩展到技术和艺术上控制颜色的方法和应用,包括将图像从一些的色彩空间中移入移出,以及快速地给任何2D或3D场景加上精美的色调。 色彩校正(Color Correction)是几乎所有印刷和胶片成像应…

GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

这章介绍在片元shader中计算导数近似值的技术。这个技术把特别的值载入纹理mipmap的每个级别,以特殊的方式使用纹理映射硬件,计算出导数的结果,给出在屏幕上的像素间某个量的变化率。 Cg标准程序库提供ddx和ddy函数,计算任意关于…

GPU Gems1 - 24 高质量的过滤

在一些应用中,高质量的过滤是至关重要的,可以用像素shader代码执行任何过滤。GPU着色程序不用于CPU的主要之处在于:一般来说,CPU数学操作比纹理访问更快,而在GPU中恰恰相反。图像过滤的目的很简单:对于给你…

GPU Gems1 - 26 OpenEXR图像文件格式与HDR(The OpenEXR Image File Format and HDR)

【章节概览】 这章中,大名鼎鼎的工业光魔公司的Florian Kainz、Rod Bogart和DrweHess介绍了OpenEXR标准,这是一种当时新的高动态范围图像(HDRI)格式,在计算机成像的顶级电影中正在快速推广。对于基于图像照明的开发者…

ID Tech 5 中Megatexture针对地形的D3D9 基本实现原理

看GPU Gems2中的 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)一文,对Clipmap技术不是理解很好,所以上网搜索一番,发现了这篇文章,实在是太棒的文章&#xff…

[知乎] 开放世界游戏中的大地图背后有哪些实现技术?

今天看到的一篇关于大世界的技术文章,写的太好了,膜拜大佬。各位如果有时间一定要看看 原文:http://gulu-dev.com/post/2014-11-16-open-world#toc_10 一、程序技术篇:算法和架构(Programming Algorithms & Arch…

GPU Gems2 - 2 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)

【章节概览】 本章描述了一种通过顶点纹理实现的,基于GPU的几何体裁剪图(Geometry Clipmaps)技术。通过把地形几何体当做一组图像来处理,可以在GPU上执行几乎所有的计算,因此可以减少CPU的负载。且该技术较为容易实现…

球谐光照

一.原理 球谐光照实际上是一种对光照的简化,对于空间上的一点,受到的光照在各个方向上是不同的,也即各向异性,所以空间上一点如果要完全还原光照情况,那就需要记录周围球面上所有方向的光照。注意这里考虑的周围环境往…

图像色调,饱和度,对比度等相关定义

RGB颜色模型 RGB颜色模型也就是我们最常用的三原色,红绿蓝。RGB颜色模型在混色时属于加法混色,RGB中每种颜色数值越高,色彩越明亮。RBG为(0,0,0)时为黑色,RGB为(255,255,255)时为白…

各Rendering Path技术以及其在Unity中的实现

Rendering Path其实指的就是渲染场景中光照的方式。由于场景中的光源可能很多,甚至是动态的光源。所以怎么在速度和效果上达到一个最好的结果确实很困难。以当今的显卡发展为契机,人们才衍生出了这么多的Rendering Path来处理各种光照。 一. 正向渲染Fo…