在线客服

【游戏引擎入门到实践】四.所有渲染用一个方程就可以表示

adminadmin 报建百科 2024-04-25 151 21
【游戏引擎入门到实践】四.所有渲染用一个方程就可以表示

一.Rendering Equation 物体渲染的方程

Kajiya于1986年提出的 渲染方程。

全世界所有的渲染用下面的六维方程就可以表示。

方程的问题背景: 假设观察者位于一个点,从该点观察一个物体表面上的点X,X可以是二维空间的点,也可以是三维空间中的点。求点x射入眼睛的光 outgoing。

结果outgoing出射光能量 = 物体自发光 + 反射光

0.补充知识,七维方程、半球光场

参考这篇《光场技术综述》zhuanlan.zhihu.com/p/47492390

(1)人眼位于三维世界中不同的位置进行观察所看到的图像不同,用(x, y, z)表示人眼在三维空间中的位置坐标。光线可以从不同的角度进入人眼,用(θ, Φ)表示进入人眼光线的水平夹角和垂直夹角。

每条光线具有不同的颜色和亮度,可以用光线的波长(λ)来统一表示。

进入人眼的光线随着时间(t)的推移会发生变化。

因此三维世界中的光线可以表示为7个维度的全光函数(Plenoptic Function, Plen-前缀具有“全能的、万金油”的意思)。 P(x, y, z, θ, Φ, λ, t)

(2)上述光场的描述是以人眼为中心。光路是可逆的,因此光场也可以以物体为中心等效的描述。与“光场”相类似的另一个概念是“反射场(Reflectance Field)”。上图,物体表面发光点的位置可以用(x, y, z)三个维度来表示;对于物体表面的一个发光点,总是向180度半球范围内发光,其发光方向可以用水平角度和垂直角度(θ, Φ)来表示;发出光线的波长表示为(λ);物体表面的光线随着时间(t)的推移会发生变化。同理,反射场可以等效表示为7维函数。

(3)渲染方程一共用6个维度变量表示,所以是六维方程。

x、y、z、入射角ωi 、出射角ωo、θ~入射光线ωi与法向量的夹角。

1.物体自发光(在视线方向的发光强度)

(1)首先,我们需要有一个观察角,橙色的线,即上式中的ω0,也就是x点的出射角。

(2)其次,需要考虑点X会不会自发光,如果X会自发光,那么X在观察角度上射出来的光也会被看到,这就是上式中的项 。不会自发光该项值为0。

2.反射

(1)点X被很多其他的周边光源照亮,X所反射出来的光照也会被看到,这些光照构成了一个积分项,即从球面上的所有可能的入射角发射出来,并投影到所观察的表面上的光。

(2)θ是点X处入射光线ωi与法向量的夹角。

(3)这里要乘以一个项,项可以视为斜着照射到表面的光线在垂直方向上的分量。

(4)项理解起来也很简单,大家可以从地球不同纬度的气温变化来理解,太阳光照射到地球的不同纬度上,纬度高的地方就会冷,纬度低的地方就会热。

因为在同样的单位面积上,对于纬度高的地方来说,所接受的光照需要乘以高纬度处的球面上的垂直分量,其实就是法线和太阳光线之间的夹角。

如果在极地位置,90度,cos项的值几乎为零。

在赤道位置,基本是0度,cos值最大,所以接收到的能量会更高,能量几乎全部接受,所以更热。

(5)通过scattering function(BRDF)来得出在当前入射角ωi 和出射角ωo情况下,有多少能量反射出去。

表示光线在点 x 反射的瞬间,光线从入射方向到观测方向因为点 x 的特性而发生的强度变化。即BRDF函数。

(6)表示在入射方向 ωi 的Irradiance~辐照度,表示强度、衰减等光源特性。

3.补充,微积分知识

(1)简单总结:

导数:是指函数在某一点处变化的快慢,是一种变化率。
微分:是指函数在某一点处(趋近于无穷小)的变化量,是一种变化的量。
积分:把微分那种变化的量,全部加起来
微积分:积分就是无限求和,求谁的和,这就是微分的和,所以微积分其实就是将不均匀变化的东西,无限细分(微分),再无限求和(积分)

