中村@アールテクニカ
アールテクニカの中村です。
今年の3月26日にドワンゴよりアニメーション制作ソフトのOpenToonzがオープンソースとして公開されました。プラグインSDKも公開されているのでOpenToonzの簡単なプラグインを作ってみることにします。
OpenToonzについて
OpenToonzとは
OpenToonzは、イタリアのDigitalVideo社が開発したアニメーション制作ソフトであるToonzが元となっており、ドワンゴがToonzを買収しオープンソース化しました。
Toonzは以前よりスタジオジブリでも使用されておりジブリが独自に開発したToonz向けの機能やドワンゴが開発したエフェクト機能などがOpenToonzには盛りこまれています。
opentoonz.github.io
OpenToonzの特徴
基本はタイムライン+レイヤー構造のシーンに静止画を配置していくので、After EffectsやFlashに似ています。エフェクトについてはノードベースの構造となっておりスケマティックビューで編集します。エフェクトによっては複数のソースを入力することも可能なので複雑なエフェクトパイプラインを組むこともできます。
サンプルプラグインのビルド
まずはプラグインSDKに付属のサンプルプラグインをビルドします。
開発環境の準備
サンプルプラグインのビルドにはCMakeとC++11対応のコンパイラが必要となります。
今回は以下の環境で作成します。
- Windows 10 Pro 64bit
- Visual Studio Community 2015
必要なものは以下からダウンロードします。
OpenToonz プラグインSDK | https://github.com/opentoonz/plugin_sdk |
CMake | https://cmake.org/download/ |
Visual Studio Community 2015 | https://www.visualstudio.com/ja-jp/products/visual-studio-community-vs.aspx |
CMakeでプロジェクトファイル作成
CMakeでCMakeLists.txtからVisual Studio用のプロジェクトファイルを作成します。
事前にビルド用フォルダを作成しておきます。
CMakeを起動したら、ソースコードフォルダとビルドフォルダを設定します。
ソースコードはsamples/blur を使用します。
「Configure」ボタンをクリックすると下記のダイアログが出るので「Visual Studio 14 2015 Win64」を選択します。OepnToonzが64bitなのでプラグインも64bitでビルドする必要があります。
「Finish」をクリックするとConfigureが開始され、完了すると「Configuring done」と表示されます。
次に「Generete」をクリックすると、ビルドフォルダにVisual Studio用のプロジェクトファイル一式が作成されます。
Visual Studioでビルド
ビルドフォルダのblur_plugin.slnをダブルクリックするとVisual Studioでソリューションが開きます。
ビルド実行すると、ビルドフォルダにblur.pluginというファイルが出力されます。これをOpenToonzのStuffフォルダのpluginsに配置します。
毎回手動で配置するのは手間なので、プロジェクト設定の「ビルド後の処理」でコピーするようにしておきます。
copy $(TargetPath) "C:\OpenToonz 1.0 stuff\plugins\"
OpenToonzでエフェクトプラグインを使用する
エフェクトの挿入
OpenToonzを起動したら適当な静止画をタイムライン上に配置します。続いてメニューバーから「ウィンドウ」→「その他のウィンドウ」→「スキマティック」でスキマティックウィンドウを開きます。静止画のノードを右クリックし「エフェクトを挿入」でエフェクトを挿入します。
サンプルプラグインの改造
次にblurを少し修正し、シャープフィルタを作成します。
仕様は以下の通りです。
- 3*3のコンボリューション行列のシャープフィルタ
- フィルター強度をパラメータで設定可能
ソース修正
プロジェクト設定などの変更
プロジェクト名を「sharp」に変更し、プロジェクト設定の「全般」→「ターゲット名」も「sharp」に変更します。
blur.cppをsharp.cppにリネームしプロジェクトに追加しなおします。
プラグイン情報の変更
ソースコードの最後の方にプラグイン情報の定義があるので変更します。
TOONZ_PLUGIN_PROBE_DEFINE(TOONZ_PLUGIN_VER(1, 0), "shart-plugin" /* name */, "ART Teknika" /* vendor */, "at-sharp.plugin" /* identifier */, "a sharp plugin for test", "http://artteknika.com/", TOONZ_PLUGIN_CLASS_POSTPROCESS_SLAB, &toonz_plugin_node_handler)
パラメータ
フィルター強度のパラメータ「strength」を定義します。
0.0~5.0まで指定可能です。
使用していないパラメータは削除してしまいます。
param_desc_t params0_[] = { param_desc_ctor<traits_double_t>("strength", "strength", {1.0 /* default */, 0.0 /* min */, 5.0 /* max */}, "description of the first param"), };
エフェクト処理部分の修正
do_compute()関数がエフェクト処理をする関数になります。
元のコードを流用しつつ、strengthパラメータで強度変更可能なシャープフィルターの処理をします。
gist.github.com
実行結果
フィルター強度:0 (原画と同じ)
フィルター強度:0.5
フィルター強度:1.0
このようなシンプルなエフェクトであればSDKのサンプルを元に比較的簡単に作成することが出来ます。今後は多入力や前後のフレームを参照するようなプラグインにも挑戦してみたいと思います。また、OpenToonzのgithubにはドワンゴ作成のOpenCVを使用したプラグインもあるのでこちらも試してみたいと思います。