Solaris は、Houdini に組み込まれた USD ベースのシーン構築・ルックデブ・レンダリング機能の総称です。LOP(Lighting Operator)と呼ばれるノードをつなぐとノードごとに USD のシーンが組み上がり、内蔵レンダラーの Karma で描画したり、USD ファイルとして書き出したりできます。
本記事では、SOP で作った小物を Solaris に取り込み、マテリアル・カメラ・ライトを付けて Karma でレンダーし、USD に書き出すまでを通して解説します。Stage・Layer・Prim などの考え方は理論編の USD入門|ゲームスタジオで何が変わるか・段階移行と現状 にまとめてあるので、あわせて読むと手順の意味がつかみやすくなります。ノード名・メニュー名は執筆時点の最新版 Houdini 22.0(2026年7月リリース)で確認しており、古い解説とはバージョンによって表記が異なります。
夕宮たいだふぁ……みんな〜、今日は Houdini の Solaris を実際に触ってみるよぉ。理屈はいったん横に置いて、1枚描くところまで行こ〜。
この記事で作るものと前提
ひとことで:SOP の小物を1つ取り込み、Karma で1枚描いて USD に書き出すまでを通します。
完成形は、次の LOP を上から1本につないだネットワークです。
| 順番 | ノード(LOP) | 役割 |
|---|---|---|
| 1 | SOP Import | SOP のジオメトリを USD のプリムにして取り込む |
| 2 | Material Library | マテリアルを定義する |
| 3 | Assign Material | マテリアルを割り当てる |
| 4 | Camera | レンダー用のカメラを作る |
| 5 | Dome Light/Light | 環境光とキーライトを作る |
| 6 | Karma Render Settings | カメラ・解像度・出力先を設定する |
| 7 | USD Render ROP | Karma で画像を書き出す |
USD ファイルの書き出しには、別に USD ROP LOP を使います。SOP で木箱程度のモデルを作れることが前提です。無償の Houdini Apprentice でも試せますが、レンダー解像度などに制限があります(SideFX の FAQ)。


Solaris の画面と LOP ネットワーク
ひとことで:/stage の中で LOP ノードを上から下へつなぐと、ノードごとに USD のステージが組み上がります。
メインメニューバーの最初のドロップダウン(初期状態は Build)で Solaris を選ぶと、Solaris 用のデスクトップに切り替わります。ビューポートとネットワークエディタのほか、USD の中身を確認する Scene Graph Tree と Scene Graph Details のペインが並びます。LOP ノードは、シーンに用意されている /stage ネットワークの中に Tab メニューで置いていきます。
LOP が SOP と違うのは、主に次の3点です。
- 各ノードの出力は合成済みの USD ステージ:入力のステージを受け取り、変更を加えたステージを出力します
- 編集はメモリ上の一番上のレイヤー(アクティブレイヤー)に書かれる:ディスクから読み込んだレイヤーは書き換えず、上に重ねて上書きします
- ビューポートはディスプレイフラグが立ったノードの結果を表示する:どこまでの結果を見るかはフラグで決まります
書き込み先のレイヤーが変わるとノードの外枠の色も変わるので(ネットワークエディタの View メニューで切り替え)、レイヤーの切れ目を目で追えます。



ほよ? ノード1個ごとに、ステージがまるごと出てくるんだぁ。SOP と似てるけど、流れてるのは USD なんだねぇ。
SOP のジオメトリを持ち込む
ひとことで:既存の SOP は SOP Import LOP で取り込み、LOP の中でモデリングするなら SOP Create LOP を使います。
SOP Create は、ノードの中に SOP ネットワークを持つタイプです。ほかに、/obj レベルのオブジェクトをまとめて取り込む Scene Import LOP もあります。ここでは SOP Import LOP を使います。
- ① /obj に Geometry ノード
crateを作って中で木箱を作り、最後に Null SOP を置いてOUTと名付けます - ②
/stageに SOP Import を置き、SOP Path に/obj/crate/OUTを指定します - ③ Import Path Prefix を
/geo/crateのような置き場所のパスに変えます
Import Path Prefix の既定値は /$OS(ノード名)で、そのままだと /sopimport1/mesh_0 のようなパスになります。SOP 側に path や name の文字列アトリビュートがあれば、その値がプリムのパスに使われます。主なアトリビュートの変換先は次のとおりです。
| SOP のアトリビュート | USD での名前 |
|---|---|
| P | points |
| N | normals |
| uv | primvars:st(Translate UV Attribute to ST による変換) |
| Cd | primvars:displayColor |
パスを後から変えると、マテリアルの割り当てや他ファイルからの参照が切れます。アセット命名・バージョン規則|チームで事故らないルール作り を参考に、最初に決めておきましょう。変換規則の詳細は SideFX 公式の SOP Geometry I/O にあります。
シーングラフの見方
ひとことで:Scene Graph Tree で階層、Scene Graph Details で値、Scene Graph Layers でレイヤーの重なりを確認します。
- Scene Graph Tree:プリムの階層を表示します。初期設定ではディスプレイフラグではなく選択中のノードの出力を表示するので、ノードを順にクリックすると変化を追えます
- Scene Graph Details:選んだプリムの値を表示します。文字色は灰色が未設定、オレンジがスキーマの既定値、青が設定値、緑がアニメーション付きの値です。
primvars:stがあるかどうかなどを確かめます - Scene Graph Layers:ステージを構成するレイヤーを表示します。選択中のノードが変更したレイヤーは緑で示されます
Scene Graph Tree で切り替えた表示・非表示は、ビューポート専用の上書きレイヤーに記録されるだけで、USD にもレンダーにも反映されません。本当に隠すなら Prune LOP などで USD に書き込みます。
ノードを右クリックして LOP Actions > Inspect flattened stage(または Inspect active layer)を選ぶと、USD の中身を usda のテキストで読めます。各ノードが何を書き込んだかを覚える近道です。