比如,微分是把局部当成直线,积分就是在这种观点下把全部这种分段直线加起来。二者合起来叫微积分。

(2)资料:

微分到底是什么意思?实际意义是什么? - 湖心亭看雪的回答 - 知乎 www.zhihu.com/question/53…

怎样通俗易懂地理解微积分? - 步响曲鸣的回答 - 知乎 www.zhihu.com/question/51…

二.散射方程scattering function

1.概念和作用

(1)在给定的入射角和出射角的情况下,计算大概有多少能量会被反射。

(2)其中具体发生的情况,比如光电子反应等,上面大佬Kajiya的论文中提出了这个方程,但是没有进行进一步解释。但引入了一个方程来计算这一项,这就是著名的双向反射分布函数 ~ BRDF方程(Bidirectional Reflectance Distribution Function)。

(3)自从Kajiya在论文中提出BRDF开始,已经过去了三十多年,整个渲染行业一直在致力于精确求解BRDF方程。

三.经典示例~书桌一角

1.名词:

(1)图中的名词

Direct light:直射光。

Indirect light: 间接反射光。

Indirect shadow:间接光的阴影

Glossy reflections:光泽的反射

Caustics:发射聚焦

Scattering:散射、漫反射

(2)Color Bleeding:当光线照射到表面之后,又发生了反射,反射表面自身又变成了一个光源,又照亮了别的物体。

(3)半透明物体会发生折射,refraction,甚至是多次折射,然后再穿出物体。

四.求解渲染方程的三大挑战:

一.第一个挑战~光源相关

1.如何正确渲染~阴影

光源的第一个问题对光源的可见性问题,即“Visibility to Lights”。

即对于某个点,我们能够看到,而这个点是否能被光线照射到,更熟悉的解释就是阴影。

前人发明了大量的“奇技淫巧”(Hack and Trick)方法来实现阴影效果。有些方法只适用于某种特定场景,在其他场景下则会引发新问题。

2.光源自身的复杂性

光源的第二个问题,光源自身的复杂性。

(1)简单的光:方向光(Directional Light)、点光源(point light)、聚光灯(Spotlight)

(2)复杂的光源:面光源。意味着当光源自身发生转动的时候,阴影形状也会发生变化。

光源自身的复杂性,也就是方程中的Irradiance给开发者的挑战。

2-1.面光源,也叫区域光

(1)一般并不应用于实时光照,是一种应用于光照贴图烘焙效果的静态物体光效。

(2)相当于光来自于一个平面形状(矩形或椭圆),例如办公室顶部的LED矩形灯、摄影棚的补光灯等。

3.介绍两个名词(参考辐射度量学相关知识)

(1)Radiance~辐亮度。

辐射亮度或者物体辐射出去的能量。即光线照射在一个物体上,物体往外反射出的能量,就叫做Radiance。

(2)Irradiance~辐照度。

入射的能量。以前被称为“Incoming Radiance”,现在合到一起,叫做“Irradiance”。

4.很难准确计算到Irradiance,入射能量。

二.第二个挑战~如何在硬件上进行高效积分,即如何着色/渲染材质效果

即公式中的红框部分

1.要在整个球面上将光照项与表示BRDF模型的函数一起积分。这个积分很难求解。

2.当然,我们可以使用数值方法,通过逐个采样来求解。

3.但是无法在实时条件下使用数值方法进行积分来求解光照方程。

在实时条件下,快速计算出光照和材质之间的卷积结果是一件很麻烦的事。

4.这就是第二个挑战,用图形学的行话来说,就是如何进行着色(Shading)。即在已知整个球面光照信息的条件下,如何实现正确的材质效果。

1.补充知识~ 卷积

详见:https://www.zhihu.com/question/22298352

1.对卷积这个名词的理解:
所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。

2.在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。
整个过程:翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加.....

