NukeのPluginを作ってみる
2015/2/10
皆さん、お久しぶりです開発部の山口です。
そろそろNukeのPluginでも作ってみたいなとか思い始めたので
今回はそれをネタに書き進めたいと思います。
Welcome to the NDK Developer Guide Nuke8.0
まず始めに
プラグイン開発といえばNukeのSDKが必用ですが、すでにNuke Development Kitということで
NDKという名前でインストールされていますので、それを使用します。
※今回の説明で使用するNukeのバージョンは”8.0v5″です。
NDKは以下の場所にありますので探してみてください。
・”Nukeインストールディレクトリ”\Nuke8.0v5\Documentation\NDK
※例: C:\Program Files\Nuke8.0v5\Documentation\NDK
この中のファイルを直接修正してもいいのですが、元のファイルはそのまま
残しておきたいので、NDKフォルダごと自分の開発したい場所にコピーします。
準備ができましたらNDKフォルダにあるvc10フォルダ内の
ソリューションファイルをVisual Studioで開きます。
・NDK\vc10\ExamplePlugin.sln
Visual Studioのバージョンは同フォルダのReadme.txtを読むと2010を使用すると
書いてありますのでVisualStudio 2010を使用します。
フォルダ名がvc10となっているので、そこからも分かりますね。
ソリューションファイルを開くと、下記のような構成になっているかと思います。
ビルドの設定
次にビルドの設定を行います。フォルダを移動させた場合はincludeパス,
libパスの2つを通しなおす必用があります。
※移動させなかった場合は、全て相対パスで記述されているので設定する必要は無いです。
その他注意事項として、ビルドで作成されたDLLを自動的に“.nuke”フォルダに
コピーするコマンドが仕込まれています。
このコマンドが設定されていると、ビルドしてすぐにデバックできるので便利ですが
リリース時に邪魔になる場合もあるので気をつけてください。
ビルドして、実行してみる
パスの設定が終了しましたら、Releaseでビルドしてみます。
※Debugではなぜかクラッシュするのでここでは使用しません。
無事終了すれば、ビルド後にコピーのコマンドが実行され、“.nuke”フォルダにExamplePlugin.dllという
ファイルが作成されていると思います。
“.nuke”にはすでにPluginPathが通っているので、この場所に配置されたPythonやDLL,アイコンは自動的に
Nukeで認識するようになります。
試しに以下のどれかの操作を行ってみてください。
※PLEでは動作しません
■ 下記のコマンドをNode Graphにペーストする
※文字列と{}の間のスペースがないとエラーになります。{}は無くても良いです。
ExamplePlugin {}
■ 下記のコマンドをScriptEditorで実行する
nuke.createNode('ExamplePlugin')
■ Windowで実行する
NodeGraphの場所でショートカットの”x”を押します。
するとTCL/Pythonを実行するウインドウが出てきます。
そこに上で紹介したコマンドを入力し、実行します。
※下記はTCLで実行した場合の例です。
実行結果
“.nuke”について
NukeではユーザーのPriferenceなどの設定情報を格納しておく
.nukeフォルダというものがあります。
1度でもNukeを起動していれば、環境変数”USERPROFILE”(もしくは%HOME%)で設定されている場所に
作成されていると思います。エクスプローラーに下記のとおり文字列を入力してみてください
※隠しフォルダになってる場合がありますので、直接パスを指定しないといけないかもしれません。
プラグインのパッケージ化
実際にプラグインをリリースする場合には、このまま”.nuke”フォルダに配置するのも
ファイル類が煩雑になりすぎるので、ひとつのフォルダにまとめリリースしたいです。
まずDLLファイルを置く場所を決めます。試しにCドライブの直下にNukePluginsという
フォルダを作成します。
そこにビルドしたDLLを配置します。
次にこのフォルダを.nukeフォルダと同じように、プラグインを認識するフォルダになるように
Nukeに登録します。
登録方法は2つ有ります。
1. 環境変数でパスを登録
NukeにはNUKE_PATHという環境変数が有りますので、そこに追加していきます。
起動バッチに以下の要領で追加していきます。
SET NUKE_PATH=C:\NukePlugins
2.initファイルに登録
“.nuke”フォルダにinit.pyファイルを作成すると、Nuke起動時にそのファイルが
実行されるようになります。これはGUIが作成する前に実行されるファイルです。
ここにpythonでプラグインパスを通します。
# -*- coding: utf-8 -*- import nuke nuke.pluginAddPath('C:/NukePlugins')
これでC:\NukePluginsフォルダが認識されるようになりました。
次にコマンドでノードを作成するのも面倒なのでメニュー登録を行います。
C:\NukePluginsフォルダ内にmenu.pyというファイルを作成し、ここに
メニューへ登録するコマンドを記述していきます。
# -*- coding: utf-8 -*- import nuke toolbar = nuke.menu('Nodes') toolbar.addCommand('CustomTools/ExamplePlugin', 'nuke.createNode("ExamplePlugin")')
これでメニューに登録されました。
サンプルプラグインのビルド
これだけでは何もできないので、exampleフォルダに入っている物を何か
ビルドしてみます。
・Nuke8.0v5\Documentation\NDK\examples
例としてGradeノードをビルドしてみます。
まず以下の手順を行います。
1. プロジェクトの名前をExamplePlugin -> Gradeに変更
2. プロジェクトの中にGrade.cppを登録
3. ExamplePlugin.cppを削除
これを全て行うと下図のようになります。
※ExamplePlugin.cppを残しても良いのですが、今回は除きます。
このままビルドし、実行してみると、無事Grade.dllが作成されていると思います。
ただこのままだと既存のGradeとかぶってしまうので成功しているかどうか分かりません。
試しにhelpのコマンドを変更してビルドしてみます。
// Grade.C // Copyright (c) 2009 The Foundry Visionmongers Ltd. All Rights Reserved. const char* const HELP = "<p>Applies a linear ramp followed by a gamma function to each color channel.</p>" "<p> A = multiply * (gain-lift)/(whitepoint-blackpoint)<br>" " B = offset + lift - A*blackpoint<br>" " output = pow(A*input + B, 1/gamma)</p>" "The <i>reverse</i> option is also provided so that you can copy-paste this node to " "invert the grade. This will do the opposite gamma correction followed by the " "opposite linear ramp.";
↓
// Grade.C // Copyright (c) 2009 The Foundry Visionmongers Ltd. All Rights Reserved. const char* const HELP ="hogehoge";
変更してビルドし、ノードのヘルプを確認してみます。
ヘルプのメッセージが変更されていれば成功です。
ノードの名前の変更
このままGradeノードのプログラムを修正しビルドしても、ノードの名前を変更しないと
既存のものとかぶってしまい、どちらかが使用できなくなるのでノードの名前を変更したいと思います。
※ノードの名前が同じ場合、PluginPathで先に見つかったものが実行されます。
PluginPathは下記のコマンドで確認してください。
import nuke print nuke.pluginPath()
NukeにはDLLの名前と”CLASS”変数に登録した名前が一致している場合に
Nuke内でノードとして自動で認識されるという仕様があります。
※他にもやり方はありますが、ややこしいので今回は省きます。
まず変数を修正します。Grade.cppの下記の変数の名前を変更します。
static const char* const CLASS = "Grade";
↓
static const char* const CLASS = "CustomGrade";
次にDLLの名前を変更します。プロジェクの設定でプロジェクト名が
DLLの名前になるように設定されているので、プロジェクト名を修正します。
以上で完了です。
これでビルドすれば、CustomGradeという名前のノードが作成できると思います。
最後に
今回はビルドして配置、簡単なNukeの仕組み等をお話しました。
次回は何か作成してみたいと思います。
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください。
コメント
コメントフォーム