辐射度(radiosity):
A rendering technique where all surfaces are considered capable of emitting light, although only true light sources do this at first. This light, when it falls on some surface effects the light that surface emits. Increasing the number of iterations allows the quality of the resulting image to be improved. There method may be used for specular as well as diffuse reflections.
辐射度算法本质是将光看作一种物理辐射,然后计算辐射的传导就能获得加之于每个对象物体上的光照强度,从而获得正确的渲染结果。和其他渲染方法相比,辐射度算法更接近于光的自然传播原理。辐射度算法解决了光在不同面之间反射的计算技术,但不分布镜面光,也不产生聚光(Caustic)。
场景中的所有物体,既是受光体也是发光体, 所以物体最后的光照色彩是受周围物体反射光的影响, 但OPENGL提供的光照模型,并不拥有这种特性,以为基本光照模型都假定光源是一个点, 但在真实环境下, 辐射光源的并不是一个点而是一个有体积的物体. 这样如果将一个大体积的物体辐射的光源近似成一个点光源的话,就会很不真实的.在这个DEMO中,提供了一种新的光照方法来实现这种辐射度光照.
大体步骤如下:
1. 将场景渲染到一张cubemap中, 用来查询周围的光源辐射情况.
2. 在PS中, 以一个图素向四面八方均匀射出向量(采样向量越多,光照效果越真实), 通过向量查询cubemap, 同时有一个亮度系数lightfactor, 它等于辐射向量与当前图素法向量的夹角的余旋,既越靠近法线的采样向量, 采样得到的颜色所占的权重越大.
3. 最后将最后采样的颜色叠加, 得到此图素最后的色彩.
DEMO下载:
需要cg.dll, cgGL.dll 的支持, 如果没有请这里下载, 并把他们复制到system32下面
www.azure.com.cn
[最后修改由 Admin, 于 2006-05-21 15:49:16]
评论Feed: http://www.azure.com.cn/feed.asp?q=comment&id=199












另外我看到国外有人做辐射度渲染镜面反射和玻璃状物体的那种焦散效果。我以前看文章介绍说辐射度比较适合计算漫反射而不是和计算镜面反射,因为镜面反射能量不容易收敛。所以不知道这样的效果怎么实现的。