Uniform Grid , KD-Tree , BVH 性能比较

来源:互联网 发布:淘宝设置不同价格 编辑:程序博客网 时间:2024/06/10 15:21

Ray tracing中,每条光线都需要和场景中所有的图元求交(这里我们假设所有的图元都是三角形)。Brute force的方法就是一点一点的遍历每个图元,然后找出与光线交点距离光线起始点最近的图元,当然这种方法的算法复杂度是O(N)的,对于少量的图元还可以,如果图元数量很多,光线跟踪的过程将非常慢。
事实上,大部分的图元距离光线都是非常远的,只有一小部分的图元有可能与光线相交,所以没有必要遍历所有图元。利用空间划分结构,可以快速的把无关三角形去除掉,从而只遍历很小的一部分子集,就可以找到最近的交点。其中比较常用的有Uniform grid,kd-tree,Bounding Volume Hierarchy (BVH)。
Uniform Grid,即均匀网格,就是把空间均匀划分,每个图元被分配到与其相交的所有节点中。注意这里一个图元可以被分配到多个格子中,而每个格子可能有多个图元在其中。这种分割方式的优势在于,实现起来非常简单,而且创建速度是最快的,把图元分配到格子中可以在O(1)的时间内搞定。然而,由于在创建过程中,对于空间中图元的分布没有任何的考虑,所以这种分割算法的遍历效率并不高。对于比较实际的场景而言,效率很可能会不好。比如,如果场景中的1%的空间中包含了90%的图元,这些图元很可能被分配到很少的几个格子里面。换个角度思考,每个格子会有很多的图元,从而当光线遍历过的时候,需要遍历90%的图元,效率是非常低下的。即如果场景中的图元分布不够均匀,均匀网格的遍历效率会有很大的问题。
KD-Tree,K-Dimensional tree,可以更好的适应空间中的不均匀分布的图元。在图元多的地方,kd-tree会相对分割细致一些,而图元少的地方,就会分割的粗糙一些。一般来说,kd-tree都是基于一种叫做sah的模型来分割的。有很多种不同的分割策略,其中在单线程的环境下,创建kd-tree的理论复杂度下限为O(N*log(N))。由于考虑的场景中的图元分布,kd-tree在遍历的过程中,有着很大的性能提升。然而,build一棵质量较优的kd-tree一般要很长时间(基于GPU的实时kd-tree创建算法已经被提出)。
BVH,层次包围盒。uniform grid和kd-tree都是相对于空间进行划分,然后把图元分配到不同的节点中。而bvh换了一种角度,它会划分图元,而不是空间。一个图元在bvh中只可能出现一次,而节点在空间中是可能有重叠的。bvh与kd-tree有很多的相似,但是也有一些特性,bvh的内存是有上限的,由于图元的数量不会因为划分而增长,所以需要开辟的空间是可以预先计算的,而节点的数量也不会超过2*N-1(N为图元的数量)。相对于kd-tree而言,bvh的创建过程会更廉价一些,但是遍历效率会低一些。
最近实现了下三种算法,算法的实现基本是学习pbrt的,不过pbrt的kd-tree的创建复杂度是O(N*log(N))的,而本文的算法实现是O(N*log(N))的(On building fast kd-Trees for Ray Tracing, and on doing that in O(N log N))
killeroo   uniform-grid(78/7551) kd-tree(390/8221) bvh(203/12620)
bunny      uniform-grid(640/6363) kd-tree(1154/4665) bvh(733/6428)
dragon   uniform-grid(608/81666) kd-tree(1545/60232) bvh(1170/115191)
(construction time/ray tracing time) (单位:毫秒)

上面的数据每个只测了一次,并不具有代表性,而且这里rt的绝对时间是没什么实际意义的,因为角度,光照,材质等都不相同。而空间划分结构的创建时间还是有意义的,可以看到,uniform-grid的创建时间很少,而kd-tree的创建代价是最大的,而效率相对来说高一些。这里需要说明的是,从上面的数据来看,似乎uniform-grid 比 bvh更有优势,但是上面的场景都只有一个模型,空间分布还算均匀,如果场景分布不均匀,均匀网格的效率会下降的非常快,而bvh不会有太大的影响。
本文简单介绍了下三种空间划分结构的基本特点,列出了一些简单的测试数据。需要实现的朋友,可以去sourceforge上下载:
http://sourceforge.net/projects/soraytrace/

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 登录页面点击登录窗口关不了怎么办 h5中的摇晃手机在电脑端怎么办 忘记手机锁屏密码怎么办4g qq最早绑定的号码忘记了怎么办 重启路由器之后宽带连接不上怎么办 微信授权小程序总是不行怎么办 微信把钱转到别人账户里了怎么办 微信转到对方账户停用了怎么办 微信号被认为是投票水军怎么办 微信投票时显示账号异常怎么办 京东商城买东西老不到货怎么办 优酷投屏一会就会出现花报怎么办 苹果手机的app安卓找不到怎么办 微信网页获取用户信息点了否怎么办 淘宝卖家退发货信息选择错了怎么办 法宣在线出现在其他地方登陆怎么办 QQ被冻结又不知道申诉资料怎么办 开通优酷会员了再开酷喵会员怎么办 考的不好时别人问你多少分时怎么办 订了产品一直收不到货怎么办 微信零钱提现忘记密码怎么办 微信里面的零钱忘记密码怎么办 微信的零钱密码丢了怎么办 微信公众号被屏蔽了所有功能怎么办 刚开淘宝店没信誉要怎么办 如果发现货品有问题商家不换怎么办 文件夹里面的图片怎么拖不动怎么办 网赌系统维护审核就不给提款怎么办 客户说我卖的东西是假货怎么办 微信小程序第三方平台倒闭了怎么办 金立手机锁屏密码忘了怎么办 不知道微信账号的公众号密码怎么办 微信公众号充话费充错号码怎么办 蜻蜓商城三天免流业务退不了怎么办 日上免税店提货日期写错了怎么办 微信公众平台账号名密码忘了怎么办 有人扬言要搞垮我的店铺怎么办 招行信用卡签到积分未领取怎么办 怎么办照片发送到邮微信箱里去 苹果手机备忘录没刪除就没了怎么办 因恶意刷公众号而被微信封号怎么办