ツリーは「形」、ディテールは「値」、レイヤーは「重なり」を見る場所だよぉ。迷ったら usda のテキストを開いちゃうのが早いんだぁ。
マテリアルを作って割り当てる
ひとことで:Material Library LOP の中に Karma Material Builder を作り、Assign Material LOP でプリムに割り当てます。
- ① SOP Import の下に Material Library LOP をつなぎ、ダブルクリックで中に入ります
- ② Tab メニューで Karma Material Builder を作り、名前を
crate_mtlにします。Builder の中の Tab メニューは Karma・MaterialX・USD Preview 系のノードに絞られます - ③ Builder の中で、MtlX Standard Surface などの Base Color・Metalness・Specular Roughness を調整します
- ④ U キーで
/stageに戻り、Assign Material LOP の Primitives に割り当て先、Material Path に/materials/crate_mtlを指定します
マテリアルは既定で /materials/ の下に作られます。手早く質感を確認したいだけなら、ビューポート上のジオメトリにドラッグして割り当てられる Quick Surface Material LOP も便利です。
注意点は、GPU も使う Karma XPU が Principled Shader などの VEX シェーダーに対応していないことです。Material Library が自動生成する USD Preview Surface の近似マテリアルの影響で、XPU でもそれらしく見えてしまうことがあります。XPU を使うなら、最初から MaterialX ベースで作ります。



ぁぅ……それっぽく見えちゃうのが、いちばんこわいんだぁ。MaterialX で作っておけば安心だよぉ。気をつけてねぇ。
カメラとライトを置く
ひとことで:Camera LOP とライト系の LOP でプリムを作り、ビューポートで構図と明るさを決めます。
Camera LOP でカメラのプリムを作り、Primitive Path を /cameras/render_cam のように整理しておきます。構図は、ビューポート右上のカメラメニュー(初期状態は Persp)でカメラを選んで覗き、Link Camera/Light to View をオンにしてから視点を動かすと、カメラが視点に追従します。この項目は 22.0 で Tie View To Camera/Light から改名されたもので、バージョンによって表記が異なります。解像度はカメラではなく、レンダー設定側で決めます。
ライトは Light LOP の Type で種類(Point・Rectangle・Disk・Sphere・Distant など)を選び、HDRI の環境光は Dome Light LOP の Texture に画像を指定します。明るさは Intensity でおおまかに決め、2のべき乗で効く Exposure で微調整します。
ライトが1つもないと、ビューポートもレンダーもヘッドライトを自動で足すため、ライトなしでも明るく見えます。確認は必ずライトを置いてから行います。考え方は ライティング基礎|DCCとエンジンの差を切り分ける実践ガイド で解説しています。
Karma でレンダーする
ひとことで:ビューポートを Karma に切り替えて確認し、Karma Render Settings LOP と USD Render ROP で本番の画像を書き出します。
ビューポートの Viewport Options メニューでレンダーデリゲートを Karma CPU か Karma XPU に切り替えると、Karma の結果を見ながら作業できます(初期状態の描画は Vulkan ベースの Houdini VK です)。ビューポート用の設定は Display Options(ビューポート上で D キー)の Render タブにあります。本番の画像は次の手順で書き出します。
- ① ライトの下に Karma Render Settings LOP をつなぎます。
/Renderの下にレンダー設定のプリムが作られます - ② Camera・Resolution・Output Picture(例:
$HIP/render/crate.$F4.exr)を指定します - ③ Engine Settings で CPU か XPU を選びます。サンプル数は CPU が Primary Samples、XPU が Path Traced Samples です
- ④ USD Render ROP LOP をつなぎ、Render to MPlay で確認してから Render to Disk で書き出します
USD Render ROP は、ステージを一時的な USD ファイルに書き出し、コマンドラインレンダラーの husk で描画します。Tab メニューで karma と入力して出るセットアップ用のツール(公式では Karma (Setup) と表記)を使うとこれらをまとめて置けますが、22.0 では Render Pass LOP も作られるなど、構成はバージョンによって異なります。古い解説に出てくる Karma LOP は、21.0 から非推奨です。
| 項目 | Karma CPU | Karma XPU |
|---|---|---|
| ハードウェア | CPU のみ | CPU と GPU(GPU は現状 NVIDIA のみ) |
| シェーダー | VEX・MaterialX・USD Preview | MaterialX・USD Preview |
| 向く場面 | VEX 資産を使う、サンプリングを細かく制御する | GPU を活かして速く回す |
CPU と XPU は結果のピクセル単位の一致が保証されないため、本番で使うほうを決めたら使い続けます(詳細は公式の Karma User Guide)。色の扱いは DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務 を参照してください。





