LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

Solaris,USD,instancerを使った作例(.hip)

この記事はHoudini Advent Calendar 2020 13日目の記事です。

2018年のアドカレから12/13に投稿し、気づけば3回目になりました。
毎回コードはほとんど出てこないポエムです。

今回はHoudini18から登場したSolarisとUSDを使った背景シーン作成について試してみました。
USDの価値は構造にあると知りつつ、見た目よりの話です。

スクリーンショット 2020-12-13 125318.jpg

想定読者

Houdiniを使う次のような人にちょうどいいかなと思います。

  • 「Solarisが気になるけど役に立つのかわからん」
  • 「何か試したいけどUSDよくわからん」
  • 「公式チュートリアルも面倒そう」
  • 「簡単に試せる.hipないのか」

作例.hipは記事の最後にあります。
こんなことができるのね、と感じてもらえると嬉しいです。

この記事で使っている内容

  1. LOPでのオブジェクト読込み(作成)
  2. Variantの作成
  3. Instancerによる配置
  4. Referenceによる合成

スクリーンショット 2020-12-13 151220.jpg

画像のようなシーンを作成します。
解説で足りない部分は、.hipファイルを参考にしてもらえたら。

※Redshiftを使っていますが、ベータ版でありドキュメントにもあまり情報がないので解説していません。
 KarmaもUSDとSolarisに関する基本的な部分は同様だと思います。

参考にした情報

チュートリアルを一通りするとUSDとSolarisの雰囲気がわかりますが、階層や読み込みの強さなど多くの要素があり、使うために必要な情報量が多い印象です。
「なんでこうなってるの」という部分が出てきたときに、その都度調べていくスタイルだと負担が少ないと思います。

作業環境

Houdini indie 18.5.351
Redshift 3.0.33

Windows 10 home
CPU RYZEN 9 4900H
memory 40GB
GPU RTX2060 6GB

1.LOPでのオブジェクト読込み(作成)

作業スペース変更

まず作業スペースをSolarisに切り替えます。
スクリーンショット 2020-12-13 104647.jpg

SolarisへUSDファイルを配置(読み込み)

HoudiniではSOPで作成したオブジェクトを読み込むこともできますし、LOP内でSOPを作成することもできます。
LOPノードでSOPで作成するSOP Createを使ってみます。
スクリーンショット 2020-12-13 130934.jpg

内部はGeomertyコンテキストなのでSOPノードが使えます。
スクリーンショット 2020-12-13 131103.jpg
プリミティブな木を作ってみました。
スクリーンショット 2020-12-13 131130.jpg
もう一つ丸い形状でも作りました。
スクリーンショット 2020-12-13 131957.jpg

2.Variantの作成

variantの使い方はCGwikiを踏襲しています。
不明なところは参照してみてください。

Add Variantの追加

Add Variantノードを追加し、左側入力にPrimitiveを、右側入力に作成した2つのprim(オブジェクト)をに接続します。
下にExplore variantsを接続します。
スクリーンショット 2020-12-13 132322.jpg

Variantの確認

Explore VariantsノードのModeをExplore Variantsを選択すると、Variantに設定したprimが並べて表示されます。
アセットの確認に便利です。
スクリーンショット 2020-12-13 133051.jpg
スクリーンショット 2020-12-13 133107.jpg

3.Instancerによる配置

Duplicateの追加

Instancerによる複製のためにDuplicateノードを追加します。
スクリーンショット 2020-12-13 133645-1.jpg

DuplicateノードからModify Source PrimitiveのSource Primitive are first duplicatesを選択、Primitive DefinitionのReference Type Make Instanceableにチェックを入れます。
スクリーンショット 2020-12-13 133816.jpg
Total NumberはVariantの数に応じて増減させます。
今回は2つなのでそのままです。
スクリーンショット 2020-12-13 141814.jpg

さらに下にSet VariantInstancerを接続します。
スクリーンショット 2020-12-13 133645.jpg
Set VariantノードのPrimitivesにAdd Varianttrees*を入力し、Variant Setはmodelを選択します。
スクリーンショット 2020-12-13 135337.jpg
InstancerノードのTarget Points、 Location SourceをExternal SOPにし、SOP Pathにインスタンスを配置するポイントを指定します。
続いて、Prototype SourceにSecond inputを選択し、Prototype Primitivesにtrees*を入力します。
スクリーンショット 2020-12-13 135528.jpg

ここでは別のSOP Createを作り、HeightField内にScatter pointsを指定しました。
スクリーンショット 2020-12-13 153919.jpg

スクリーンショット 2020-12-13 143321.jpg

これでInstancerによる配置ができていると思います。
スクリーンショット 2020-12-13 141838.jpg

次は、地形と木が分かれた状態なので合成します。

4.Referenceによる合成

SOPとは異なり、LOPではオブジェクトの追加に複数の手法があります。
手法による違いは他の記事を参照してください。

今回はReferenceノードを使用します。
Referenceノードを作成し、地形のSOP Createノードを左側の入力に接続し、Instancerノードを右側の入力に接続します。

スクリーンショット 2020-12-13 142715.jpg

CompositonのReference TypeをReference From Multi-inputにします。
スクリーンショット 2020-12-13 142806.jpg

地形とインスタンスが合成されました。
スクリーンショット 2020-12-13 144327.jpg

おわりに

USDを使用すると大量のオブジェクト、複雑なシーンを効率的に管理できる一方、使用するための考え方の理解がハードルになっている感もあります。
Solarisを使用することでノードベースで視覚的な理解の助けになると思います。

極力シンプルな内容にすることで多くの人に触れてもらい、知見が拡大していくことを願っています。

.hipファイル

作例のhipファイル(zip)です。
201213_advent_calendar.hiplc
※クリックでダウンロードできない場合、新しいタブで開くとできるかもです。

ファイルをダウンロードした方は、ぜひScene Graph Treeを開いてからノードを追ってみてください。
項目ごとの増減・変化が一覧できるので、USDの強みである構造化の理解がしやすいです。
(SOPでいうところのGeomerty Spread Sheetみたいに使っています)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3