找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 773|回复: 0

[教学]:转贴 光能传递与光线追踪的概念...

[复制链接]
发表于 2002-12-3 11:31:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
首先是关于三维图形学中的两个困难问题:
1. 光照模型: 一束光照到物体表面上的一点, 会发生什么现象? 最简单的一种情
况就是均匀的漫反射, 出射的光强 = 入射的光强 * 漫反射系数 * cos(入射角),
这叫Lambert模型(Lambert好像是一个18世纪的人). 还有很多复杂的模型, 可以
描述镜面反射/折射, 色散, 各向异性的反射率, 等等. 在三维软件中一般用"材
质"来表现.
2. 光的传递问题: 一个场景中的各个物体间在光的照射下, 会产生如何的相互作
用? 也就是说, 光是如何来回传递的? 物体间相互作用而产生的现象有很多, 例如,
阴影; 还有光在物体表面间相互传递所产生的间接照明. 由于是研究物体间的相互
作用, 这个问题一般被称为"全局照明"(Global Illumination); 相对的,光照模型
研究单个点的光照, 也被称为"局部照明".

一般来说, 为了解决"全局照明", 染色过程要分为两个pass: 照明过程和采样过程.
radiosity(光能传递)是照明过程, 是最早被使用来解决"全局照明"的方法. 其它
"全局照明"的方法还包括photon map等.
而raytrace是一种采样算法, gauround, phong等算法也是. 实时图形库(像opengl)
和早期的染色程序和都只有采样过程, 无法产生"全局照明". 例如opengl中的阴影,
并不是场景设定好了就会自动出现, 而一定要通过stencil buffer等方法来模拟.

对raytrace的简要说明: 从观察点所在的位置出发, 通过一个像素做一条射线. 追
踪这条射线, 如果这条射线和一个surface交于一点, 记下这一点, 再看看是否有镜
面反射/折射发生, 如果有, 从这一点产生新的反射/折射射线, 继续追踪. 这样下
去, 就生成了一棵二叉树. 这个像素的亮度就是二叉树所有节点的亮度和. 至于每
个节点的亮度, 如果前面有照明过程的话, 就使用照明过程的结果, 否则可以直
接按光照模型计算. 对图像中所有像素重复以上过程, 就得到图像. 注意, 追踪的
深度必须加以限定.
这是最简单的一种raytracing. raytracing有很多扩展算法, 如Monte-Carlo
Raytracing, 可直接解决全局照明.
raytracing有一些优点: 不需要投影, 不需要消隐(raytracing本身就是消隐算法),
不需要剪裁.

对radiosity的简要说明: 全局照明从数学上来看是这样一个问题: 给定一个场景及
其初始亮度分布(就是光源啦), 求任意表面上任意一点的亮度. 这个问题可以写成
一个很简单的积分方程, 称为光的传输方程. 但这个方程很难解, 从数学上看,
radiosity实际上是使用了有限元法来解这个方程.
最简单的一种radiosity算法是progressive radiosity: 1.把场景(包括光源)分割
成大量的小多边形, 称为patch. 光源的光能处于未出射的状态. 2.找到未出射光能
最大的一个patch, 把它出射的光能加到其它所有的patch上: 从一个patch i发出的
光能有百分之多少能到达另一个patch j, 这个参数称为form factor.这个参数有很
多种求法. 之后把这个patch的未出射光能设为零. 3. 反复执行步骤2, 场景将由暗
变亮, 操近真实效果. 结果将存储起来, 供以后的采样算法, 如gauround, phong,
raytracing等生成图像使用.
progressive radiosity比较简单, 但效率不高. 目前用的较多的是各种wavelet
radiosity算法.

radiosity和raytracing并没有完全解决上面提到的两个图形学的困难, 尤其是全局
照明. 光的传输可以一个正则表达式来形象的说明, E代表眼睛, L代表光源, D表示
漫反射/折射, S表示镜面反射/折射, 那么光从光源到眼睛的路程为L(D|S)*E, (*应
该是上标, 这里显示不出), 单使用gauround(如opengl)只能计算LDS, 单使用ray-
tracing: LDS*E, 单使用radiosity: LD*E, 先radiosity再raytrace: LD*S*E. 如果
传输中出现...SD..., 这些方法就都不能解决. 例如, 一面镜子会反射光线, 照亮其
它物体. 这种现象称为caustic, 实际上就是由镜面反射/折射引起的间接照明.现在
很多混合算法可以解决L(D|S)*E, 但是离实用还有一段距离.
文章作者: 周轶 文章类型: 专题研究教材
作者主页: www.chinavisual.com 发表时间: 2002-6-13 19:36:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-6 16:17 , Processed in 0.160266 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表