Nuke

Shotgun Engine for Nuke

Nuke への Shotgun の統合
最新バージョン: v0.11.1 (製品)
バージョン番号は、セマンティック バージョニング基準に従っています。
システム名: tk-nuke

注: このドキュメントは、Toolkit の設定を管理するユーザのみが使用可能な機能について説明します。詳細については、『Shotgun 統合ユーザ ガイド』を参照してください。
概要
ドキュメント
      アプリ開発者向けの情報
            コンテキストのトラッキング
            カスタム ギズモを使用するアプリ
            ノードを作成するアプリ
      Hiero 内で Shotgun Engine for Nuke を使用する
            Hiero メニューの設定方法
                  現在のシーンという概念を必要とするアプリ
            アプリ開発者向けの情報
                  get_menu_selection()
                  HieroEngine.get_menu_category()
                  Hiero と連携するようにフックを設定する方法
                  メニュー イベントの確認にデバッグ ログを使用する
インストール、更新、開発
設定オプション

Shotgun Engine for Nuke は、Shotgun Pipeline Toolkit アプリと、Nuke、Hiero、Nuke Studio の橋渡しを行います。Nuke には PySide と Python の両方が含まれるため、このエンジンは、ほとんどのメニューとスタートアップを処理する比較的薄い層として機能します。エンジンのインタフェースには複数のメニュー ハンドルが表示されるため、アプリで Nuke のメイン メニュー、ノード、ペイン メニューに項目を登録することができます。

サポート対象のアプリケーション バージョン

この項目はテスト済みです。アプリケーション バージョン 7.0 - 11.1 で動作することが分かっています。最新のリリースでの動作は十分可能ですが、正式なテストはまだ完了していません。

概要ビデオ

次のビデオでは、特長と機能の概要について説明します。

ドキュメント

Shotgun Engine for Nuke には、Shotgun アプリと Nuke、Nuke Studio、および Hiero を統合するための標準プラットフォームが含まれています。軽量で操作性に優れており、たくさんの新しい項目を Nuke に追加できます。

Nuke に Shotgun メニューが作成され、さまざまな項目が表示されます。

Tank メニュー

Nuke に Shotgun ノード メニューが作成され、さまざまな項目が表示されます。

Tank メニュー

ファイル システムのさまざまな場所に簡単にジャンプできる Shotgun ショートカットをファイル ダイアログに追加します。

Tank メニュー

favourite_directories 設定を使用すると、現在の環境のテンプレート パスに基づいて独自のショートカットを追加できます。この設定は、リスト内の各項目が新しいお気に入りのディレクトリを表す、ディクショナリのリストを必要とします。次に、使用するフォーマットの例を示します(値として「""」と指定すると、アイコンを未指定のまま残すこともできます)。

::: yaml
  favourite_directories:
  - display_name: "Shot Publish Path"
    template_directory: "shot_publish_area_nuke"
    icon: "icons/custom_publish_icon.png"
  - display_name: "Shot Work Path"
    template_directory: "shot_work_area_nuke"
    icon: "icons/custom_work_icon.png"

「Shotgun Current Project」のお気に入りは、定義済みの各ルートに自動的に追加されます。project_favourite_name 設定を使用して名前をカスタマイズするか、値を空の文字列 '' に設定してお気に入りを無効にします。


注: 現在、CentOS 6.5 上で実行される Nuke 8.0 に限り、バグによって Toolkit の実行時に Nuke がクラッシュしてしまいます。他のバージョンの CentOS には影響ありません。Foundry はこの問題を認識しています(バグ 43766)。この問題が発生した場合は、当社までお問い合わせください。Nuke の今後の更新で解決されるまで、問題の回避をお手伝いします。

アプリ開発者向けの情報

コンテキストのトラッキング

Shotgun Engine for Nuke は、ファイルのロード時にコンテキストを自動的に切り替えます。ファイルをロードすると、エンジンがファイルを確認してからコンテキストを解決します。

カスタム ギズモを使用するアプリ

