几个图形学基础概念的笔记

做基于物理的光照不可避免的会遇到使用什么样的物理模型的问题,这方面已经有很成熟的理论了,如果要阅读新的Paper,这方面的概念还是要搞清楚的,不然看SIGGRAPH,GDC之类的文章会看得一头雾水。下面简单总结一下,后面准备写写今年比较有意思的SIGGRAPH文章和GDC的PPT。

光的物理学模型

  • 光具有波粒二向性
  • 把光看作光子(Photon)的流动,每一个光子都携带一份辐射能量
  • 使用成熟的热力学理论进行建模

立体角(\( \omega\))

  • 可以看作平面角的三维推广,用来表示方向

Flux(\( \Phi\))

  • 是一个能量单位,单位时间通过单位面积的辐射能量,单位是瓦特
  • 也可以看作单位时间内通过的光子数量
  • \(\Phi(p,\omega) \)表示在p点方向为 \(\omega\)的通量大小

Radiance (\(L\))

  • 单位投影面积单位立体角离开一个表面的辐射通量大小,\(L(p,\omega)\)代表在p点\(\omega\)方向的辐射亮度
  • 光线追踪算法中每一个Ray携带的能量就是用这个量来表示的

Irradiance (\(E\))

下面用一张SIGGRAPH11的PPT来说明一下\(E\)和\(L\)的差异:
Radiant Exitance (\(M\))
  • 单位面积离开一个表面的辐射通量,某些文献用\(B\)来表示
  • 我们写的Shader返回的值就是这个值
BRDF
  • 双向反射分布函数
  • 用来描述某一点入射和反射的Radiance之间的关系,也就是物体的材质属性
  • 在游戏里面,我们一般都用非常简单的模型,比如用一张贴图来代表每一点的BRDF
  • \(M=L(p,\omega_{r})=f(p,\omega_{i},\omega_{r})E(p,\omega_{i})=f(p,\omega_{i},\omega_{r})L(p,\omega_{i})cos\theta_{i}d\omega_{i}\)

渲染方程(Rendering Equation)

  • 图形学最基本的方程
  • Radiance = Emitted Radiance + Total Reflected Radiance
  • \(L(p,\omega)=L_{e}(p,\omega)+\int f(p,\omega_{i},\omega)L(p,\omega_{i})cos\theta_{i}d\omega_{i}\)
  • 一般来说渲染方程涉及了很多高维积分,计算复杂度非常高,所以一方面比如电影行业是在追求在有限的计算能力下如何更精确的求解渲染方程获得更真实的CG,而另一方面游戏行业则是考虑如何用取巧的办法去简化渲染方程,获得特定游戏需求的效果,当然随着桌面PC计算能力的提升,我们可以把很多以前离线渲染的技术用在实时游戏中了。这也是为什么做实时渲染的人一定要理解离线渲染的基础技术。这才是一个大宝库。
  • CS348B课堂笔记有更详细的内容,值得一看。

Tags: , ,

2 comments

  1. 呵呵 这也是为什么做实时渲染的人一定要理解离线渲染的基础技术。这才是一个大宝库。 这句不错 离线渲染一踏糊涂 很多算法难以理解

  2. [...] 在去年的一篇基本概念短文中,提到了图形学采用的光的物理模型,物体的材质属性可以用BRDF函数来表示,这个函数决定了入射光和反射光的关系,求解渲染方程可以获得最终被人眼感知的Radiance。BRDF再细化还有用来建模反射的BTDF,建模散射的BSDF,次表面散射的BSSDF….因为后面不准备写太多公式并且实时渲染的Shading Model就是对BxDF的各种简化。所以下面准备从简单的直观模型和术语入手。能把思想说明白就行了。 [...]

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>