现在的位置: 首页 > 综合 > 正文

[siggraph10]physically based shading

2013年08月08日 ⁄ 综合 ⁄ 共 2261字 ⁄ 字号 评论关闭

siggraph10, physically based shading course的开场,naty hoffman带来,link:

http://renderwonk.com/publications/s2010-shading-course/hoffman/s2010_physically_based_shading_hoffman_a.pdf

http://renderwonk.com/publications/s2010-shading-course/hoffman/s2010_physically_based_shading_hoffman_a_notes.pdf

非常棒的一个基础知识讲解。

开始是很多的光物理上的讲解,中学物理基础会帮上很多忙,

*refactive index

**这是一个复数,实部表示介质如何去影响光速的(这个越大,折射率越高),虚部表示光被吸收的程度(这个越大就越不透明)

*散射(scattering)

**如果介质的refractive index逐渐改变的,那么光就会走出一个弧线,如果短距离内大幅度改变,光就会散射


一些定义:

  • radiance:一条射线上的光强
  • BRDF:
    • bidirectional reflectance distribution function
    • 定义了一个surface对光照会有如何的反应
    • 它的参数是light and view direction
      • 两个角度,所以是一个4d空间的函数
      • 如果绕着normal旋转lightdir或者viewdir,brdf改变了,那么这个叫做各向异性brdf
      • 如果绕normal转lightdir,brdf不变,那么这个就是各向同性brdf,这种情况下,可以用3个参数来表示
    • brdf可以以两种方式来表述
      • 给定一个从某个方向射入的光,给出在surface上在所有方向的反射和散射分布
      • 反过来,给定view dir,看light的contribution:光是可逆的么
    • brdf一般用在反射公式中:

      • 这里表达一个含义是出射的radiance等于"入射的radiance"*brdf*dot(n,l)
    • brdf有两个基本属性
      • 可逆的
      • 能量守恒:一个平面不能反射多于入射光的能量,也就是要满足这样的公式:

    • brdf包含了2个截然不同的现象
      • surface reflection
        • 一般叫specular
      • subsurface scattering
        • 一般叫diffuse
    • Specular: 一般使用microfacet theory来做抽象描述,这个是大多数physically based specular brdf部分的基础
      • 是把平面看成有无数个微平面组成的
      • 公式:

      • F:fresnel part, G:微面部分的比例,D:normal distribution, l:light dir, h:microfacet normal,v:view dir
      • 这里就结合今天参考call of duty black ops的ppt实现的进一步认识说一下吧
      • fresnel:
        • 初中物理了,这里比较重要的是schlick approximation大大简化了计算:

        • 这里一些比较有意思的表,比如金属没有diffuse部分
        • 另外在microfacet框架下,需要把n换成h,因为microfacet下能看见的肯定都是通过某些小平面射过来的,这部分不能用n,也就是说,给定light dir和view dir,全场景的fresnel是定的,和每个面的normal是无关的(这里需要结合microfacet里面进一步想一下,这个在call of duty black ops的ppt里面也有说)。
        • 因为和normal无关,所以即便直接不用了fresnel参数也是ok的
      • normal distribution
        • 有一些参数类似roughness等
        • 决定了specular的大小和形状
        • 他可以说是很多specular的主体,典型的一个是blinn phong模型:pow(dot(normal, halfDir), specPower)*(specPower+2)/2*Pi;\
        • 和phong模型(pow(dot(normal, halfDir), specPower)比较像,多了一个和specPower几乎成正比的额外参数,blin phong比phong要更加正确。
      • G(l,v,h)叫做brdf的“geometry term”, 是指没有被遮挡的部分(也就是能反射光的部分)
        • shadow masking部分本质上是为了能量守恒来做的
        • 表达了一个microfacet被light和view看见的几率,所以dot(normal, lightDir)和dot(normal,viewDir)是必有的两个参数
        • 一些模型就是直接nDotL*nDotV,也有max(nDotL, nDotV)
        • cod_bo使用的是smith approximation, 参数上带specPower的
        • 它也会对specular的分布造成进一步的影响(废话么)
      • 矫正项:
        • 加一个1/(4*dot(n,l)*dot(n,v))来做一个矫正,
      • brdf里面很多部分是彼此independent的,所以可以根据自己需要去选择适合自己的function
    • Diffuse
      • 目前为止最常用的模型是lambert,直接就是一个常量diffuse color
      • 我们一般算diffuse lighting是nDotL*diffuseColor,这里的nDotL是reflection function里的不是diffuseColor的,BRDF中的diffuse使用lambert的话就只有一个常量

抱歉!评论已关闭.