Shotgun Engine for Nuke を使用すると、カスタム ギズモを簡単に処理できます。カスタム ギズモを使用するアプリを作成する場合、gizmos と呼ばれるフォルダにドロップするだけで、エンジンがこの場所を Nuke のパスに自動的に追加します。

Nuke ギズモ

これでノード作成機能からギズモに簡単にアクセスできます。

  • nuke.createNode("WriteTank")

警告:ギズモの使用は便利ですが、シーン内で保持されるノードを作成する場合、一般的には適切な解決方法ではありません。その理由は、シーン内にギズモを配置するとすぐに、このシーンとギズモ コードの間に依存関係が生まれるためです。シーンのロードのたびに Shotgun Toolkit をロードする必要があるだけでなく、コードを更新するときにシーン内で使用されている古いギズモが分割されないように慎重に管理する必要もあります。

ノードを作成するアプリ

カスタム Nuke ノードを作成するアプリは慎重に作成する必要があります。シーンとギズモ コードの間に依存関係が必要になるため、ギズモを使用しないことをお勧めします。その代わりに、カスタム ノードを Nuke ファイルとして保存し、シーンに読み込みます。

    group_node_script = os.path.join(self.disk_location, "resources", "my_group_node.nk")
    group_node = nuke.nodePaste(group_node_script)

アプリ内からノードを呼び出すコードは、返されたインスタンスのみを使用できます。

グループ内からアプリを呼び出す必要があるコードは下位互換性を持つように慎重に処理する必要があります。次の手順をお勧めします。

アプリの起動時に、アプリ ハンドルを Nuke ネームスペースの一部として登録します。

    def init_app(self):

        nuke.tk_nuke_nameofmyapp = self

たとえば、グループ ノードにボタンがあり、一部の Shotgun アプリ コードを呼び出す場合、Shotgun Toolkit が見つからないときには故意に失敗するようにしてください。次のコードは、アプリが作成したグループ ノードに属している Python ボタン ノブに関連付けられたコードです。

# have to gracefully support the case when 
# sgtk is not in the system at all!
import nuke
try:
  app = nuke.tk_nuke_nameofmyapp
  app.do_something_v1(nuke.thisNode())
except:
  nuke.warning("Could not do XYZ! Most likely Sgtk is not currently active.")

アプリの動作を変更する場合は、アプリのコールバックでバージョン番号を最新にしておきます。これにより、アプリ コードは新旧両方の動作をサポートできます。

Hiero 内で Shotgun Engine for Nuke を使用する

Shotgun Engine for Nuke は、Hiero 内で実行される Shotgun 対応の統合にも使用されます。

アプリケーションの複数の場所に Shotgun アプリケーション アクションを配置できます(メイン メニュー バーの特定の Shotgun メニューと、別の Hiero パネルにあるさまざまな右クリック コンテキスト メニューの両方)。

Hiero メニューの設定方法

Hiero にはいくつかの異なるメニューがあるため、Maya や Nuke などよりも、メニュー項目の配置先を設定するオプションがたくさんあります。Shotgun Engine for Nuke の Hiero ワークフロー設定は次のようになります。

  tk-hiero:
    location: {name: tk-nuke, type: app_store, version: v0.6.9}
    debug_logging: false

    timeline_context_menu:
    - {app_instance: tk-hiero-openinshotgun, keep_in_menu: false, name: Open in Shotgun, requires_selection: true}

    spreadsheet_context_menu:
    - {app_instance: tk-hiero-openinshotgun, keep_in_menu: false, name: Open in Shotgun, requires_selection: true}

    bin_context_menu:
    - {app_instance: tk-multi-workfiles, keep_in_menu: false, name: "Shotgun Save As...", requires_selection: true}
    - {app_instance: tk-multi-workfiles, keep_in_menu: false, name: "Version up Current Scene...", requires_selection: true}
    - {app_instance: tk-multi-snapshot, keep_in_menu: false, name: "Snapshot...", requires_selection: true}
    - {app_instance: tk-multi-snapshot, keep_in_menu: false, name: "Snapshot History...", requires_selection: true}
    - {app_instance: tk-multi-publish, keep_in_menu: false, name: "Publish Project...", requires_selection: true}

    menu_favourites:
    - {app_instance: tk-multi-workfiles, name: Shotgun File Manager...}

