黎明的剔透里伸出了你沁清的暧昧

Graphics|EngineDev|GameDev|2D&3D Art

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  61 随笔 :: 1 文章 :: 18 评论 :: 0 Trackbacks

       Spherical Harmonics 在图形学中的用处发展的越来越多,只需要计算很少量的系数而在运行时不用处理大量的数据。用Spherical Harmonical可以模拟RTGI。

 

image

一、球面调和函数

        球面调和函数Spherical Harmonics SH是定义在球面坐标系的一组函数,构成球面上的一组标准正交基,是作用于频率空间的,通常情况下,SH的定义是在复数域,在做光照计算时主要是用实数域。

        球坐标:(x,y,z)=(rsincos,rsinsin,rcos)coordinates2

 

      球面调和函数的定义:image

    其中-l<= m <=l, l>0, l一般去2-3个Bands 所有一般有l(l+1)项

    P是m阶l次伴随勒让德多项式,伴随勒让德多项式的计算通常是由三个规则来计算出来的

 

image

   

  K是一个标准化的缩放因子:

 

image

 

根据以上几个公式可以推算出球谐基系数投影到笛卡尔坐标系上:

 

image

         

        索引化:取i = l ( l + 1 ) + m 可有image

         之所以选择球谐基函数来还原原始函数,是因为球谐基函数式正交的,有了正交,在进行卷积运算的时候可以得到一个常数0或1, 如果能得到原始函数用基函数表示的对应系数,便可以还原原始函数。

         球面S上的任意一个函数f的SH系数为:(运用卷积)  《SH系数公式》image

           通过这些SH系数可以把原始函数f还原:

image

      我们需要计算SH的系数的那个积分,这里可以用蒙特卡洛积分来把积分转换成乘法和加法:

            image

          现在把上面求SH系数的积分用球坐标表示:

image

 

          在采用蒙特卡洛积分时,对于一个球体表面,每个点的均匀采样概率为:

image

        所以《SH系数公式》可以写成

image

 

      现在可以计算n阶的近似原始函数f丿,注意要计算出n阶的原始函数。需要计算出n*n 个球谐基SH系数,《近视原始函数计算公式》

image

二、球谐函数的特性:

       球谐函数的旋转不变性:使用球谐函数时,当场景变化,移动灯光或者旋转物体,能够保证light的Intensity不会受到影响。

       另外一个是计算两个球谐函数的乘积的积分时,能够用其SH系数的乘积之和表示:

image

以上一、二部分是球谐基函数的理论部分,其中参考了网上的大量资料,当时参考的比较多,放的比较乱就不一一列出,比如PBRT等等。


三、TR-Rendering

        球谐光照用新的光照方程来替代通常所说的光照方程,把方程中的信息使用球谐基函数Projectd到频域空间中,在渲染的时候可以使用SH系数来对原始光照方程还原渲染场景,

        球谐光照是一种把场景中光的分布从时域转换到频域的过程,和傅里叶变换道理是一样的:

image

     

   把 environment light irradiance 一个2D的函数L(s),把这个函数project到球坐标上,即表示在频率空间上,其中参数有球谐基函数yi和相应的参数Ci,当给定一个环境映射,   可以离线的预计算Ci,然后在渲染的时候计算上面说的《近视原始函数计算公式》f丿来渲染场景中物体表面上的点的辐射照度 irradiance。我们使用2阶(0,1,2)的球谐基就已经足够能模拟出漫反射辐射照度,因为漫反射辐射照度是一个低频率的函数,需要3*3=9个SH系数。在计算SH系数时,每一个SH函数分离到3个通道RGB三通道来计算输出,最后要有27个参数

Irradiance :

image

其中n是每个点的法向,w是光照方向,L(w)是整个的envirment map.

通过对渲染方程改进以及简化,主要步骤有:

  • 重建函数
  • 投影卷积求系数(通过使用蒙特卡洛积分方法以及分层采样)

 

image

  下面是效果图:

图片3

 

图片2

采样:

   Simle randon sampling(单纯随即采样)

   Systematic sampling(系统采样)随即采样、等距采样,先将总体的观察单位按某一顺序号分成N个部分,再从第一部分抽取第K号观察单位,依次使用相等间距,从每一部分各抽取一个观察单位组成样本。           

  Cluster sampling(整群抽样)总体分群,在随机抽取几个群组组成样本,群内全部调查。

  Stratified sampling(分层采样)先对观察指标样本影响比较大的某种特征,将总体分为若干个类别,再从每一层内随即抽取一定数量的观察单位,合起来组成样本

Realtime Radiosity

posted on 2012-09-19 00:20 情绝格调(fresmaster) 阅读(4532) 评论(0)  编辑 收藏 引用 所属分类: GraphicsCodingDocuments

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理