fereria
4/20/2020 - 1:58 PM

Hydraとは


title: Hydraとは?

去年の Houdini18 以降、日本でも「USD」や「Hydra」、「Hydra Render Delegate」
という言葉が聞かれるようになったのではないでしょうか。

ここまで、何回かにわけて USD について説明してきましたが、
もう1つ USD とともによく語られる「Hydra」は
いまいちなにものかわからない人も多いのではないのでしょうか。

今回はそんな Hydra がなにかをざっくりと説明していきたいと思います。

SOLARIS と Hydra レンダーデリゲート

現在、Hydra が使用されている DCC ツールをあげるとすると
Houdini18 から追加されている SOLARIS になります。

SOLARIS のビューポートにはこのように「Houdini GL/Karma/Storm」複数のレンダラーがあり
スイッチで切り替えることができるようになっています。

これは、Houdini18 の SOLARIS ドキュメントに書かれている

USD は、特定の時点で USD シーンから画像を生成するための API(Hydra と呼びます)を定義します

にあるとおり、Hydra の API の恩恵で複数のレンダラーを切り替えることができるようになっています。

さらに、Hydra API を実装した サードパーティ製レンダラー を使ってシーンをビューイングすることできます

とあるとおり、「サードパーティ製レンダラー(Renderman/Redshift/V-ray 等)」に
対応できるのも Hydra の恩恵があってこその機能になります。

Hydra はレンダラー...ではない

このように、レンダラーを切り替えられる
レンダラーをスイッチする、、、ということから Hydra のことを「レンダラー」と思っている方も
多いのではないかと思います。
ですが、実際はレンダラーとはまた別のものなのです。

Hydra がなかった世界

さて。
まず Hydra を理解するには、
Hydra がなかったときの話をするとわかりやすいかもしれません。

レンダラ視点

今でこそ、いろんな DCC ツールで使用できる V-Ray ですが
以前は Maya では使用できず、3ds Max のプラグインだったため
Maya では使用することができませんでした。

後に Maya が追加されましたが、
その場合異なるシーングラフである Maya のデータをレンダリングできるようにするとなると
DCC ツール側の対応が必要になるため、
もちろん開発しなければいけない量が増えるし
3ds Max 版と、Maya 版とでレンダラの使える機能も違ったりするので
複数のDCCツールに対応するとなると、その分だけ開発しなければならいものが増えてしまい
リリースされるまでのタイムラグなども発生しました。

DCC ツール視点

たとえば、Maya でなにかしらのシーンをレンダリングしたいとします。
しかし、一部モデルは別の DCC ツールで作成していることもあり
その場合はは、一旦 FBX などを介して一旦 Maya にデータを持ち込み
レンダリングをする DCC ツールのシーングラフとして構築した後に
レンダリングを実行するのが一般的です。

つまりは、一旦はそれぞれの DCC ツールがサポートしている汎用的な保存フォーマットを経由し、
別のシーングラフを統合して、1つのシーングラフにすることでレンダリングをしています。

そのため、DCC ツールが増えたり数が増えれば増えるほど
手間が増えたり、データが複雑化したりしていたわけです。
特に最近は、1つの環境ではなく複数のツールをまたいで作業をすることが多く
シーングラフをまとめる=ファイルを Export-Import 作業も増えて、
ワークフローが複雑化していく方向になります。

それを解決する手段 = Hydra

ここまでの前置きで、なんとなく察する方もいると思いますが
この DCC ツール(シーングラフ)とレンダラーを仲介するのが
最近よく聞く「Hydra」とよばれるものの機能です。

Hydra の構造をざっくりと作図するとこのようになります。

この図でいうところの緑色の部分が「Hydra」と呼ばれる部分です。
右側がいわゆる「Hydra Render Delegate に対応したレンダラー」で
下側が「Hydra Scene Delegate に対応した DCC ツール」です。
紫の線はシーングラフのデータの流れを指します。

たとえば、USD のシーングラフを Renderman でレンダリングしたい場合
こんな感じになります。

図だけだと若干わかりにくいので Hydra の中の図を「目的地に移動するまでの道路」に例えてみますが

DCC ツール=出発地点 道路=データの流れるライン(パイプライン)
データ=車
レンダラー=目的地
縦の線と横の線の交差するところ=交差点

このように考え見るとわかりやすいかもしれません。

ある DCC ツールからのシーングラフを目的地まで車で運ぶとして
USD のシーングラフを出発地、レンダラーを Renderman とすると
車は Renderman に向かう道で右折すれば目的地に到着できます。

同様に、Karma を使いたいとしたら、Karma に向かう交差点を右折すれば
目的地に到着できます。