3.卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;同时,“卷”还有滑动的意味在里面
4.卷积的“积”,指的是积分/加权求和。

三.第三个挑战就~光线的弹射/反射(Bouncing)问题

1.会导致所有的物体都有可能成为光源。

2.第一次计算出来的每个物体的光照输出实际上会作为下一次光照计算的输入,从而变成了一个无限递归的计算。

3.著名的示例场景,Cornell Box

(1)经常会使用Cornell Box作为标准的全局光照GI 效果。

和自己使用的各种技巧性的算法所生成的结果进行对比,以确定自己的算法和标准效果的近似程度。这意味着场景中可能会存在着无穷多个光源。

四.早期计算光照的尝试

1.“分布式(Distributed)”光线追踪的算法

(1)在早期计算场景光照时,有个很著名的算法叫做光线追踪(Ray Tracing),在这类算法中,还有一种叫做“分布式(Distributed)”光线追踪的算法。

(2)分布式光线追踪方法会发射出一根根光线,每根光线不停发散,最后会发生“计算量爆炸”。

(3)现在已经没有人这么做,因为即使进行离线计算,这种计算量也无法承受。

(4)然而,它确实反映了光学的本质。

(5)因为对于自然界来说(相对于计算机进行比较),它的存储空间和算力都是无限的,因此可以使用最简单的光子(Photon)来解决这个问题。而对于计算机图形工程师来说,则需要在算力非常有限的计算机上来模拟光子的各种行为,以得到正确的光照效果。

接下来介绍,解决渲染方程挑战的几套解决方案

1.一套最基础解决方案,十多年前的3A游戏方案。

2.一套进一步优化的解决方案,5-10年前的3A游戏方案。

3.近些年的前沿技术方案。

本网站是一个以CSS、JavaScript、Vue、HTML为核心的前端开发技术网站。我们致力于为广大前端开发者提供专业、全面、实用的前端开发知识和技术支持。 在本网站中,您可以学习到最新的前端开发技术,了解前端开发的最新趋势和最佳实践。我们提供丰富的教程和案例,让您可以快速掌握前端开发的核心技术和流程。 本网站还提供一系列实用的工具和插件,帮助您更加高效地进行前端开发工作。我们提供的工具和插件都经过精心设计和优化,可以帮助您节省时间和精力,提升开发效率。 除此之外,本网站还拥有一个活跃的社区,您可以在社区中与其他前端开发者交流技术、分享经验、解决问题。我们相信,社区的力量可以帮助您更好地成长和进步。 在本网站中,您可以找到您需要的一切前端开发资源,让您成为一名更加优秀的前端开发者。欢迎您加入我们的大家庭,一起探索前端开发的无限可能!
代办报建

本公司承接江浙沪报建代办施工许可证。
联系人:张经理,18321657689(微信同号)。

喜欢0发布评论

21条评论

  • 8001体育 发表于 5个月前

    知识就是力量啊!http://380gao.ecogeneration.net

  • 游客 发表于 4个月前

    太邪乎了吧?http://www.3553km.com/g/58.html

  • 指尖网 发表于 4个月前

    楼主最近很消极啊!http://85mwh.cervejaesalsicha.com

  • 游客 发表于 4个月前

    看了这么多帖子,第一次看到这么有深度了!https://www.eny365.com/countryside/jygg_more?area_code=650000

  • 游客 发表于 4个月前

    坚持回帖!http://www.guangcexing.net/voddetail/PcfkvpvUsUKbP.html

  • 游客 发表于 4个月前

    楼主人气很旺!http://www.guangcexing.net/voddetail/PcfkvpvUsUKbP.html

  • 指尖网 发表于 3个月前

    这么经典的话只有楼主能想到!http://5sq41.koobean.cn

  • 指尖站群 发表于 2个月前

    楼主的文笔不错!http://gx9ppk.hao123cn.cn

  • skype官网 发表于 2个月前

    文章写太挺好了,真的值得推荐https://www.skypeis.com/

  • skype登录 发表于 2个月前

    好好学习楼主的帖子!https://www.skypeis.com/

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址