学习笔记16

球谐函数

首先看二维的情况,二维平面坐标系中,使用的式xy来表示一个点,而极坐标系下,我们使用θ和r来表示平面中的一个点,确定夹角,然后沿着夹角线走距离r就是确定的点。

然后我们直角坐标系下,有一个xy的等式关系,y = 多少x,随着x变化,y也会变化,这样我们就得到了一系列的点,从而组成一个图像。同样的在极坐标系下,我们也可以这么干,r = 多少θ,然后θ变化,r也随之变化,得到一系列的点,组成一个图像,这就是函数图像。

这是二维的,三维情况下,z = 多少y + 多少x,然后可以确定三维空间下的一个曲面。而极坐标系换成三维情况下,就成了球坐标系,其实就是我们确定三维空间中的θ和φ,然后可以确定出一条射线,r再来决定这个射线取多长,就得到了三维空间下的点,那么建立一个r = 多少θ + 多少φ。就可得到很多的点,组成一个曲面。

球谐函数介绍(Spherical Harmonics) - 知乎 (zhihu.com)

首先基函数是干啥的,就是把一个复杂的函数,通过找一组基础的函数通过调整他们的系数来近似刚刚复杂的函数。

这里为啥要近似,首先你就假设你自个在一个球坐标系下,然后你的表面构成一个曲面,现在让你写一个函数,把这个曲面给描述出来,这一点我相信不是很容易就能做到的吧。

确切来说是很难做到。那么我们就可以去尽可能的近似,取用这些基函数来各种组合去近似整体的形状,比如从一个球,到一个椭圆,然后加上四肢和头的椭圆,逐渐逼近人形曲面。

对于基函数的理解,其实就可以理解成搭积木的过程。

一个复杂的函数就好比是你要用积木搭起来的东西,比如一个房子,而基函数就是手中最基础的一些积木组件,积木组件的种类越多其实你搭建出来的结果就和你想要的结果越逼近,你想要一个房子,如果只有正方体,搭建出来肯定不如正方体+三棱锥等等配合搭建出来的。

这也就是上边去逼近,去近似的一个性质,使用的基函数越多,这个逼近的程度就好,就越近似。

然后重点就是这些基函数,然后决定系数。

如果我们约定好基函数,那么我们只需要确定几个系数,就可以确定出一个函数。

这里说了球谐函数(球面坐标系下一组常用的基函数)是分阶的,阶数越高,形状越复杂。

最简单的是一个球,就是r = C,这个函数,C是常数。一般近似的时候,会先考虑一阶的,比如一个人你用一个球模拟,直径就是他的腰的宽度。但是这近似的效果有一些差。你就可以考虑二阶的,二阶的有三个,你让中间那个系数大一些,加上之前的球,结果就变成了一个类似竖着的椭圆形状,这就距离我们的人形近了一步。

然后可能腰部并不是圆的,宽度比厚度要大,那就可以用二阶的第一个和第三个加上一些系数,这里第三个可能就需要加一个负数然后腰部的厚度就会变小,就更接近我们的人形。大致就是这么个意思,这么一个过程。

可以看出随着使用的阶数越高,近似结果就越近似。如果学过泰勒展开的话,其实展开的级数也是类似的道理。

还有就是他上边提到了rgb,这就开始向颜色过渡了,具体看下面:

这里有一个重点,就是怎么从理论到我们的应用中的颜色过渡的:

就是我有一个r = 多少θ+多少φ  的表达式,可以写成上边曲面的形式,就绿色那个图,那个就是一系列的点组成的一个曲面。

我们根据θ和φ得到的r值,我们不把他当作距离,我们把距离统一取成一个数,比如都取1,这时候相当于是一个r = 1的球面,而我们在球面上每一个点内部存储r值,使用颜色存储,就得到了上边的这个只有黑白灰颜色的球。因为r是一个一维的值,表示颜色只能是黑白灰。

这时候就把一个三维空间下的函数曲线,使用一个带颜色的球来表示出来了,我们自然就可以使用贴图来存储这个球,然后我们对球的纹理采样,就相当于对函数进行一个代入求解。

回到上边说的RGB,其实就是用纹理的单个通道来存储我们实际得到的r。一共三个通道,也就是上边的球上的一个点存储三个r值,就是把三个函数存储在纹理中。

【论文复现】Spherical Harmonic Lighting:The Gritty Details - 知乎 (zhihu.com)

整体思路,从

简化的环境光的公式说起,这里的第二个p写错了,应该是p'才对。

注意上边虽是漫反射公式,但是环境光和直射光没啥区别,环境光的漫反射项也是一样的计算方式。

考虑到环境光简化之后的特点,我们是视作它来自很远的天空盒上的。那么这里简化成(2)式,其实是因为当Wi确定之后,p'转而就确定了。因为p'在这种简化的情况下,必然是在天空球上。那么由于我们的p点始终是在天空球的中心,所以我们有了Wi,自然就可以知道p'的位置,所以就只需要Wi这一个变量。

然后就是利用球谐函数,来对L(Wi)和n·Wi进行球谐函数展开,也就是把这两项关于Wi的函数进行展开。这里只看右边时,变量是Wi,n算是一个常数。

展开之后,就是进行化简,最后只剩下了这两项:

他们都是球谐系数,也就是有着一个特定的表达式:

对于第一个,Y(w)是一个已知的函数,就是球谐函数,然后L(p,w)那个实际和p无关,L(w)这个我们是知道的。就是cubemap采样的结果。所以这个可以直接采样获得。整个Li是可以直接求出来的。意思是所有的shading point的这个值都是一样的。

而第二个就需要用到n了,知道了n,t就会算出来,我们需要预计算每一个n对应的ti。

也就是说我们要想算出最终结果,需要知道n,然后就有了ti,而Li那一项所有人都一样,这样最终结果就算出来了。

注意这里的是有一个下标的,也就是我们展开之后是很多项,这里写成ti和Li表示通项,假设展开了9项,那么最后需要把9项计算的结果累加起来才是最终的结果。那就意味着我们需要生成9组,知道n得到ti。如果存储在图里面,那就是需要9个通道,三张图,这比之前还复杂了!

这里的γ是为了坐标系下的旋转而生的。

如果只考虑旋转,因为任何一个向量,在这个空间下只有两个东西决定它,θ和φ,所以想要旋转到任意角度,只需要把自己的α和β和目标向量旋转成一样的即可。

而如果涉及坐标系的旋转就不一样了,坐标系旋转成一个特定的角度,其实只需要两大步,第一步,把z轴旋转成自己想要的样子,然后绕着z轴进行旋转,把xy对齐即可,这里最后一步就是上边的γ

所以说,坐标系之间的变换是需要三个变量来确定的,那么一个变量在坐标系之间的变换用同样的方式进行即可。

还是很乱,还是没有看懂。

【论文复现】Spherical Harmonic Lighting:The Gritty Details - 知乎 (zhihu.com)

【论文复现】An Efficient Representation for Irradiance Environment Maps - 知乎 (zhihu.com)

两篇论文:

envmap.dvi (ucsd.edu)

Microsoft Word - Spherical Harmonic Lighting.doc (chalmers.se)

球谐函数wiki

Spherical harmonics - Wikipedia

还有catlike对于球谐函数的讲解

Rendering 5 (catlikecoding.com)

球谐函数暂时先到这里。难度太大,

PS:这个似乎是一个简单的paper。

Liris-2476.pdf (cnrs.fr)

——————————————————————————————————————————————————————————————

06

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值