球谐函数与光照估计

最近用到球谐函数(Spherical Harmonics),这是一种非常优雅的光照模型。

关于球谐函数,具体的数学推导可以在维基百科上查到:

https://en.wikipedia.org/wiki/Spherical_harmonics

我主要介绍一下球谐函数在光照估计中的应用。

球谐函数

光照估计就是从图片中获取光照信息,从而降低光照对纹理的影响。传统的光照估计依赖于光源方向和法线方向的估计,而光源方向和法线方向都是一种“估计”,本身就是不够精确的。使用不够精确的参数去估计目标值,就需要使用到一些高级的估计算法,这些算法一般都依赖于对象的统计特征。这样的光照模型过于复杂,其中的每一个过程都会影响最终的结果。

在2001年,Basri和Jacobs证明了曲面上的像素值可以使用9维的球谐基函数进行线性表示,这种光照模型只需要估计球谐基函数前面的权值,不需要光源的方向,大大简化了光照的估计。点p处的像素值等于p处的albedo乘以球谐基函数的线性组合,用数学公式表示一下就是:

I(p)=j=19ρ(p)ljhj(p)

ρ(p) 表示p处的albedo, lj 表示球谐基函数的系数, hj 表示9个球谐基函数。使用 nx,ny,nz 表示法线方向,这9个基分别为:

h1=14π,h2=34πnz,h3=34πnx

h4=14πny,h5=1254π(3n2z1),h6=3512πnxnz

h7=3512πnynz,h8=32512π(n2xn2y),h9=3512πnxny

从式子中可以看到球谐函数基还是依赖于法线的方向的。Albedo的原意是反照率,我们可以看成是去除光照和阴影以后的纹理,在游戏图形工程上,更接近于基色的概念。

光照估计

对于一个有n个像素值的图片,n个像素对应着n个线性方程组,光照的估计就变成了n个方程求解n+9个未知数的问题,n+9表示n个albedo值和9个光照系数。一般的方法是使用最小二乘法进行估计。

  • 初始化albedo估计

    albedo的初始值 ρ0 可以使用图片像素平均值来估计。

  • 初始化光照参数

    有了 ρ0 ,就可以带入到 I=ρ0HL 中,使用最小二乘法获得初始的光照系数 L0

  • 更新albedo

    使用上一步中得到的 L 值,可以根据式子 I=ρHL0 直接解得新的 ρ

  • 更新光照系数

    再次使用最小二乘法估计光照系数 L 。重复估计albedo和L,直到满足要求,一般5次就足够了。

总结

球谐函数对光照的建模非常的简洁,整张图片使用相同的光照系数,免去了对光源参数的估计。模型比较简单,求解的步骤也比较简洁,使用最小二乘法不断迭代求解。

你可能感兴趣的:(Computer,Vision,Computer,Graphics)