球谐光照总结

Posted redips-l

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了球谐光照总结相关的知识,希望对你有一定的参考价值。

实习需要学习了一下求谐光照,总结如下:

1. 首先是下面的rendering equation

技术分享图片

第二部分是一个半球面上的积分。

 

2. 球谐变换

类比傅里叶变换[采用定义在圆上的三角函数],球谐变换采用定义在球面上的一组球谐基函数。[Spherical Harmonic Lighting: The Gritty Details]有这些函数的介绍。

现在只需要知道

  • 一个定义在球面上的函数可以近似分解成一组正交基函数的加权和:F(s) ≈ ∑ fi Yi(s).
  • 两个函数f(s),g(s)乘积的积分可以用两个基向量的点积近似表示:∫f(s)g(s)d≈∑ fi gi.
  • 坐标fi的求解,类别向量的点积,函数的点积为积分:fi=∫F(s)Yi(s)d

3. 蒙特卡罗积分

求解fi需要用到神奇的蒙特卡罗积分技术分享图片

 

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面可以写代码了,看一下最简单的“dot product lighting”,也就是漫反射模型,对应的渲染方程里面的brdf部分f(p,wo,wi)是一个常数,可以拿出积分号外,现在积分号里面剩下了∫Li(p,wi)*max(n.dot(wi),0)dwi。根据2.2,我们只需要分别投影分解Li(p,wi)和max(n.dot(wi),0)dwi两个函数,利用蒙特卡洛方法求积分的时候还可以加上可见性的判断。注意需要对模型的每一个顶点都需要计算一组基向量fi,如果加上自遮挡的判断会耗费大量时间,例如下面的dragon用了6000s来处理所有的模型顶点。

技术分享图片 技术分享图片

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

贴一下代码

 

以上是关于球谐光照总结的主要内容,如果未能解决你的问题,请参考以下文章

Unity Shader

转载“最简单的” Unity 光照探头总结

unity 渲染环境设置

Unity Bakery使用说明

Unity Lighting 面板的参数设置用途详细总结

论文 数据集总结