この記事はHoudini Advent Calendar 2020 13日目の記事です。
2018年のアドカレから12/13に投稿し、気づけば3回目になりました。
毎回コードはほとんど出てこないポエムです。
今回はHoudini18から登場したSolarisとUSDを使った背景シーン作成について試してみました。
USDの価値は構造にあると知りつつ、見た目よりの話です。
##想定読者
Houdiniを使う次のような人にちょうどいいかなと思います。
- 「Solarisが気になるけど役に立つのかわからん」
- 「何か試したいけどUSDよくわからん」
- 「公式チュートリアルも面倒そう」
- 「簡単に試せる.hipないのか」
作例.hipは記事の最後にあります。
こんなことができるのね、と感じてもらえると嬉しいです。
##この記事で使っている内容
- LOPでのオブジェクト読込み(作成)
- Variantの作成
- Instancerによる配置
- Referenceによる合成
画像のようなシーンを作成します。
解説で足りない部分は、.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に切り替えます。
###SolarisへUSDファイルを配置(読み込み)
HoudiniではSOPで作成したオブジェクトを読み込むこともできますし、LOP内でSOPを作成することもできます。
LOPノードでSOPで作成するSOP Createを使ってみます。
内部はGeomertyコンテキストなのでSOPノードが使えます。
プリミティブな木を作ってみました。
もう一つ丸い形状でも作りました。
##2.Variantの作成
variantの使い方はCGwikiを踏襲しています。
不明なところは参照してみてください。
###Add Variantの追加
Add Variantノードを追加し、左側入力にPrimitiveを、右側入力に作成した2つのprim(オブジェクト)をに接続します。
下にExplore variantsを接続します。
###Variantの確認
Explore VariantsノードのModeをExplore Variantsを選択すると、Variantに設定したprimが並べて表示されます。
アセットの確認に便利です。
##3.Instancerによる配置
###Duplicateの追加
Instancerによる複製のためにDuplicateノードを追加します。
DuplicateノードからModify Source PrimitiveのSource Primitive are first duplicatesを選択、Primitive DefinitionのReference Type Make Instanceableにチェックを入れます。
Total NumberはVariantの数に応じて増減させます。
今回は2つなのでそのままです。
さらに下にSet VariantとInstancerを接続します。
Set VariantノードのPrimitivesにAdd Variantの_trees*_を入力し、Variant Setはmodelを選択します。
InstancerノードのTarget Points、 Location SourceをExternal SOPにし、SOP Pathにインスタンスを配置するポイントを指定します。
続いて、Prototype SourceにSecond inputを選択し、Prototype Primitivesに_trees*_を入力します。
ここでは別のSOP Createを作り、HeightField内にScatter pointsを指定しました。
次は、地形と木が分かれた状態なので合成します。
##4.Referenceによる合成
SOPとは異なり、LOPではオブジェクトの追加に複数の手法があります。
手法による違いは他の記事を参照してください。
今回はReferenceノードを使用します。
Referenceノードを作成し、地形のSOP Createノードを左側の入力に接続し、Instancerノードを右側の入力に接続します。
CompositonのReference TypeをReference From Multi-inputにします。
##おわりに
USDを使用すると大量のオブジェクト、複雑なシーンを効率的に管理できる一方、使用するための考え方の理解がハードルになっている感もあります。
Solarisを使用することでノードベースで視覚的な理解の助けになると思います。
極力シンプルな内容にすることで多くの人に触れてもらい、知見が拡大していくことを願っています。
###.hipファイル
作例のhipファイル(zip)です。
201213_advent_calendar.hiplc
※クリックでダウンロードできない場合、新しいタブで開くとできるかもです。
ファイルをダウンロードした方は、ぜひScene Graph Treeを開いてからノードを追ってみてください。
項目ごとの増減・変化が一覧できるので、USDの強みである構造化の理解がしやすいです。
(SOPでいうところのGeomerty Spread Sheetみたいに使っています)