AABBTreeを組み込んで、レイトレでポリゴン描画

2010-02-07

AABB tree

レイトレでポリゴンモデルを扱いたかったので、いままでやったことなかったBVH(Bounding Volume Hierarchy)を組み込んでみた。 BVHの中でも、AABBTreeは単に軸に平行なバウンディングボックスなので構築もレイとの交差判定も楽。参考はDirtypunk’s Column - Issue 05 - AABB Trees - Back To Playing With Blocks。 ノードの分割は「ヒューリスティックでうまい具合にやってね」とのことなんで、適当に長軸でソートしてバランスするように分割してみた。 ポリゴンが均一に大体同じ大きさに割られているモデルの場合これでいけそうな気がする。

  • 描画:450x338で36.382秒
    • うち、AABBTreeの構築に26.448秒
  • モデル:DRAGON
    • ハイポリ 87万1414トライアングル、43万7645頂点
    • PLYファイルで頂点法線がないので、フラットポリゴン
    • むしろ、Processingでこのサイズのデータを描画できたことに驚いた。
    • AABBTreeのノードは1トライアングルまで分けてるので、ノード数=要素数×2-1
    • ノード情報:{24(AABB)+8(childptrx2)+4(leafptr)} * (871414(頂点) * 2 - 1) = 62,741,772 (59.8M)
    • トライアングル情報:{(4(座標ベクトルへのptr) + 4(法線ベクトルへのptr)) * 3(頂点)} * 871414(トライアングル) = 20,913,936 (19.9M)
    • 頂点座標:{3(xyz) * 4(float)} * 437645(頂点) = 5,251,740 (5.0M)
    • 面法線:{3(xyz) * 4(float)} * 871414(トライアングル) = 10,456,968 (10.0M)
    • +ベクトルもノードも全部newなので、そのオーバーヘッド(x1.5くらい?)
  • 謎のドットノイズが

マテリアルとかテクスチャとか入れてもっとキャッチーなモデル、はちゅねミクとか出したいな