ほとんどのエンジンには menu_favourites オプションがあります。これは、Shotgun のメイン メニューに配置する「ショートカット」を指定できるリストです。これとは別に、Hiero 固有の設定には次の 3 つの特別なセクションがあります。

  • timeline_context_menu は、タイム ライン エディタのクリップを右クリックすると表示されるメニューを表します。
  • spreadsheet_context_menu は、スプレッドシート エディタの項目をクリックすると表示されるメニューを表します。
  • bin_context_menu は、bin エディタの項目を右クリックすると表示されるメニューを表します。ここにはさまざまなプロジェクトとメディアがすべて表示されます。

これらのメニューに項目を追加するには、設定で定義する name フィールドとアプリがメニューに表示する内容が一致するようにするだけです。

現在のシーンという概念を必要とするアプリ

一部の Toolkit アプリには、既定のシーンまたはプロジェクトの概念が必要です。たとえば、スナップショット アプリは現在のシーンのスナップショットを作成する方法を把握しています。ただし、Maya や Nuke とは異なり、Hiero に現在のシーンという概念はありません。Hiero では複数のプロジェクトを同時に開くことができます。そのため、アプリがクリック対象のプロジェクトを理解できるようにするため、多くの場合フックに特別なロジックを追加することが必要になります。以降のセクションではこの仕組みについて説明します。

アプリ開発者向けの情報

Hiero には現在のプロジェクトという概念がないため、アプリが Hiero 内でクリックされた内容を簡単に確認できるようにするため、たくさんの強力なツールが追加されています。そのため、Shotgun Engine for Hiero には次の 2 つのメソッドが追加されています。

get_menu_selection()

最後にクリックしたメニューで選択された Hiero オブジェクトのリストを返します。このリストにはさまざまなタイプの項目が含まれます。どのメソッドで何が返されたのかを正確に確認するには、デバッグ ログをオンにします。これにより動作内容の詳細が出力されます。

返されるオブジェクトの例は次のとおりです。

list engine_object.get_menu_selection()

パラメータと戻り値

  • 戻り値: Hiero オブジェクトのリスト

最後にクリックして選択したオブジェクトを取得します。1 つのオブジェクトが選択されており、このオブジェクトが有効な Hiero プロジェクトであることを確認します。これは Hiero でプロジェクトの保存、ロード、またはパブリッシュ操作をトリガする場合などに役立ちます。

# get the menu selection from the engine
selection = engine_obj.get_menu_selection()

if len(selection) != 1:
    raise TankError("Please select a single Project!")

if not isinstance(selection[0] , hiero.core.Bin):
    raise TankError("Please select a Hiero Project!")

project = selection[0].project()
if project is None:
    # apparently bins can be without projects (child bins I think)
    raise TankError("Please select a Hiero Project!")

HieroEngine.get_menu_category()

最後にクリックしたメニューがある UI 領域を返します。このコマンドはあまり使用しないかもしれません。読み出し元のメニューに応じて異なる動作を求めるアプリ コマンドを使用する場合に必要になることがあります。

area_enum engine_object.get_menu_category()

パラメータと戻り値

次の定数の 1 つを返します。

  • HieroEngine.HIERO_BIN_AREA
  • HieroEngine.HIERO_SPREADSHEET_AREA
  • HieroEngine.HIERO_TIMELINE_AREA
  • None (不明または未定義の場合)

Hiero と連携するようにフックを設定する方法

通常、Hiero で設定したマルチ アプリでは、どのプロジェクトがクリックされているかを特定する必要があります。たとえば、tk-multi-workfiles アプリでプロジェクトの「Shotgun Save As」を実行する必要があるとします。そのため、ユーザが bin ビュー内のプロジェクトを右クリックして [名前を付けて保存](Save As)オプションを選択できるように、Hiero の bin メニューに Tank Save As コマンドを追加します。

