アールテクニカ地下ガレージ

アールテクニカ株式会社の製品開発・研究開発・日々の活動です

OpenToonzプラグインの作成

Author

中村@アールテクニカ


アールテクニカの中村です。

今年の3月26日にドワンゴよりアニメーション制作ソフトのOpenToonzがオープンソースとして公開されました。プラグインSDKも公開されているのでOpenToonzの簡単なプラグインを作ってみることにします。

OpenToonzについて

OpenToonzとは

OpenToonzは、イタリアのDigitalVideo社が開発したアニメーション制作ソフトであるToonzが元となっており、ドワンゴがToonzを買収しオープンソース化しました。
Toonzは以前よりスタジオジブリでも使用されておりジブリが独自に開発したToonz向けの機能やドワンゴが開発したエフェクト機能などがOpenToonzには盛りこまれています。
opentoonz.github.io

OpenToonzの特徴

基本はタイムライン+レイヤー構造のシーンに静止画を配置していくので、After EffectsFlashに似ています。エフェクトについてはノードベースの構造となっておりスケマティックビューで編集します。エフェクトによっては複数のソースを入力することも可能なので複雑なエフェクトパイプラインを組むこともできます。

サンプルプラグインのビルド

まずはプラグインSDKに付属のサンプルプラグインをビルドします。

開発環境の準備

サンプルプラグインのビルドにはCMakeとC++11対応のコンパイラが必要となります。
今回は以下の環境で作成します。

必要なものは以下からダウンロードします。

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でビルドする必要があります。
f:id:artteknika_nakamura:20160527121916p:plain
「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を起動したら適当な静止画をタイムライン上に配置します。続いてメニューバーから「ウィンドウ」→「その他のウィンドウ」→「スキマティック」でスキマティックウィンドウを開きます。静止画のノードを右クリックし「エフェクトを挿入」でエフェクトを挿入します。

f:id:artteknika_nakamura:20160526210528p:plain

プレビュー

エフェクトノードを右クリックしてプレビューを選択すると、プレビューウィンドウが開きエフェクトの効果を確認出来ます。エフェクトノードをダブルクリックするとパラメータウィンドウが開きパラメータを変更できます。パラメータGUIはOpenToonz本体側で用意されており、数値だけでなくカラーやトーンカーブも用意されています。blurプラグインのパラメータはテスト用のダミーでエフェクトには影響しません。

f:id:artteknika_nakamura:20160526211715p:plain

サンプルプラグインの改造

次に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

プラグインの追加

プロジェクトをビルドしプラグインを配置したらOpenToonzを再起動し、blurプラグインと同様にスキマティックビューで追加します。
f:id:artteknika_nakamura:20160526203625p:plain

実行結果

フィルター強度:0 (原画と同じ)
f:id:artteknika_nakamura:20160527130845p:plain

フィルター強度:0.5
f:id:artteknika_nakamura:20160527130223p:plain:w680

フィルター強度:1.0
f:id:artteknika_nakamura:20160527130234p:plain:w680


このようなシンプルなエフェクトであればSDKのサンプルを元に比較的簡単に作成することが出来ます。今後は多入力や前後のフレームを参照するようなプラグインにも挑戦してみたいと思います。また、OpenToonzのgithubにはドワンゴ作成のOpenCVを使用したプラグインもあるのでこちらも試してみたいと思います。


Author

中村@アールテクニカ

アールテクニカのSE兼プログラマ。Web系のサーバサイド・フロントエンドからスマホ・PCのネイティブアプリまでソフトウェア開発全般が守備範囲。最近はハードウェア開発にも興味あり。

スポンサーリンク