いままでは、Renderman なら Renderman、Karma なら Karma に向かうための道を
その都度工事して直通の専用道を作らなければいけなかったわけですが
すでに作られた道があり、そこの道に入るための規格にさえ合わせれば
専用道を作らずに複数の目的地まで行けるようになるようなものです。

Maya と 3ds Max のような、異なるシーングラフをレンダリングしたい
という場合も、このシーングラフ側が「Hydra Scene Delegate」に対応すれば
その異なるシーングラフをとりまとめて、対応するレンダラーでレンダリング
することができます。

上の図の「Presto」というのは、Pixar 社が作成した 3D ツールです。
Pixar 社ではこの Presto のシーングラフ(RIG もりもり)と、
USD のシーングラフ(RIG を持たない)は RIG を持たないシーングラフですが
Pixar はこの2つのシーングラフを Hydra を経由してレンダラーに受け渡しています。

USD が「RIG を持たない」と言われていますが、これは Pixar が RIG をつかっていない... という意味ではありません。 USD は RIG をもっていなくても、 Presto が Hydra Scene Delegate に対応していることから、 Presto のシーングラフは Scene Delegate 側から受けとっているので、 Pixar 社のシーンが RIG を持っていないというわけではないのです。

いわゆるレンダラーの「Hydra Render Delegate に対応」というのは
Hydra からデータを受け取るための口に対応するということです。
例えるなら、USB メモリがあったとして、
USB の仕様に沿ってメモリを作れば、PC に挿すことで使えるようになるように
レンダラーが Hydra Render Delegate に対応すると
対応するシーングラフをレンダリングすることができます。

普通なら DCC ツールの分だけシーングラフを解釈する部分を実装しなければいけないところを
Hydra Render Delegate に対応さえすれば複数のシーングラフに対応できるし、
DCC ツール側も、「Hydra Scene Delegate」に対応することで、対応するレンダラーに
まとめて対応することができるので双方にメリットがあるわけです。

まとめ

だいぶ長くなりましたが、まとめますと
Hydra とは「USD や Maya などのシーングラフ」と「レンダラー」をつなぐためのブリッジで
レンダラー側は Hydra Render Delegate に対応すると対応するシーングラフで扱えるようになるし
DCC ツール側(シーングラフ側)は、対応すると複数のレンダラーに対応することができるので
Hydra に対応すればお互い Win - Win になれるのです。

USD という共通フォーマットしかり、Hydra というシーングラフとレンダラーをつなぐしくみしかり
この部分がオープンソースとして共通化されることで
CG 業界のパイプラインが共通化され、ノウハウが蓄積できるようになったというのが
とても大きな変化だと思います。
(Pixar がなぜ USD や Hydra をオープンソースにしたのかがとても良くわかる)
今はまだ対応されている DCC ツールも少ないのでメリットが見えにくいですが
Maya が対応してくれば、既存のパイプラインを大きく変化させるきっかけに
なるのではないかと思います。

おまけ

Hydra と Storm

Hydra はレンダラーではない...と書きましたが、以前はビューポートレンダラーも内包されていました。
それが、今では分離されて 「Storm」と呼ばれる GL レンダラーとして Hydra と
一緒に提供されるようになりました。

HoudiniSOLARIS の立ち位置

Houdini18 で追加された SOLARIS というのは、
Houdini が Hydra Scene Delegate に対応したわけではなく
上の図のように、SOP を USD のシーングラフにコンバートして
USD のシーングラフとして扱っています。
(SOLARIS は USD そのものである、というのはこれを見るとわかるはず)

なので、現状 Karma でレンダリングしようとした場合は ROP ではレンダリングできません。
それは Houdini が、 Hydra Scene Delegate に対応していないからです。

Maya の対応

上の図の Hydra Scene Delegate に Maya を書きましたが、 https://area.autodesk.com/blogs/the-maya-blog/usd-plugin-for-maya-fundamental-pillars

To further integrate the viewport experience we have implemented a Viewport 2 (VP2) Hydra render

This VP2 support means that USD data and Maya data can now co-exist seamlessly in the viewport and its editors.

とあるので、Maya のビューポートも Houdini の SOLARIS と同様にビューポートが Hydra に対応し、
USD のシーングラフと Maya のシーングラフを継ぎ目なく表示できるようになる
(= Maya が Hydra Scene Delegate に対応する?)
ようです。
上の図で表すとこうなります。

これが実現すると、より USD をベースにした複数の DCC ツールをまたいだ
パイプラインの構築が実現しそうです。
超たのしみ。

参考資料