エンジンの設定は次のようになります。

bin_context_menu:
- {app_instance: tk-multi-workfiles, keep_in_menu: false, name: "Shotgun Save As...", requires_selection: true}

ここでは、アプリ自体の各エンジンで保存やロードなどのシーン イベントを処理するフックを設定する必要があります。Maya や Nuke などのアプリケーションの場合、通常は保存やロードなどを実行するだけです。ただし Hiero の場合は、実際にクリックされたプロジェクトを見つけてから開始する必要があります。前述のフック コードの例は、次のようになります。

class SceneOperation(Hook):
    """
    Hook called to perform an operation with the
    current scene
    """

    def execute(self, operation, file_path, context, **kwargs):
        """
        Main hook entry point

        :operation: String
                    Scene operation to perform

        :file_path: String
                    File path to use if the operation
                    requires it (e.g. open)

        :context:   Context
                    The context the file operation is being
                    performed in.

        :returns:   Depends on operation:
                    'current_path' - Return the current scene
                                     file path as a String
                    'reset'        - True if scene was reset to an empty
                                     state, otherwise False
                    all others     - None
        """

        if operation == "current_path":
            # return the current script path
            project = self._get_current_project()
            curr_path = project.path().replace("/", os.path.sep)
            return curr_path

        elif operation == "open":
            # open the specified script
            hiero.core.openProject(file_path.replace(os.path.sep, "/"))

        elif operation == "save":
            # save the current script:
            project = self._get_current_project()
            project.save()

        elif operation == "save_as":
            project = self._get_current_project()
            project.saveAs(file_path.replace(os.path.sep, "/"))

        elif operation == "reset":
            # do nothing and indicate scene was reset to empty
            return True

        elif operation == "prepare_new":
            # add a new project to hiero
            hiero.core.newProject()

    def _get_current_project(self):
        """
        Returns the current project based on where in the UI the user clicked
        """

        # get the menu selection from the engine
        selection = self.parent.engine.get_menu_selection()

        if len(selection) != 1:
            raise TankError("Please select a single Project!")

        if not isinstance(selection[0] , hiero.core.Bin):
            raise TankError("Please select a Hiero Project!")

        project = selection[0].project()
        if project is None:
            # apparently bins can be without projects (child bins I think)
            raise TankError("Please select a Hiero Project!")

        return project

メニュー イベントの確認にデバッグ ログを使用する

特定の選択項目がクリックされた場合に Hiero から返されるオブジェクトを確認するには、エンジン デバッグ モードをオンにするだけです。スクリプト エディタで、各クリックで選択したオブジェクトの概要を取得します。

インストールと更新

Shotgun Pipeline Toolkit にこのエンジンを追加する

Project XYZ にこのエンジンを追加するには、asset という名前の環境で次のコマンドを実行します。

> tank Project XYZ install_engine asset tk-nuke

最新バージョンに更新する

この項目が既にプロジェクトにインストールされている場合に最新バージョンを取得するには、update コマンドを実行します。特定のプロジェクトに含まれている tank コマンドに移動し、そこでこのコマンドを実行します。

> cd /my_tank_configs/project_xyz
> ./tank updates

または、tank コマンドを実行し、プロジェクトの名前を指定して、更新チェックを実行するプロジェクトを指定します。

> tank Project XYZ updates

コラボレーションと発展

Shotgun Pipeline Toolkit にアクセスできる場合は、すべてのアプリ、エンジン、およびフレームワークのソース コードにも Github からアクセスできます。これらは Github を使用して格納および管理しています。これらの項目は自由に発展させてください。さらなる独立した開発用の基盤として使用したり、変更を加えたり(その際はプル リクエストを送信してください)、 いろいろと研究してビルドの方法やツールキットの動作を確認してください。このコード リポジトリには、https://github.com/shotgunsoftware/tk-nuke からアクセスできます。

特殊な要件

  • 上記の操作を行うには、Shotgun Pipeline Toolkit Core API バージョン v0.18.45 以降が必要です。

