Created on | Updated on
フォローする

Maya MMeshIntersector と memory

MMeshIntersector::create(MObject &meshObject, const MMatrix &matrix)のドキュメントでは、 「このメソッドは、intersectorに必要なデータを作成します。必要な場合だけ呼ばれるべき重い操作です。」となっています。内部に、もしメッシュテッセレーションされていない場合、そのクラスはメッシュをテッセレーションし、三角形のための八分木を構築するでしょう。それらはメッシュ自体と少なくとも同じくらい重く、恐らくより重いでしょう。

けれども、Mayaでmesh intersectionを行うための3つの方法が存在します:

まず、MFnMesh::intersect() はスレッド化されておらず非常に遅いです。しかし、メモリ・オーバーヘッドがありません。

次に、MFnMesh:closestIntersection()はグリッドに基づいた交差を使用し、非常に小さなメモリ・オーバーヘッドで非常に速い。スレッド対応していないが、高速です。

3つ目のMMeshIntersectorは高速ですがメモリを消費する八分木を使用しています。主な利点は、完全にスレッド対応していることです。

私の経験から、グリッドベースの交点がうまく動作しますが、実際は、同じオブジェクトのイテレーションテストを行うことをどれくらい頻繁に計画し、オブジェクトはどれだけのポリゴンを持っているか、また、あマルチスレッディングを利用することができるかに依存します。

メモリのオーバーヘッドを制限したい場合、グリッドベースのアプローチは、使用量の面で非常に洗練されていると思います。

私は、octreeがより大きなジオメトリ上で大きくなりえることを知っています。

 

 

元の記事は下記ページになります。

http://around-the-corner.typepad.com/adn/2012/07/maya-mmeshintersector-and-memory.html