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