Skip to content

Instantly share code, notes, and snippets.

@fereria
Last active April 19, 2020 11:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fereria/b8b163c2a4d52c404ac0767efdf811bc to your computer and use it in GitHub Desktop.
Save fereria/b8b163c2a4d52c404ac0767efdf811bc to your computer and use it in GitHub Desktop.
title
Hydraとは?

去年のHoudini18以降、日本でも「USD」や「Hydra」、「Hydraレンダーデリゲート」 という言葉が聞かれるようになったのではないでしょうか。

ここまで、何回かにわけて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ツール視点

たとえば、Mayaでなにかしらのシーンをレンダリングしたいとします。 しかし、一部モデルは別のDCCツールでレンダリングをしていました。

そういう場合は、一旦FBXなどを介して一旦Mayaにデータを持ち込み レンダリングをするDCCツールのシーングラフとして構築した後に レンダリングを実行するのが一般的です。

つまりは、一旦は汎用的な保存フォーマットを経由することで 別のシーングラフを統合して、1つのシーングラフにすることで レンダリングを実行しているわけで DCCツールが増えたり数が増えれば増えるほど 手間が増えたり、データが複雑化したりしていたわけです。

それを解決する手段 = Hydra

ここまでの前置きで、なんとなく察する方もいると思いますが このDCCツール(シーングラフ)とレンダラーを仲介するのが Hydra の正体なのです。

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

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

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

Hydraの中でデータが交差しているところがありますが これは、道路=データの流れるラインとすると十字路の交差点のようなもので 交差しているところであればデータの受け渡しができます。 なので、上の図の構造を見ると分かる通り、 Hydraの中のマス目状になっているので、どのシーングラフであっても 対応するレンダラーに対してシーングラフを受け渡すことができます。

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

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

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

いわゆるレンダラーの「Hydra Render Delgateに対応」というのは 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業界のパイプラインが共通化され、ノウハウが蓄積できるようになったというのが とても大きな変化だと思います。 今はまだ対応されているDCCツールも少ないのでメリットが見えにくいですが Mayaが対応してくれば、既存のパイプラインを大きく変化させるきっかけに なるのではないかと思います。

おまけ

HoudiniSOLARISの立ち位置

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

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

Hydra と Storm

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

参考資料

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment