Kraken Rigging Framework についての第一印象


この記事は、2015年８月リリースされた Fabric Engine 用リグ組みフレームワークである Kraken について、それがどうのようなもので、実用性はあるのかについて、しばらく試した筆者の第一印象の共有を目的としたものである。お付き合いいただければ幸い。なお、リグ組みフレームワークについては、Digital Frontier [野澤さんの記事](http://www.dfx.co.jp/dftalk/?p=17463) [^1] や、CEDEC2015での SQUARE ENIX [佐々木隆典さんの資料](http://www.jp.square-enix.com/info/library/) [^2]を参照されたい。疑問点、質問等あれば気軽にコメントお寄せいただきたい。


[^1]: [デジタル・フロンティア-Digital Frontier | DF TALK | ≪セットアップ室≫キャラクターセットアップに大切なこと](http://www.dfx.co.jp/dftalk/?p=17463)
[^2]: [Publications | Advanced Technology Division | SQUARE ENIX:モジュラーリグシステムのアーキテクチャ](http://www.jp.square-enix.com/info/library/)



# Kraken とは
http://www.ethivierge.com/kraken/
http://fabricengine.com/almost-time-to-release-the-kraken/

Fabirc Engine を活用したオープンソースかつクロスプラットフォームなリグ組みフレームワークである。リリースされて間もないこともあり、未だ開発途上な面もある。実際の基本的な動作は以上のリンク内動画を参考。また末尾に参考リンク集を付した。需要あれば備忘のためにも導入記事を書くかも。


### 対応ツール
* maya
* softimage

3ds Max, Houdini, MODO は 現状未対応。将来の予定は不明


### Kraken の特徴

一般的なリギングフレームワーク同様の機能を備えているが特にKrakenの特徴となるは以下の2点

0. DCCツールで行う操作を抽象化し異種ソフト間で同等の操作を実現
0. ノードエディタベースでのリグモジュール接続定義、設定が可能

 コントローラリグ作成に必要な、DCC上での操作、つまりコンストレイン作成、オブジェクトの作成や位置操作、Spliceオペレータの適用、をMaya用、Softimage用と分けること無く一つの pythonコードで記述できる。が、現時点では汎用なノードを使用しているのでこの部分が他のフレームワークと比して格別高速、高機能というわけではない。つまり単一のプラットフォームを想定し特化したフレームワークには劣るともいえる。
 
 また、各ノード（＝モジュール）は input/output を持ち、それらを専用のノードエディタ上で相互接続し、リグの構造を定義していく。（例：腕モジュールは背骨モジュールの肩にくっつく）それぞれのノードは、Spliceオペレータ（Fabric Engineの機能にアクセスするためのもの）を持ち、種々の機能を有する。
 作成されたリグは、機種をまたいで同等の機能を持つ。わかりやすい機能で言えばFK/IKスイッチなど。


### Kraken の守備範囲

1. モジュールの作成
    - kl でのオペレータ記述
    - python でのモジュールの記述
    - 組み込みでいくつかのリグソルバーklオペレータが用意されている
1. リグを定義
    - モジュールをグラフ上で配置、接続
    - モジュールのパラメータ、空間位置等設定
        - 名前付け
        - 左右属性
1. リグ定義からガイドを作成
    - DCCツール上に配置される
    - スケルトンに合わせる
    - スキップ可能
1. リグの作成（build）
    - リグ定義、ガイドよりコントローラリグが作成される


スケルトンや、スキンオブジェクトとのデフォーマ接続は*範疇外*となる。




## 一問一答


### 軽い？

- ものによる
    -  (ネイティブでない)通常のICE kinematics や ScriptedOp を使用するよりは断然はやい
    -  既存のC++で実装されたようなものを同じように再実装したとしても早くはならない
    -  とはいえ並列化の恩恵をうけられるものは早くなりうる
        -  並列化の記述が容易であるため
- maya はそこそこ
- softimage は執筆時（1.15.3）バグですごく重い ([該当プルリク](https://github.com/fabric-engine/SpliceSoftimage/pull/13)）
 - パッチ適用済でもmayaより若干重くなる傾向
     - どちらも開発はそこそこ活発なのでこれからに期待




### 利点は？
* 同一の元から異なるDCC上で同等のリグを構築できる
* klでコンポーネントを記述できる
    * 軽快 
    * 並列プログラミングが容易
    * コンパイル不要（正確には JIT = Just In Time コンパイル）
        * C++使用する際、一番の難所であるビルド環境の構築が不要
        * DCCのバージョン毎のコンパイルが不要
* コンポーネント単位での unit test が可能/組み込みのものに整備されている


### 欠点は？
- 作成されたリグに対する操作は範囲外
  - ミラーやポーズストアなど
  - まだないのか未来予定なのかは不明
    - 自前ツールの結合が必要
- （FabricEngine１系自体）不安定
  - 保存したシーンを開くだけで落ちる
      - 回避策はあったりなかったり
      - 修正は２系でされる模様
          - 2系は結構変わるっぽい
- モジュール間の特殊なつながりを記述できない
    - 例：脚と足を特殊なリバースIKしたい / たんなるIKでつなぎたい ）を表現できない
        - 記述の仕方が悪いとも言えるので筆者の今後の課題
- コンポーネント間での直接のやりとりが記述できない
    - つまり SpliceOperator 同士の通信
        - Softimage だと無理 ( http://answers.fabricengine.com/questions/35948/how-to-connect-operatorsnodes-in-softimage.html )
            - input/output を通す必要がある
        - Maya は行けるが・・・
        - FabricEngine2 canvasに期待
- Fabric Engine 自体足りないものが多い


### モジュールの組やすさは？
- 容易
    - 型のある言語をさわったことがあれば
- sim 系のモジュールは若干むずかしいかもしれない
    - キャッシュの作成や保存、読み込みなど自前で実装
   

### のりかえる？
* すでに安定した環境にいるのであれば必要ないとは思う
* タイミングがあうなら少なくとも調べる価値ある
    * SI難民である筆者にはちょうど良い
    * イチからリグ組みの依って立つ基礎(= 必要なモジュール)を（再）実装できる
* DCC agnostic[^3] への取っ掛かりになりうる
    * とはいえ Autodesk(製品)の寿命と Fabric Engine の寿命を考えだすとなんともいえない。
* 実戦投入できるのは１年かかる（使う側の習熟、周辺整備）
    * 周辺ツールを整備するにせよ、存分に活かすならクロスプラットフォームを意識する必要がある
* 対応ソフトが増えれば・・・



ちなみに蛇足であるが Fabric Fiftyは インタラクティブライセンス（人間使用可能）が10個、ヘッドレスライセンスが40個なので、10人以上の規模で利用される場合は有償。


[^3]: Agnostic つまりある種の宗教論争から一歩引いた不可知論的立場。DCC agnostic と言った場合、どのツールが優れているかの論争から開放された立場という意味。実現可能かどうかはのーこめんと。




## 確認環境
Windows7 64bit
FabricEngine 1.15.3
SpliceMaya 1.15.3
SpliceSoftimage 1.15.3相当のバグ回避版
Maya 2015
Softimage 2015sp1 / 2013sp1




---
## 参考リンク
### Kraken関連サイト

<dl>
  <dt>Krakenプロジェクトページ</dt>
  <dd><a href="http://fabric-engine.github.io/Kraken/">http://fabric-engine.github.io/Kraken/</a><dd>

  <dt>GitHubレポジトリ</dt>
  <dd><a href="https://github.com/fabric-engine/Kraken">https://github.com/fabric-engine/Kraken</a></dd>

  <dt>ドキュメント</dt>
  <dd><a href="http://fabric-engine.github.io/Kraken/documentation/1.0.0/">http://fabric-engine.github.io/Kraken/documentation/1.0.0/</a><dd>

  <dt>フォーラム</dt>
  <dd><a href="https://groups.google.com/forum/#!forum/kraken-project">https://groups.google.com/forum/#!forum/kraken-project</a></dd>
</dl>


### 先行するリグフレームワーク
参考にオープンソースとして展開されているものを以下に示す。

MetaRigging Toolkit: http://sourceforge.net/p/metarigging/code/HEAD/tree/
Gear: http://gear.jeremiepasserin.com/
Red9 StudioPack: https://github.com/markj3d/Red9_StudioPack
mGear: http://www.miquel-campos.com/post/109768264793/mgear-10-rigging-framework-for-autodesk-maya
（UE4 art: https://www.unrealengine.com/ja/blog/animation-rigging-toolkit-in-ue4 ）

----