この記事は Maya Advent Calendar 2025 シリーズ1 の16日目の記事です。
前日のシリーズ1は @inouwe さんの「MayaにMetaHumanを持ってくる【UE5.7】」で、シリーズ2は @9boz(kubo) さんの 「Mayaのカメラを何とかしたい6 ~大判解像度の算出~」です。
今回は以前自分が書いた「【Maya/Python】選択したオブジェクト名をディスプレイ上に表示するプラグインを作ってみた」や「【Maya】数値アトリビュートの注釈をビューポート上に表示する」に続いて、ビューポート上に文字を表示する際に PySide の QLabel を使って描画してみる方法についてです。
以下がそのスクリプトです。
最初に書いておきますと、 このサンプルは maya.api.OpenMayaUI の MUiMessage.add3dViewPostRenderMsgCallback() を使用してビューポートの描画後のタイミングで毎回選択しているオブジェクトの座標をワールド座標からスクリーン座標に変換して QLabel を作り直しているため、思っていたよりもかなり処理速度は遅いです…
調べてみたきっかけは annotationNode を使ってシーンを汚したくもないし、かといって以前書いた「選択したオブジェクト名をディスプレイ上に表示するプラグインを作ってみた」の時のように専用プラグインノード化もするほどではないなぁ~という場合に、なにか簡単に情報をビューポート上に出せないかなと思ったことでした。
※ プラグイン化しなくていいように~と調べたのに、結局サンプルとして用意していたらプラグイン化しないといけなかったというオチ
しかし、上でも書きましたが今回の方法は処理速度が遅いので、選択しているオブジェクト名を表示するのには向いてませんでした。(メモリは食いますが、一度生成した QLabel を Transform ノード毎に保持しておいて、表示非表示と移動だけほんの少し早くなるかも?)
そのため、直接的な実用性はほぼないですが、プラグイン化せずに任意のスクリーン座標に QLabel で何か情報を描画したい場合に使えるかもしれません。
お手軽にディスプレイ上に情報を出す系でいうと、他にも cmds の headsUpDisplay コマンドもありますね。
このコマンドの場合は表示できる大まかな場所が決まっちゃっていますが、出したい情報次第ではこれでもいいと思います。
一応下記のサンプルでやっている流れを書いておきます。
om2.MModelMessage.kActiveListModified のコールバックを使って、選択が変更されるたびに selectionChange() を呼ぶ。
selectionChange() 内で アクティブなパネル(ビュー)を取得して、
om2u.MUiMessage.add3dViewPostRenderMsgCallback にそのパネル名とパネルの描画後に実行させたい updateLabelPosition() をセットします。
updateLabelPosition() 内で毎描画後にそのときに選択しているオブジェクトを取得して、それらのオブジェクトのワールド座標からスクリーン座標に変換します。
そのスクリーン座標の位置に QLabel を生成して、それぞれのオブジェクト名を表示しています。

コメントをお書きください