特定の数値( float など)のアトリビュートの注釈をビューポート上に表示したくなり、
通常の注釈 (annotation)ノードでやろうと思ったんですが、
数値のアトリビュートを string のアトリビュートには繋がせてくれません…
検索しても、floatToString するようなノードプラグインでやっている方もいました。
きちんと 文字列 + 数値 を注釈として表示するにはその方法しかないですが、
わざわざプラグイン化してしまうと使用範囲によってはめんどうになったりするので、
どうにか標準機能の中で表示できるようにできないかを検証しました。
この記事は Maya Advent Calendar 2023 シリーズ2 の14日目の記事です。(書いたのは 12/24 ですが)
シリーズ1の前日は @9boz さんの「mayaのプレイブラストをffmpegでmp4にしてみる2」、
当日は @cr_coyote さんの「スクリプトでAnimCurveをフィルタリング!」、
翌日は @9boz さんの「Mayaで ファイルを開かずにreferenceしてるファイルを知りたい」です。
シリーズ2の翌日は @9boz さんの「mayaでボクセルっぽいものを生成」です。
今回は OpenMaya API 2.0 の Message 系クラスにある様々なコールバックのタイミングについてまとめていこうと思います。
※ Message 系のコールバック = maya.cmds にある scriptJob と似たようなもの
この記事で紹介している Message は
・MCameraMessage
・MObjectSetMessage
・MDGMessage
・MModelMessage
で、Maya 2022.5 で検証したものです。
Message 系クラスは他にもたくさんあるので、徐々に紹介できたらいいなと思い、
記事のタイトルの末尾に 1 とつけています。
近いうちに、とは思いつつ来年の Advent Calendar で書いている未来が見えますが…
ちなみに2020年に「【Maya/Python】OpenMaya API2.0 の MSceneMessage クラス内のコールバックタイミング解説」という記事も書いておりますのでご興味あればご覧下さい。
※この中で MSceneMessage の addCheck~ 系が API2.0 だとエラーになると書いていましたが、登録する関数側の書き方の問題( return True/False を書いてなかったのがエラーの原因 )だという事に少し前に気付いたので追記しています。
これは Maya Advent Calendar 2022 の最終日25日目の記事です。
前日は tm8r さんの「Maya2023でハマったこと」です。
今回は、Maya Advent Calender 2019 で書いた OpenMaya PythonAPI 2.0 逆引きメモ のパート 2-2 を書いていきます。
これは Maya Advent Calendar 2022 の17日目の記事です。
(25日目の記事だけ書こうと思ったら予想より長くなるものがあり、17日分が空いていたので急遽記事を分割しました。)
前日は tm8r さんの「【Maya】相互リファレンス覚書」で、
翌日は 9boz さんの「ワイヤーフレームが黒くなる」です。
今回は、Maya Advent Calender 2019 で書いた OpenMaya PythonAPI 2.0 逆引きメモ のパート2-1 を書いていきます。
これは Maya Advent Calendar 2020 の23日目の記事です。
明日は ti_ni_ta さんです。
今回は少し前に modelPanel の上部にあるボタンの1つをスクリプトから切り替えたいと思った時に、
1つ調べたら他のボタンもまとめて方法が分かったので備忘録的に書いておきます。
(処理している mel が分かれば、mel バージョンはそこに全部書いてあるレベルの記事です)
昨日に続き Maya Advent Calendar 2020 の20日目の記事です。
明日は tanakou829 さんです。
今回はタイトルにあるように Maya から Unity へUVアニメーションをエクスポートするための記事です。
実は2016年にも一度「【Maya/Unity】MayaからUnityにUVアニメやカラーアニメを持っていくスクリプト」という記事を書いていました。
ただ今見返すと力技過ぎてスマートではないので、改めて書いてみようと思いました。
これがきっかけの1つ目です。
2つ目としてはセガさんの2年前に「MayaからUnityへのUVアニメーションエクスポート
」という記事がありました。
こちらは C++ を使われているのでハードル高そうに感じる方もいらっしゃるだろうと思うので、
Python を使ったサンプルを作ってみようかなと。
※セガさんの記事では FBX SDK を使われていますが、こちらの記事では使っていません。
Python版の FBX SDK もあるようなので、そちらを使えば MSceneMessage.addCheckFileCallback() から
渡される MFileObject から書き出し後のFBXのパスを取得する事で FBX 自体を直接編集できると思います。
しかし、FBX SDK を触ったことがなく今回時間がなかったため、(余裕ができたら試します)
書き出し後に追加したアトリビュートを削除したり、新しいアニメーションノードを作らず
place2dTexture に接続されているものを流用してシーンをなるべく汚さないオプションを付けています。
解説しているファイルはこちらのリポジトリにあります。
試される場合は kkUvAnimationExport.py を Maya の Plugin のパスが
通っている所(よく分からない場合は C:\Program Files\Autodesk\Mayaバージョン\bin\plug-ins )に、
UvAnimPostprocess.cs を Unity のプロジェクトのどこかに Editor フォルダを作ってその中に、
それぞれコピーして下さい。
※使用にされた際に不具合が出ても責任は取れませんので自己責任でお試し下さい。
2023/12/14 訂正を追記
addCheckCallback と addCheckFileCallback の部分で、API2.0 の方だとエラーが出て処理されないと書いていましたが、自分がドキュメントをきちんと読めておらず、コールバックで実行する関数内で return True or False が書かれていれば問題なく処理が行われました。
addCheck ~ と関数名にもある通り、読み込みや書き出し前のチェックで使うためのコールバックで、そこで実行される関数内で任意のチェック処理を入れ、そこで問題があった場合に return False をすることで処理しようとしていた読み込みや書き出しを中断する事ができるようにする仕組みでした。
この記事は Maya Advent Calendar 2020 の19日目の記事です。
明日も自分の記事で「【Maya/Python】MayaからUVアニメーションをUnityへエクスポートする」です。
今回は OpenMaya API 2.0 の MSceneMessage クラスにある様々なコールバックのタイミングについてまとめていきます。
maya.cmds にある scriptJob と似たようなものですね。
ちなみに今年の2月にも MSceneMessage を使った「【Maya/Python】インポート時に追加されたノードを選択状態にする」という記事も書いていますのでご興味あればご覧下さい。
MSceneMessage についての公式のリファレンスページはこちらです。
検証に使っているのはMaya2019です。
自分は4月頭くらいから在宅勤務になっています。うちはまだもう少し続きそうな気配ですね。
皆さんのところはいかがでしょうか?
今回はそんな制作環境が変わったりなどした時に、
Maya内のウィンドウが画面外に行ってしまいどうしようもない状況を解決するものです。
Maya標準のウィンドウだけであれば、
下記のリンクのAriさんのこちらの記事【MEL更新】ウィンドウの位置をリセット 新Mayaに対応 のmelや、
ワークスペースのリセットなどで戻す事ができます。
ただ他のユーザーの方々がPySideで作られたウィンドウはこれらでは画面内に戻せないと思います。
(僕の勘違いだったらご指摘下さい。)
今回は特にあまり説明することないので早速コード貼り付けてきます。
ScriptEditorのPythonタブにまるまるコピペして実行するか、
もしくはこちらからDLしてScriptsフォルダに置いてもらって
この2行をScriptEditorなどで実行してみて下さい。
ちなみに実行された時のモニターの中心にウィンドウが集まります。
例えば、2画面でモニター1にMaya・モニター2にScriptEditorがある状態で、
ScriptEditorから実行するとモニター2の中心に集まり、
MayaのShelfに登録して実行するとモニター1の中心に集まります。
※自分はMaya2019で試しましたが、他のバージョンでも大丈夫だと思います。
※使用にされた際に不具合が出ても責任は取れませんので自己責任でお試し下さい。
以前ここでも、内部で使われている performFileAction.mel を書き換えてインポート時に追加されたノードを選択状態にする方法を書きました。
(【Maya/MEL】インポート後に読み込んだノードを選択させる方法)
しかし、その方法はMayaのバージョンによってその内部のスクリプトの処理が変わる可能性もあり、
その場合そのまま古いバージョンのものを使うと処理が変わってしまったり、もしくはまた書き直す必要が出てきたりします。
そこで今回は昨年末に書いた「【Maya/Python】OpenMaya PythonAPI2.0 逆引きメモ」の番外編のようでもありますが、OpenMayaの MSceneMessage を使ってその処理を書いてみました。
(※MSceneMessageの自体の使い方はまた今度まとめて書く予定です。)
これは Maya Advent Calendar 2019 の最終日25日目の記事です。
前日は cr_coyote さんの「ブレない伸びーるSplineIKリグを作ってみる」です。
当初スクリプトからマテリアルまわりの取得&操作を書こうと思っていましたが、
2016年のMayaのAdventCalendarで mono-g さんがすでに「Mayaのマテリアルのこねこね」を書かれていて、
自分の知ってる範囲内のマテリアルまわりの知識だとそんなに書くことなさそうだったので、
OpenMaya PythonAPI2.0 を使った基本的な処理の逆引きメモにしてみました。
OpenMaya自体の事は 一番下の参考サイトのところに書いている AREA JAPAN というサイト中で
Autodeskの築島さんが書かれた記事を読まれてるといいかもしれません。