【GAMES202】Real-Time Environment Mapping2—实时环境光照2

一、Shadow from Environment Lighting

上篇我们说了给定Environment,如何计算一个着色点的Shading,但没说Shadow。而事实上,实时渲染中很难做到环境光的Shadow。

原因也很容易想到,一种观点我们把环境光当成多光源问题,如果这样,我们就要为每一个虚拟光源都生成一张阴影图,那自然不可能实现。其次是采样观点,但显然我们要采样整个半球,也就是说积分线非常长,而且显然环境光不一定是Smooth的,也就是说我们无法把环境光的Visibility从渲染方程里用之前的split sum方法拆分出来。

工业界解决多光源的方法通常是只渲染最重要的光源的阴影,或者几个相对来说重要的光源的阴影,如Unity中的前向渲染。

一些可能的解决方案,如实时光线追踪,以及我们这篇要说的 Precomputerd radiance transfer。

二、数学和信号知识回顾

1.傅里叶变换

任何一个函数都可以分解成许多不同频率的cos函数和sin函数的线性组合,这就是傅里叶变换告诉我们的,相信大家都很了解这个概念,我就不做赘述了。

2.滤波

在GAMES101里我们还介绍了滤波的概念,包括低通滤波,高通滤波,如上图就是一张图片经过低通滤波后的结果,它把高频部分都给抹除了。

3.卷积

其次我们还提到了卷积操作,其实也就是滤波操作,我们通常理解为加权平均操作,模糊操作。而时域上的卷积等于频域上的乘积,如上图。

而这里,我们可以认为,两个函数相乘再做积分就是一个卷积/滤波操作。而所谓低频和我们前面提到的smooth是一个概念,也就是变化没那么剧烈。而这个积分结果的频率由两个函数中各自的最低频决定。

4.Basis Functions—基函数

基函数,顾名思义,基础的函数。如上图公式所示,f(x)由一系列的Bi(x)函数的线性组合构成,那么Bi自然就是f(x)的基函数。自然而然,傅里叶级数展开也是一套基函数。多项式自然也是基函数。

三、Real-Time Environment Lighting (&global illumination)

1.Spherical Harmonics (SH)—球谐函数

球谐函数—Spherical Harmonics,简称SH,是一系列的二维基函数,并且每个基函数都是定义在球面上的。此处二维怎么理解呢?球谐函数的二维基函数实际上定义了三维空间中的一个方向,很容易理解,我们知道两个参数θΦ就可以表示三维空间中的一个方向。

并且可以看到,第l阶基函数的数量=2l+1,编号 - l。并且前n阶的基函数数量n的平方

也就是说SH就是一系列的基函数,有不同的阶数,各阶有不同的频率,阶数越高描述的频率越高,基函数也越多。(并且实际上每个基函数是用Legendre多项式写出来的)

其次这里涉及到一个投影的操作,什么是投影呢?给定任何一个球面函数,如果我们想把它展开成某阶的一系列球谐函数的基函数,那么其中某个基函数的系数ci是多少呢,事实上ci就等于把这个函数f和这个基函数做乘积再积分(product integral)得到的结果,这就是投影—Projection操作。这里和一个我们熟知的操作类似,假设我们三维空间有一个向量,我们需要用(x,y,z)坐标表示它,那么xyz的值各是多少呢?那自然就是这个三维向量在各个坐标轴上的投影喽。显然球谐函数的各个基函数就可以理解为三维空间的各个坐标轴,而想要表示的函数自然就是那个三维空间的向量。

其次,三维空间中我们的投影用的不是点乘吗?为什么这里的投影变成了乘积的积分(product integral)呢?事实上,乘积再积分的操作本质上就是点乘,也就是dot操作。其次我们想三维空间的三个坐标轴互相投影为0,也就是说它们是正交的/互相垂直的,而事实上球谐函数的各个基函数也互相垂直

那么l是不是可以等于无限呢? 事实上并不是,人们通常用前有限阶的一系列球谐函数来近似还原想要的某一个球面函数。比如用前4阶,那只需写16项,而更高阶高频的项则选择丢掉。

关于球谐函数的更多解释和理解,可以参考两篇文章,这里不做赘述:

大二学生都会的球谐函数 - 知乎 (zhihu.com)球谐函数介绍(Spherical Harmonics) - 知乎 (zhihu.com)

2.球谐光照近似的Diffuse 

DiffuseBRDFsmooth的,这点我们之前提到过,也就是说,Diffuse的BRDF是低频的,那我们求Environment的Shading的时候,要把BRDF和环境光的函数相乘然后半球积分,这正是我们之前提到的乘积再积分(product integral)的操作。那么此时,因为BRDF是低频的,我们可以把BRDF看作一个低通滤波器,低通滤波?那当我们把它投影到球谐函数的时候,如上图,可以看到只需要0,1,2阶就足够了,因为从图中可以看到之后的阶数,它们的所属系数基本接近0,因为Diffuse的BRDF是低频的,所以根本没有高阶基函数描述的高频信息。

