摘要: 该伪代码总结了光线追踪算法。 Function Raytrace(Scene World){ for(each pixel of the image) { Calculate the ray corresponding to the pixel (projection); Pixel color=trace(ray,0); ... 阅读全文
posted @ 2012-05-27 23:13 Cavia 阅读(2024) 评论(0) 推荐(0) 编辑
摘要: 问题:1、性能算法的递归性质和大数目的追踪光线,渲染过程可能持续数小时。80-90%的渲染时间花费在计算光线和物体交点上。2、走样3、尖锐的阴影基本的光线追踪算法只能得到尖锐的阴影(因为模拟的是点光源)。4、局部光照和着色算法只追踪少数目的光线,只有四种类型的光线被考虑在内,物体之间的漫反射光没有被考虑在内,即算法并不包括全局光照。解决方案:1、性能a、使用更多或者更好的硬件b、大规模并行计算每一个光线都相互独立。将图像分割,分配在多核上或者分布式网络上;或者分配在多个线程上。c、限制交点检测的数目使用包围盒的层次关系。快速判断光线是否和一组物体相交。物体被分组在封闭的包围盒中。利用空间细分技 阅读全文
posted @ 2012-05-27 16:50 Cavia 阅读(5276) 评论(0) 推荐(0) 编辑
摘要: 1、主光线(Primary rays)从camera发出的光线。2、阴影光线(Shadow/Light rays)从交点发出的光线,指向光源。如果这条光线在指向光源之前不相交于任何物体,则这个光源对该交点有贡献值;否则,该交点位于该光源的阴影处。3、反射光线(Reflection rays)如果物体表面具有反射性质,则部分光将会被反射出去,继续在场景中前进。根据Snell定律,一条新的光线将会从交点发出。4、折射光线(Refracted rays)当物体表面具有折射性质并且部分透明,部分光线将会进入物体继续传播。根据Snell定律,一条新的光线将会从交点发出进入物体。 阅读全文
posted @ 2012-05-27 15:40 Cavia 阅读(2978) 评论(0) 推荐(0) 编辑
摘要: 实际上叫反向光线追踪(backward raytracing),因为计算是从camera开始发射光线,而不是从光源发射光线。反向光线追踪步骤:1、camera的胶片被分成离散的网格(即像素点),我们的目标是确定每一个像素点的颜色值。2、对于每一个像素,从camera位置追踪一条光线,指向该像素点3、对于这束光线,判断其是否和场景中的物体相交。如果相交,则转到步骤4;否则,将背景色填充到当前像素中去,回到步骤2,继续处理下一个像素。4、如果光线和物体相交,计算物体表面交点的颜色值。该点的颜色值即为该像素的颜色值。a、首先检查每个光源在该交点的贡献值。追踪一条新光线去光源,用来确定交点是被全部照亮 阅读全文
posted @ 2012-05-27 15:16 Cavia 阅读(18188) 评论(0) 推荐(1) 编辑