環境設定

以下に、使用するすべての環境設定の概要を示します。これらの設定は、このアプリまたはエンジンを有効にするための環境設定ファイルで定義する必要があります。

timeline_context_menu

タイプ: list

説明: タイムライン ビューのコンテキスト メニューに追加されるアプリを制御します。これはリストで、各項目は app_instance、keep_in_menu、requires_select、および name というキーを持つディクショナリになります。パラメータ app_instance は、環境設定ファイルで定義された特定のアプリ インスタンスにこのエントリを接続します。name はコンテキスト メニューに追加するメニュー名です。この項目をメイン メニューに追加する必要がある場合、keep_in_menu は true にします。requires_selection は、ビュー内の項目が何も選択されていない場合にメニュー項目を無効にします。

use_sgtk_as_menu_name

タイプ: bool

説明: 必要に応じて、プライマリ メニューの名前として「Shotgun」の代わりに「Sgtk」を使用します。

spreadsheet_context_menu

タイプ: list

説明: スプレッドシート ビューのコンテキスト メニューに追加されるアプリを制御します。これはリストで、各項目は app_instance、keep_in_menu、requires_select、および name というキーを持つディクショナリになります。パラメータ app_instance は、環境設定ファイルで定義された特定のアプリ インスタンスにこのエントリを接続します。name はコンテキスト メニューに追加するメニュー名です。この項目をメイン メニューに追加する必要がある場合、keep_in_menu は true にします。requires_selection は、ビュー内の項目が何も選択されていない場合にメニュー項目を無効にします。

menu_favourites

タイプ: list

説明: メイン メニューのお気に入りセクションを制御します。これはリストで、各メニュー項目は app_instance と name というキーを持つディクショナリになります。パラメータ app_instance は、環境設定ファイルで定義された特定のアプリ インスタンスにこのエントリを接続します。name はお気に入りを作成するためのメニュー名です。

favourite_directories

タイプ: list

説明: ファイル選択でお気に入りセクションに項目を追加します。

launch_builtin_plugins

タイプ: list

説明: Maya の起動時にロードする tk-maya プラグインのカンマ区切りリストです。この機能を使用すると、Maya の起動時に Toolkit をブートストラップするための従来のメカニズムが無効になります。

compatibility_dialog_min_version

タイプ: int

既定値: 10

説明: アプリケーションの特定のメジャー バージョンがまだ完全にサポートされておらず、Toolkit でのテストが完了していない場合、警告を表示する最小バージョンを指定します。テスト中のバージョンについては警告ダイアログを無効にする場合、この値を現在のメジャー バージョン + 1 に設定することをお勧めします。

bin_context_menu

タイプ: list

説明: bin ビューのコンテキスト メニューに追加されるアプリを制御します。これはリストで、各項目は app_instance、keep_in_menu、requires_select、および name というキーを持つディクショナリになります。パラメータ app_instance は、環境設定ファイルで定義された特定のアプリ インスタンスにこのエントリを接続します。name はコンテキスト メニューに追加するメニュー名です。この項目をメイン メニューに追加する必要がある場合、keep_in_menu は true にします。requires_selection は、ビュー内の項目が何も選択されていない場合にメニュー項目を無効にします。

debug_logging

タイプ: bool

説明: デバッグ メッセージをロガーに送信するかどうかを制御します。

automatic_context_switch

タイプ: bool

既定値: True

説明: ロード中のファイルを変更するたびに、Toolkit がその内容を自動的に調整する必要があるかどうかを制御します。既定値は True です。

project_favourite_name

タイプ: str

既定値: Shotgun Current Project

説明: ファイル選択で現在のプロジェクトのルートを表すお気に入りのディレクトリの名前をカスタマイズすることができます。たとえば、「Shotgun Current Project」などに設定できます。マルチルートの設定では、「Shotgun Current Project (secondary)」などの各ルートに対してエントリがあります。空の文字列を指定すると、このメニューがお気に入りに自動的に追加されなくなります。

フォローする

0 コメント

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