回到我们前面的product integral操作上,我们说过,乘积再积分的结果的频率取决于低频部分,由也就是说,即使外界环境光再复杂,遇到了Diffuse的BRDF,物体的表面也不会呈现出很复杂的杠光照,这也符合我们的常识。

由上面我们知道,既然BRDF可以用前三阶的SH函数很好的近似出来,为什么我们不能把光照也用有限阶的SH描述出来呢?于是经过实验得到了如上图所示,用前3阶的SH描述光照得到的结果和正确的结果基本一致,误差接近1%。一个更通用的结论,对于任何的一个光照条件,只要BRDF是Diffuse的,我们都可以用前3阶的SH来描述光照来照亮Diffuse的物体。

3.Precomputed Radiance Transfer (PRT) — 预计算辐射传输

我们重新分析一下渲染方程,它包括Lighting项,Visibility项,BRDF项,它们三个都可以表示为一个球面函数,或者说一张Cubemap,那最终结果的颜色(带着Shadow)自然就是它们三项的对应值/像素相乘了,但显然这是一个非常麻烦的步骤,它要耗费很多时间。

PRT的思想是,我们先假设场景中只有Lighting项可以变,如光照类型/反向,其它条件都不变。这样渲染方程就被我们拆成了两部分,一项我们叫Lighting,另一项我们叫它light transport。其次,在预计算的时候,PRT把Lighting项拆成了一系列SH基函数。又因为我们前面提到,场景中除了光照其他条件都不变,那么显然light transport项也不会发生变化,它相当于着色点自身的性质,既然light transport不变,那我们就可以在渲染之前把它预计算好。

其次我们之前说过了因为场景中除了光照其他条件都没有变,所以light transport项里的Visibility项,BRDF项,甚至cos项,都是球面函数,它们相乘后的结果仍然是球面函数,那我们自然可以把light transport项也用SH基函数表示。

 (1)Diffuse情况

在这篇文章中,我们从Diffuse的情况来看,因为Diffuse的情况相对来说比较简单。首先因为Diffuse的BRDF是一个常数(我们之前提到过只不过当时把它写作了kd漫反射系数),所以我们可以把它从积分中提出,这里我们写作ρ。其次用我们前面提到的球谐函数可以把Li项用一系列基函数表示变成求和项。然后交换积分与求和的顺序(图形学中大多数情况都可以调换积分和求和的顺序),此时基函数的系数li也可以从积分中提出。此时我们可以看到右边划红线的部分变成了,Visibility项和cos项的乘积也就是light transport项,再乘一个基函数然后积分,这不就是Light transport项在SH各个基函数上的投影吗。

显然,上图划红线的部分直接可以预计算得到,最后组成一个表格存储计算的结果。于是最终的形式就如图所示,变成了L(o)  ρ Σ li·Ti,也就是一个点乘,就可以计算出Diffuse下的环境光照并且带有Shadow。

当然,我们前面提到,我们只假设了光源可以改变,其它场景条件不变,那么Visibilty项如果不能变得话,计算着色点周围的遮挡关系就不能改变。

其次因为光源也做了预计算,如果要更换光源,我们要对不同的想要使用的光源都进行预计算。那么如果光源可以旋转呢?这里可以用球谐函数的一个很好的可以旋转的性质解决。

(2)球谐函数的性质

● 正交性,任何两个基函数互相垂直,在对方上的投影为0  (eg. B1·B2=0)

● 可以把任何函数投影到SH上,只需做product integral操作即可

●SH某个基函数发生旋转,这个旋转后了的基函数可以由同阶的其它基函数线性组合表示

若由SH表示的球面函数发生旋转,可由SH发生旋转来表示,只不过各基函数的系数会随之改变。就我们上面提到的光源旋转问题而言,用SH我们可以立刻得到旋转之后的光源投影在各个基函数上的系数是多少。

这里我更倾向与二维坐标系的理解,我们前面说过基函数和坐标系的坐标轴可以类比,那如果一个二维向量在二维坐标系旋转了,我们自然可以通过旋转坐标系来达到和旋转向量一样的效果。

球谐函数全面讲解 - 知乎 (zhihu.com)

可以看到,基函数的阶数越高,拟合出的光照效果越接近真实光照。

(3)小结 

到这里我们就把Diffuse的PRT流程介绍完了,简单的说就是通过球谐函数的投影和求和积分顺序的交换,最后把渲染方程改写成了一个两个向量的点乘,左边是光照被投影在各个基函数上的系数,也就是光照值 ,右边则是预计算的light transport项。

可以看到,Diffuse的PRT最终在环境光照下得到的结果很好,并且带有Shadow。(最右边Shadow+Inter表示多次的light bounce的light transport项预计算后得到的结果)

至于PRT如何处理非Diffuse情况,我们下一篇介绍。


参考:

GAMES202_Lecture_06 (ucsb.edu)

Lecture6 Real-time Environment Mapping_哔哩哔哩_bilibili

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值