エンジンの開発

エンジン開発

エンジン開発はどのように行われ、アプリケーションと Toolkit を統合する場合には何が必要になるのでしょうか? このドキュメントでは、エンジン開発に関して寄せられるいくつかの基本的な質問を取り上げます。

はじめに

このドキュメントでは、Toolkit のエンジンの開発に関するいくつかの技術的詳細について簡単に説明します。エンジンを開発する場合は、ホスト アプリケーションと、エンジンにロードされている各種のアプリケーションおよびフレームワークの間で効果的にブリッジを確立します。エンジンを使用するとアプリケーション間の相違を抽象化することができるので Python と QT を使用してアプリケーションを簡単な方法で作成できるようになります。

エンジンはファイルのコレクションで、構造としてはアプリに似ています。エンジンには engine.py ファイルがあり、これは Tank Core Engine の 基本クラス から派生する必要があります。その後、別のエンジンが内部の複雑さに応じてこの基本クラスの各種の側面を再実装します。エンジンには、主に次のような機能があります。

  • 基本クラスは各種の初期化および破棄メソッドを公開します。これらのメソッドは、起動プロセスのさまざまなポイントで実行されます。メソッドをオーバーライドして、起動とシャットダウンの実行を制御できます。
  • エンジンには、アプリによって登録されているすべてのコマンド オブジェクトを含む commands ディクショナリがあります。これは通常、メニュー項目が作成されるときにアクセスされます。
  • エンジンが QT を実行する方法が基本クラスの既定の動作ではない場合、UI ダイアログとウィンドウを表示する方法をオーバーライドすることができます。

エンジンは通常、次の処理を行う必要があります。

  • メニュー管理。エンジンが起動され、アプリがロードされたら、エンジンは Shotgun メニューを作成し、このメニュー内にさまざまなアプリを追加する必要があります。
  • ログ メソッドは通常、アプリケーション ログに書き込むよようにオーバーライドされます。
  • UI メソッドは通常、Toolkit アプリケーションによって起動されたウィンドウと、基本となるホスト アプリケーション ウィンドウ管理のセットアップがシームレスに統合されるようにオーバーライドされます。

エンジンは、Tank Core Platform により、stgk.platform.start_engine() コマンドを使用して起動されます。このコマンドは、設定ファイルの読み込み、エンジンの起動、すべてのアプリのロードなどを実行します。エンジンの目的は、起動された後、アプリとの一貫した Python/QT インタフェースを提供することです。すべてのエンジンは同じ基本クラスを実装するので、アプリは、たとえば UI を作成するためにエンジン上でメソッドを呼び出すことができます。これらのメソッドを実装して、ホスト アプリケーション内で正常に動作するようにすることは、各エンジンに委ねられます。

エンジン統合へのアプローチ

ホスト アプリの機能によっては、エンジン開発が多少複雑になる場合があります。このセクションでは、これまでの開発プロセスで見られたいくつかの異なる複雑さのレベルについて説明します。

QT、PyQt/PySide および Python が含まれているホスト アプリケーション

これは Toolkit を設定する最善の方法であり、QT、Python および PySide をサポートするホスト アプリケーション上にエンジンを実装する方法は非常に簡単です。nuke engine はこの良い例です。統合とは、実際にはログ ファイル管理に接続して Shotgun メニューを設定するためのコードを記述することです。

QT および Python が含まれているが PySide/PyQt は含まれていないホスト アプリケーション

アプリケーションのこのクラスには、たとえば MayaMotionbuilder が含まれていて、統合は比較的簡単です。ホスト アプリケーション自身は QT で書かれ、Python インタープリタを含んでいるので、PySide または PyQt のバージョンをコンパイルし、エンジンとともに配布することができます。この PySide は Python 環境に追加されるため、Python を使用して QT オブジェクトにアクセスすることが可能になります。一般に、PySide をコンパイルするときは、正常な動作を保証するために、ショット アプリケーションをコンパイルしたときに使用したものとまったく同じコンパイラ設定を使用する必要があります。

Python が含まれているホスト アプリケーション

このクラスには Houdini および Softimage が含まれています。これらのホスト アプリケーションには QT 以外の UI がありますが、Python インタープリタが含まれています。これは、Python コードを環境の内部で実行できることを意味しますが、既存の QT イベント ループは実行していません。この場合、QT と PySide をエンジンに含める必要があり、QT メッセージ ポンプ(イベント)ループは UI のメイン イベント ループに接続する必要があります。ホスト アプリケーションには、これを正確に実行するための特殊なメソッドが含まれている場合があります。含まれていない場合、QT イベント ループが、たとえばアイドル時呼び出しを介して定期的に実行されるように調整が必要です。

Python が含まれていないが、プラグインを書き込むことができるホスト アプリケーション

このクラスには Photoshop が含まれています。Python スクリプティングはありませんが、C++ プラグインを作成することができます。この場合、IPC レイヤを含むプラグインを作成し、起動時に QT と Python を別のプロセスで起動するという方法がしばしば用いられます。セカンダリ プロセスが実行状態になると、IPC レイヤを使用してコマンドが送受信されます。通常、このタイプのホスト アプリケーションは、エンジンのソリューションを機能させるために多くの労力を必要とします。

スクリプト機能を提供しないホスト アプリケーション

どんな方法でもホスト アプリケーションにプログラムを介してアクセスできない場合は、そのホスト アプリケーションのためのエンジンを作成することはできません。

QT ウィンドウのペアレント化

一般に、ウィンドウのペアレント化には特別な注意が必要です。通常、PySide ウィンドウはウィジェット階層内に自然の親を持たないため、明示的に呼び出す必要があります。ウィンドウのペアレント化は、一貫性のあるエクスペリエンスを提供するために重要です。実装されていないと、Toolkit アプリ ウィンドウがメイン ウィンドウに隠れてしまい、非常に見にくくなります。

ホスト アプリケーションの推奨機能リスト

Toolkit エンジンは、次のようなホスト アプリケーションの特性を活用できます。対応可能な項目が多いほど、エンジンのエクスペリエンスが向上します。

  • Python インタープリタ、QT、PySide が組み込まれていること。

  • アプリケーションの起動/初期化時にコードを実行する機能。

  • アプリケーションを起動して実行しているときと、UI が完全に初期化されたときの 2 つの時点で、コードのアクセスと自動実行が可能であること。

  • ファイルシステムのインタラクションをラップする API コマンド: Open、Save、Save As、Add reference など。

  • UI 要素を追加するための API コマンド

    • カスタム Qt ウィジェットをパネルとしてアプリに追加する(バンドルされた PySide 経由が理想)
    • カスタム メニュー/コンテキスト メニュー項目の追加
    • ノードベース パッケージのカスタム ノード(インタラクションのための独自の UI を簡単な方法で展開できます)
    • 選択した項目またはノードなどを取得するイントロスペクション
  • 柔軟なイベント システム

    • 「関心を引く」イベントがカスタム コードをトリガする場合がある
  • UI の非同期実行のサポート

    • たとえば、インタフェースをロックしないカスタム メニュー項目がトリガされたときにダイアログを表示する
    • カスタム UI ウィンドウが正しくペアレント化されるように、トップ レベル ウィンドウへのハンドルを提供する
フォローする

0 コメント

ログインしてコメントを残してください。