たらちゃんの知恵箱

CGに関するちょこっとテクニカルなブログ

MayaでHoudiniの【 PointFromVolume 】,【 scatter 】ノードを再現。

Houdini 触ってると Maya で同じようなことは出来ないかな?と考えることがあります。(仕事で Houdini 使えないこともあるので、、(; ・`д・´))

今回は Houdini でも頻繁に使用する scatter ノード、いわゆるポイントの大量配置をMaya で再現しました。 

 

大量配置の機会というのはCGでは頻繁にあります。

少し前まではParticle、またはフリープラグインのSOuP(今は有料(; ・`д・´))でやってましたが、今ではMASH, XGen等、デフォルト機能でも選択肢は増えました。

 

なので今回紹介するスクリプトを今更使う機会はとくにありません。。

ありませんが!、例えば Houdini では便利ノードがすでに沢山用意されていて、大量配置なんかは scatter ノード使えば一瞬です。

しかし、そういった便利ノードは諸刃の剣で、何故そうなるかという仕組みを理解出来てないと他のソフトで応用が効かないというデメリットもあります。

逆に大量配置のアルゴリズムを知っていれば、どんなソフトでも自分で実装することが出来ます。

そういったソフトにとらわれないコアな知識を身に着けるのが大事だと思ってます。

 

今回はメッシュの内部、または表面のポイントを取得するのが目的です。そのための手順は以下の通りです。

  1.  メッシュのバウンディングボックスを取得。
  2. バウンディングボックス内のポイントの数と位置を計算。
  3. 計算したポイントからレイを飛ばし、飛ばしたレイが奇数の場合はメッシュの中、偶数の場合はメッシュの外と判定。

3.で説明したメッシュの内外判定は以下の画像が分かりやすいかと思います。

(図の〇3, 〇4のレイも厳密には2回当たってます。)

f:id:pusan00:20180825233315p:plain

アルゴリズムが出来ればあとは実装するのみです。

Maya API 2.0 の MFnMesh クラスには 【allIntersections】という機能がありますので、こちらを利用します。こちらでレイの衝突判定を行います。

【Maya Python API】Houdini の 【 PointFromVolume 】,【 s ...