記事の目次

    みなさんこんにちは。ちょっと前になりますが、8/22~24にかけてCEDECが開催されました。毎年のことながらすごい熱気で私も意識の高まりをメキメキと感じることができたり、いろいろとヒントを得ることもできてとても楽しい3日間でした。意外と見落としている方も多いかもしれませんが、CEDECのYouTubeチャンネルでも過去のセッションを含め、結構公開されているものがあります。秋の夜長、これを肴に楽しんでみてはいかがでしょうか。

    余談ですが、CEDEC終了後のArtists Meets Technicals 2018に参加したところ、過去に行なったセガ(現、セガゲームス)の麓 一博さんと私の対談を読んで進路を決めたという方にお会いできました。こういうことは初めてだったので感動すると共に、自分がものすごく齢を取ったような気分になる機会でした。笑。

    TEXT_痴山紘史 / Hiroshi Chiyama(日本CGサービス
    EDIT_尾形美幸 / Miyuki Ogata(CGWORLD)

    Gafferの操作ムービーを公開(2019年11月に追記)

    CGWORLD 2019 クリエイティブカンファレンスにて、ウォーターフォール型パイプラインの問題点と、コンカレント型パイプラインの将来性と題したセッションを実施しました。本セッション用に作成したGafferの操作ムービーを公開しているので、以降の記事と合わせてご活用ください。映像だけでコメントなどは一切入っておらず、わかりづらくて申し訳ないのですが、Gafferがどのようなソフトウェアなのか雰囲気は伝わると思います。なお、セッション資料もこちらで公開しています。興味のある方はご覧になってください。

    今回は、GafferとArnoldを使用

    前回、Maya でレイアウトしたシーンを.usdファイルとして出力するところまで行いました。しかし、折角シーンデータをつくってもそれをレンダリングする方法がないと意味がありません。現状、USDのドキュメントを見てもとにかくKATANA推しで、それこそ「みんなMy KATANAあるよねッ!?」という勢いでKATANA前提の話になっています。ところがKATANAの1年あたりの保守契約費は$8,568(※)です。この記事のためにKATANAを買ったら原稿料がゲフゲフ......ということで涙を飲んで諦めます。

    ※ 永久ライセンスやレンタルライセンスも有り。詳しくはボーンデジタルほか、リセラー各社にお問い合わせください。

    さてどうするか......ということで、今回はGafferを試してみることにしました。GafferはImage Engineが開発・使用しているツールで、CGWORLD.jpの『キングスグレイブ ファイナルファンタジーXV』の記事でも取り上げられています。

    Gafferはルックデベロップメント(以下、ルックデヴ)&ライティングツールという点ではKATANAにとても近いです。しかしGafferがカバーしているのはもっと広い範囲で、Image Engine内ではプロダクションワークフローの定義や管理にまで使用しているようです。そのあたりの内容は以下の動画で発表されています。

    ▲DigiPro 2016 - Gaffer | An Open-Source Application Framework for VFX


    Gaffer は現在、

    appleseed
    3Delight
    Arnold

    上記の3種類のレンダラに対応していて、Image Engineでは3Delightを使用しています。

    大きな注意点として、appleseedはOpenSubdivを含むSubdivision surfaceに対応していないことが挙げられます。また、Displacementにも未対応です。これは最近のレンダラとしてはかなり辛いところです。Arnoldとの組み合わせではSubdivision surfaceに対応していますが、ArnoldはOpenSubdivを使用しているわけではないようです(使用しているアルゴリズムは同じはずなので、結果はほぼ同じはず?)。そのため、メッシュ分割のチューニングはArnold用に設定してやる必要があります(Subdivision surfaceとして扱うかどうかの設定は、前回の解説をご覧ください)。また、3Delightは最初のライセンスは無料なので試してみるのも良いかもしれません。 とても残念なのが、以前はRenderManも対応していたのですが、RIS化のタイミングで対応を打ち切ってしまったようです。これがあれば文句なしなのですが。USD対応のながれに乗って復活することを期待しましょう。

    この3種類のレンダラから選ぶ場合、現時点で最も現実的なのはArnoldではないかと思います。そのため、今回はArnoldを使用します。

    ショットシーンの構築方法を決める

    ルックデヴを行なったり、ショット作業をするためにはショットシーンの構築方法を決める必要があります。ただし「絶対にこうしなければいけない」という決まりがあるわけではないため、プロダクションやプロジェクトごとに適切だと思われるルールを決めて運用していくことになります。

    今回は下記のようなルールを設けました。

    ・Mayaでレイアウトしたシーンは.usdファイルでGafferに渡す
    ・ルックデヴファイルはGafferで作成し、ショットシーンでリファレンスして使用する
    ・ショットシーンでは読み込んだシーンをアセットごとに分解し、それぞれにルックデヴ情報を割り当てる
    ・シェーダのアサイン情報は階層のパスで指定する

    では、これに沿って作業を進めていきましょう。

    Gaffer+Arnoldの環境設定

    GafferはLinux版とOSX版のバイナリが用意されています。Windows版も自前でビルドすれば使えるのでしょうが、動かす前に四苦八苦するのと、即座に試せる環境が整うのとでは雲泥の差です。こういうところで標準環境を使っているか否かの差が出てきますね。

    環境設定はドキュメントを参考にすれば簡単にできます。本当に、簡単すぎて拍子抜けしてしまうくらいです。

    Gafferの使い方は以下の動画を見るのが良いです。

    ▲Introduction to Gaffer - GafferBot Lighting and LookDev


    動画の制作時期が少し古いので今のものと完全に同じではないですが、20分の動画で基本的な使い方を知ることができます。現在のバージョンと一番異なる点は、プレビューにDisplayノードではなくCatalogueノードを使用するようになっていることです。

    次ページ:
    Gafferで.usdファイルを読み込む

    [[SplitPage]]

    Gafferで.usdファイルを読み込む

    前回出力した.usdファイルはSceneReaderノードで読むことができます。Gaffer自体はAlembicファイルを読むこともできるのですが、gaffer-0.48.0.0の時点では.usdファイルからリファレンスされているAlembicファイルは正常に読み込むことができないようです。


    Gafferはシーンを一度に読み込んで表示するのではなく、最初はバウンディングボックス表示になっていて必要になった時にジオメトリの表示を行うことができます。上図では、左下のViewがそのモードになっています。これにより重たいシーンも軽快に扱うことができるようになっています。

    ルックデブ

    一通り準備ができたので、 ルックデブを行なっていきます。

    シーンの構築方法は前述のIntroduction to Gafferで解説されているのとほぼ同じです。ただ、今回はArnoldを使用しているため、ArnoldAttributesノードとInteractiveArnoldRenderノードを使用しています。

    ※ InteractiveArnoldRenderを使用してCatalogueでプレビューする際、いくつか注意が必要なようです。最初にInteractiveArnoldRenderをオンにしただけではレンダリングが開始されません。この場合、カメラのビューポートからカメラを動かすか、CropWindowToolを使ってビューポートを更新するとリアルタイムレンダリングが始まります。また、Gafferはひとつのプロセスで複数のシーンを開くこともできるのですが、複数のInteractiveArnoldRenderがオンになっている場合でも、あまり期待した結果にならないようです。そのような場合、使用したいInteractiveArnoldRender以外は更新を停止しておきます。このあたりの挙動は、正直私もまだ完全に把握しきれていないところなので、これがバグなのか使い方が悪いのか現時点ではわからないです。

    アセットファイルをSceneReaderで読み込み、ShaderAssignmentノードとPathFilterノードを使ってシェーダをアサインしていきます。

    PathFilterノードは名前ベースでオブジェクトをフィルタリングするためのものです。名前ベースで管理を行なっているため、一度ルックデヴ用のテンプレートシーンを用意しておけば簡単に使い回すこともできます。

    下図がシェーダをアサインしている途中の状態です。


    左上がArnoldでリアルタイムにプレビューしながら確認している画面です。左下がルックデヴ用のテンプレート、右下がFamilyCar_lookdevノードの中にまとめたルックデヴファイルです。

    ※ 前回つくったシーンに問題があったためPathFilterノードで指定するパスを"/.../"で始まる形にしないとうまく動かない状態になってしまいました。ここがきちんとできていれば、もっと楽に管理できるのですが。無念......

    FamilyCar_lookdevはBoxノードです。Boxはノードの塊をパッケージ化するためのものです。今回はFamilyCar_lookdevノードをExportしてショットシーンでリファレンスします。

    ショットシーンの構築

    レイアウトが終わった.usdファイルとルックデヴファイルを使用してショットシーンを構築し、ライティングやレンダリングを行なっていきます。


    SceneReaderで.usdファイルを読み込み、一度全てのジオメトリに対してlambertシェーダを割り当てています。その後SubTreeノードを使用してシーンをアセットごとに分解し、先ほどExportしたルックデブファイルをリファレンスしたものを使ってシェーダをアサインします。

    そして、最終的にカメラやライト、アセットをGroupでひとまとめにしてショットシーンを構築しています。

    事前にlambertシェーダを割り当ててからルックデブファイルで上書きしているのはエラーチェックをしやすくするためです。上図の例では車のフロントグリルや店舗の日よけのフレーム部分にlanbertシェーダの色がそのまま出ているため、エラーがあることがわかります。

    このように、上流で指定した情報を下流で一部だけ上書きするといったことができます。これにより、元データに手を加えることなく、エラーチェックやショットごとの細かい調整を行えます。

    これだけの内容を行なっているにも関わらず、シーンはとてもシンプルです。また、アセットやレイアウト、ルックデブ情報は全て外部でもっているため、ライティングを行いながら、その前工程の作業を並行して行うことができます。シーンを再構築する、一部の情報を差し替えるといったことを簡単に行える点がGafferの強力なところです。

    レンダリング

    最後にレンダリングを行います。先ほどの図のノードグラフの右下側、赤い部分がレンダリングとファイルへの格納を行なっている部分になります。


    本番レンダリング用にArnoldOptionsノードでArnoldのパラメータ調整を行い、ArnoldRenderノードでレンダリング、ImageWriterノードでファイルへの出力を行います。図ではCatalogueノードからの出力をファイルに書き出しているのですが、正直なところ、このやり方が正しいのかどうか確信がもててはいないです(※)。

    ※ やはり正しくなかったため、私のBlog「PHILO式:Philosophy of Hiroshi」の下記記事で正しいと思われる方法をご紹介しています。
    Gafferでのバッチレンダリング

    ですが、これで最終レンダリングまで行うことができました。ここから更にアセットをブラッシュアップしていけばよりクオリティの高い画像に仕上げることができます。そして、その作業を全て複数人で並行して行うことができるのです。

    まとめ

    第5回までで、駆け足ではあるものの、イチからUSD環境をつくってレンダリングまでできるようになりました。USDをパイプラインの基盤にすることで、MayaだけではなくUSDに対応しているアプリケーションであれば何を使用しても最終的にGaffer(やKATANA)にデータをもっていってライティングしつつ、並列作業を行うことができます。これまでは特定のアプリケーション、特定のバージョンに強く縛られていたパイプラインに強力な柔軟性をもたせることができます。

    そして、世界で一般的に使用されている環境を揃えることで、海外プロダクションで行われている最先端のツールとフローを、それほど高度な技術を使わず、もちろん開発なども行わずに試せることがわかっていただけたでしょうか。

    今後の課題

    これでMaya上でレイアウトしたシーンをUSDを介してGafferにもっていき、Arnoldでレンダリングするという一連のながれをつくることができました。今後実際のプロダクションできちんと回るようなしくみをつくりこんでいくためには、

    ・より洗練されたルックデヴのやり方
    ・アセット出力のやり方
    ・カメラやライト、アニメーションといったショットに付随するデータの扱い方
    ・レンダーサーバとの連携

    などなど、確認することはたくさんあります。これはとても大変な道のりですが、最低限一通りのことができるとわかった以上、後は「やるかやらないか」それだけです。

    次回予告

    今回でUSD編は一段落です。次回はこれまでの内容を踏まえつつ「新しい技術をパイプラインに導入するときに、どのようなことを考えていくのか?」というテーマでお話していきます。



    第6回の公開は、2018年11月を予定しております。

    プロフィール

    • 痴山紘史
      日本CGサービス(JCGS) 代表

      大学卒業後、株式会社IMAGICA入社。放送局向けリアルタイムCGシステムの構築・運用に携わる。その後、株式会社リンクス・デジワークスにて映画・ゲームなどの映像制作に携わる。2010年独立、現職。映像制作プロダクション向けのパイプラインの開発と提供を行なっている。新人パパ。娘かわいい。
      @chiyama