ビューポートも本番も、同じ Hydra の仕組みで描いてるんだぁ。確認しながら詰めていけるの、便利でしょ?
USD ファイルとして書き出す
ひとことで:USD ROP LOP の Output File に保存先を入れて Save to Disk を押すと、ステージが USD ファイルになります。
- ① 書き出したい範囲の最後のノードに USD ROP LOP をつなぎます
- ② Output File に保存先(例:
$HIP/usd/crate_scene.usd)を指定します。拡張子を.usdaにするとテキスト形式になります - ③ Save to Disk を押します
既定の Save Style(Flatten Implicit Layers)では、メモリ上の匿名レイヤーが保存先を持つレイヤーにまとめられ、参照やバリアントは保たれます。ジオメトリを別ファイルにしたいときは、SOP Import の Layer Save Path に保存先を入れます。既定の出力プロセッサー Use Relative Paths が参照を相対パスにするので、フォルダーごと移動しても参照が切れにくくなっています(詳細は公式の Writing out USD)。
レイヤーを部署ごとに分ける設計は Houdini Solaris応用|アセット化・バリアント・レイヤー設計、FBX を含む他ツールへの受け渡しは HoudiniでFBX/USDを書き出す で扱います。
よくある失敗と対処



「映らない」ときに、いきなり設定をいじりまわすのはダメだよ。まずディスプレイフラグとプリムのパスを見てねぇ。
- ビューポートと Scene Graph Tree の内容が合わない:ツリーは選択中のノード、ビューポートはディスプレイフラグのノードを表示しています。フラグの位置を確かめます
- プリムが /sopimport1/mesh_0 のような名前になる:Import Path Prefix が既定のままです。マテリアルを割り当てる前にパスを決めます
- テクスチャが貼られない:Scene Graph Details で
primvars:stの有無を確かめます。SOP 側にuvが無い可能性があります - XPU だけ質感が違う:VEX ベースのマテリアルを使っていないかを確かめ、MaterialX ベースで作り直します
- ライトを置いていないのに明るい:ヘッドライトが自動で足されています。ライトを置いてから明るさを判断します
- 古い解説のノードが見つからない:Karma LOP は 21.0 から非推奨になり、22.0 では Instancer LOP が Copy to Points LOP に、Layout LOP が Paint Instances LOP に改名されています
チェックリスト
- [ ] Solaris デスクトップに切り替え、
/stageで作業している - [ ] Import Path Prefix か
pathアトリビュートで、プリムの置き場所を決めた - [ ] Scene Graph Details で
primvars:stやnormalsを確認した - [ ] マテリアルは Karma Material Builder など MaterialX ベースで作った
- [ ] 意図したライトを置いている(ヘッドライト頼みになっていない)
- [ ] Karma Render Settings の Camera・Resolution・Output Picture を設定した
- [ ] 本番で使うエンジン(CPU/XPU)を決めた
- [ ] USD ROP で書き出し、usda のテキストなどで中身を確認した
次に読む記事
- Houdini Solaris応用|アセット化・バリアント・レイヤー設計:本記事の続き。アセット化からパイプラインまで
- USD入門|ゲームスタジオで何が変わるか・段階移行と現状:Stage・Layer・Prim の理論編
- HoudiniでFBX/USDを書き出す:他ツールやエンジンへの受け渡し
- ライティング基礎|DCCとエンジンの差を切り分ける実践ガイド:ライティングの考え方
- DCC→エンジンの色合わせ|リニア・sRGB・色空間の実務:色空間のそろえ方



ふぁ……おつかれさま〜。1枚描けたら、Solaris の基本はもう回せてるよぉ。次は応用編で、アセット化やバリアントに進んでみようねぇ。




