こんにちは、ビッグデータや機械学習とhoudiniの3Dモデリングを結び付けたい🌵ヨセミテ🌵です。レディ・プレイヤーワンの広大なVR世界、法則に基づいた3Dオブジェクトの自動生成技術なら将来実現できそうですね。
今回はAPIのわりかし実用的な内容です。最近Mayaスクリプトで新しい事試して無いのでテストしたい内容が特に無いからですが☕
■カメラに表示されているオブジェクトを取得する
cmdsライブラリだけでカメラに表示されているオブジェクトを取得しようとすると色々な表示マスクが存在しており、また作業者の方は各々自分なりの表示方法で作業していたりするので案外と大変です。
MayaAPIにはカメラに表示するオブジェクトを選択するという便利な関数があります。
MGlobal.selectFromScreen(X始点, Y始点, X終点, Y終点, 選択モード)
カメラの表示範囲内の座標を指定できるようなので矩形選択ツールなどで利用されているのでしょう。ただ、この関数maya2018時点だとAPI2.0に実装されていません。なのでこの関数を利用したい場合はAPI1.0からの利用になります。
シンプルですがcmdsプラグインとして実装すればスクリプトを利用して作業しているアーティストに便利かなと思います。
■Rayでメッシュに対する衝突判定を行う
MFnMeshクラスは沢山機能がありますが今回は用途が多そうなMaya内でのRayによる衝突判定機能です。Ray判定ってメッシュ側で処理するんですね。
OpenMaya.MFnMesh.allIntersections(始点, 方向, 座標空間, 距離, 裏の取得有無)
これで実装時にカメラに表示されていないメッシュ削減とかもできそうです。
モード切替の引数も多くて、利用したことがあるのがフェースID取得までなので後半のパラメータの用途はいまいちよくわかっていませんがこの関数だけで色々パラメータが取得できます。
スクリプトをテストする場合はcamera1の作成をお願いします。
■頂点座標とUV座標の位置対応
効率化の対象となりがちなUV処理。
MFnMesh.getUVAtPoint(位置,座標空間の指定)
MFnMesh.getPointAtUV(フェース番号, U位置, V位置, 座標空間の指定)
UV位置とワールド位置を変換します。これも色々な用途に使えるかと思います。
スクリプトをテストする場合は内部で指定されているフェース番号に該当する点が存在しない場合エラーが出てしまうのでご注意下さい。
Mayaのこと書いといてなんですが最近Houdiniしか触ってません。みなさんの豊かなHoudiniライフを祈っております。
では🍄