光线跟踪渲染
光线跟踪渲染光线跟踪技术是从光线投射(ray-casting)技术发展而来的. 光线投射的基本原理很简单: 假设从视点V通过屏幕象素e向场景投射一光线,交场景中的景物于P1,P2,…, Pm点(见图1),那么离视点最近的P1点就是画面在象素e处的可见点,象素e的光亮度应由P1点向P1V方向辐射的光亮度决定. 如果通过V点向屏幕上的每一象素都投射光线以求得每一投射光线与场景的第一个交点(可见点),并置相应象素的光亮度为交点处理的光亮度(用局部光照明模型计算),那么我们就得到一幅完整的真实感图形.
http://www.visualbomb.net/bbs/images/fileType/jpg.gif此主题相关图片
http://www.visualbomb.net/bbs/images/upload/2005/11/23/170435.jpg
光线投射算法只能实现局部光照明效果. 这种方法的突出优点是不必再单独消隐. Whitted在求解整体光照明模型时,把上述光线投射技术发展成光线跟踪技术. 根据Whitted光照明模型,可见点P1朝L方向的光亮度I由局部光照明光亮度Ic,环境镜面反射光亮度KsIs和规则透射光亮度KtIt三部分组成,即:
I= Ic + Ks Is + Kt It (1)
Ic可利用Phong光照明模型计算,Is和It分别为从VP1的镜面反射方向 r 和规则透射方向t 向P1点辐射的光亮度,所以可以用求解I同样的方法来求解Is和It. 具体地,先从V出发通过象素e发射一根光线求得它与场景的最近交点P1,容易计算出P1点的局部照明光亮度Ic。为了计算整体环境向P1点发射的镜面反射光和规则透射光,从P1点出发向r方向和t方向发射两条光线求得它们与景物的交点Pr和Pt,如图2所示.
http://www.visualbomb.net/bbs/images/fileType/jpg.gif此主题相关图片
http://www.visualbomb.net/bbs/images/upload/2005/11/23/170547.jpg
计算Pr和Pt点向P1点辐射的光亮度Is和It,代入式(1)即可算出总的光亮度I. 注意在计算Is和It处的光亮度时,除了计算由于直接照射引起的局部光照明效果外,还考虑周围环境对这两点产生的整体光照明效果,于是需要继续从Pr和Pt点出发向相应r方向和t方向发射光线并重复上述过程,这就是光线跟踪. 因此, 重复这一过程,直到被跟踪的光线射出画面或跟踪深度达到给定层次时,停止发射光线. 考虑到被跟踪光线经过多次反射和透射后会衰减(由于Ks和Kt的作用),也可通过判别跟踪光线对显示象素光亮度的贡献是否小于一阈值来动态控制跟踪深度. 设颜色灰度等级为G (通常为255,m为所取阈值,那么凡是对显示象素光亮度I的贡献小于m个灰度级,或者说其贡献系数小于m/G的反射,透射光亮度都没有必要再计算下去.
这里演示一个最简单的光线跟踪算法的程序
如图,这是我为程序绘制的示意图,兰色假想为眼睛位置(0,0-600),黄色假想为灯光位置(100,100,-400),红色假想为球体位置(10,100,00),为了简单,只绘制零号球且未表达出Z坐标,但绘制比例是精确的
呵呵 先顶一下在认真看看 :lol :lol :lol :lol 看看:lol 支持C4D渲染不错谢谢
页:
[1]