Spherical harmonics 和 cubemap 的关系
今天在 Real-time Shading-based Refinement for Consumer Depth Cameras 这篇文章和 Shading-based Dynamic Shape Refinement from Multi-view Video under general illumination 两篇文章中看到了 Spherical Harmonics 光照模型,同时看到他们在show自己求解出来的光照的时候用的是Cubemap的展开图形,苦思冥想怎样把SH和Cubemap对应起来,上网查了半天,终于顿悟了。
原来Cubemap和SH都是对irradiance map的一个表达,传统渲染比较爱使用Cubemap的原因是它本身可以对环境光照表达的比较详细,后来人们比较偏爱SH的原因是它用9个系数就可以表达,查找texture的时候只需要将法向带入SH光照模型求解即可,这样可以大大节省存储空间(大概是这个意思,除此之外还可以给场景中不同位置加不同的SH,提高效果)。因此也可以说SH是对cubemap的一个低阶近似,它抛弃了cubemap应该有的高频成分。那为什么文章里说自己求解的是2阶SH的9个系数,最终表达光照却用cubemap来表达呢?其实他们只是利用cubemap的形式来直观的表达他们球出来的SH罢了。
这个图片是从1阶SH到6阶SH的cubemap表达,最后的那个是高精度的cubemap,可以看出SH只是对环境光照的一个近似,而且低阶SH会丢失高频光照,但是对于一般情况来说,2阶的SH去表达环境光照就够了(图片取自Stupid Spherical Harmonics (SH) Tricks)