Houdini 20.0 Solaris

Houdini Procedural: Ocean

レンダリング時に、低解像度入力ジオメトリから泡沫のある海を作成します。

On this page

Houdini Procedural: Ocean LOPでは、レンダリング時にテクスチャベイクなしで海を作成できます。ツールは、Karma CPUとKarma XPUの両方、 および サードパーティ製レンダラーで動作します。低解像度入力ジオメトリから、泡沫と泡のある高解像度の海を作れます。また、bgeo.scスペクトルテンプレートも必要です。このテンプレートはシーケンス全体である必要はなく、任意のフレーム1つだけで十分です。ツールはそのスペクトルを初期状態として使用し、アニメーションされた海を生成します。このプロシージャルは、TessendorfとEncinoの両方のスペクトルタイプおよびその組み合わせをサポートします。

最も便利なプロシージャルの使用方法は、 Oceans シェルフツールを使用して完全なセットアップを作成することです。Houdini 20で、Small OceanおよびLarge Oceanツールが、Houdini Procedural: Oceanで使用できるように変更されました。

プロシージャルにはマテリアルも含まれ、実際に2つのプリミティブがレンダリングされます。プロシージャルに生成され、cuspおよびfoam Primvarを考慮した反射/屈折をするオーシャンサーフェス(海面)と、海の内部の深度のフォールオフ(減衰)を処理する均一のボリュームです。そのマテリアルで Volume Density および Scattering Phase を変更すると、水のボリューム内部のフォールオフ(減衰)/散乱に影響を与えることができます。

基本セットアップ

基本セットアップによって、最も基本的な要件、ワークフロー、設定に慣れることができます。最初に、アクティブなデスクトップを Solaris に変更しましょう。このデスクトップは、Houdiniのメインメニューの最初のドロップダウンから選択することができます。

ネットワーク(以下で説明)には、推奨されるレイアウトが含まれています。

レンダリング環境のセットアップ

レンダリング環境には、カメラ、ライト、レンダリング設定が含まれます。Ocean Proceduralが正常に動作し、最終的に波が表示されるようにするには、このセットアップが欠かせません。

  1. Camera LOPから始めます。カメラはレンダリングだけでなく、ダイシングにも必要です。ダイシングとは、カメラのフラスタム(視野角錐台)内に高解像度の領域を作成する適応サブディビジョンプロセスで、フラスタム外の領域は低解像度になります。

  2. レンダリングで海を表示するには、光源が必要です。例えば、Karma Physical Sky LOPを追加することができます。光源の入力をカメラの出力に接続します。

  3. タブメニューを再度開き、検索フィールドにkarmaと入力してKarma Render Settings LOPおよびUSD Render ROPを検索します。2つのノードは、セットアップの最終レンダリングで組み合わせて使用されます。

  4. karmarendersettingsノードの 1番目 の入力を、Physical Skyの出力に接続します。これでKarmaがカメラを認識するため、最初の警告が消えます。

画像をクリックすると拡大します。

Ocean Proceduralのセットアップ

このネットワークブランチで実際の海を作成し、波をプレビューするノードを追加します。

  1. Oceansシェルフツールを開き、 Small Ocean をクリックします。Houdini Procedural: Oceanノードが作成され、自動的にその中に入ります。ここで、 stage に戻って残りのノードを追加します。波の設定については、スペクトルを適用するとその後の章で説明しています。

  2. タブメニューから、Preview Houdini Procedurals LOPを追加し、その入力を Ocean Procedural の出力に接続します。ビューポートでライブプレビューをレンダリングするには、このノードが必要です。Houdini Proceduralsは、レンダリング時にステージ上にプリミティブを作成したり変更するためのレンダラーに依存しない仕組みです。

環境と海を接続する

これで、環境と海の2つの個別のネットワークストリームが作成されました。次はこれらをまとめましょう。

重要なのは、ネットワーク内でのHoudini Procedural: Ocean LOPの位置です。プロシージャルでは、Karma Render Settings LOPCamera パラメータからカメラを受け取ります。つまり、レンダリング設定ノードをOcean Proceduralの 前に 配置する必要があります。

  1. karmarendersettingsの出力をhoudinioceanprocedural1の入力に接続します。

  2. houdinipreviewprocedurals1の出力をusedrender_rop1の入力に接続します。

ストリームを接続した後、ネットワークはこのようになっているはずです。

画像をクリックすると拡大します。

ネットワークには海に必要なすべてが含まれますが、波を生成するスペクトルがまだありません。ビューポートのレンダーデリゲートドロップダウンに移動し、例えば Karma CPU を選択すると、平坦で青みがかったグレーのサーフェスしか見えません。ここで、カメラの視点を調整して、海がよく見えるようにします。そのためには、 No cam というビューポートの2番目のドロップダウンに移動します。このメニューから、カメラを選択します。おそらくcameras/camera1でしょう。

参照オブジェクト

この手順はまったくのオプションですが、参照オブジェクトを使用すると、スケールや関係性をつかむのに役立ちます。便利な副産物として、部分的に沈んだオブジェクトで水のシェーダのAbsorption(吸収)効果を確認することができます(深度が増すにつれて水がより不透明になります)。

  1. Torus LOPなどのオブジェクトを追加し、Physical Skyとレンダリング設定ノードの間に配置して、接続します。

  2. オブジェクトを目的に応じてスケール、回転、配置しますが、カメラに表示されるようにしておきます。

これは、ビューポートのKarma CPUデリゲートでレンダリングした、テクスチャ付きトーラスを使用した例です。水から突き出ている細いリング(トーラスの一部)が見えます。オブジェクトの消え方にも注目してください。

スペクトルを適用する

平坦なサーフェス(上の図)を海に変えるには、スペクトルが必要です。Houdini Procedural: Oceanノードをダブルクリックして中に入ると、2つのGeometry OBJノード(ocean_surfaceおよびocean_interior)が表示されますサーフェスには、波と泡沫がある実際の海のネットワークが含まれています。これは、SOPベースの海に使用するものと同じセットアップです。内部はrender_grid Grid SOPを受け取り、押し出してソリッドオブジェクトにします。

  1. スペクトルのためには、ocean_surfaceの中に入り、save_spectra ROP Geometry Output SOPを選択します。

  2. Output File に移動し、 Open floating file chooser ボタンをクリックします。その後、スペクトルを保存するファイルとパスを定義します。ファイルタイプはsc.bgeoです。

  3. Save to Disk をクリックして、前に作成したファイルにスペクトルを書き出します。

    Valid Frame RangeRender Current Frame に設定されていることにお気づきかもしれません。Ocean Proceduralには全体的なシーケンスは必要なく、1つのフレームで十分です。

  4. stage レベルに戻り、プロシージャルノードを選択します。 Spectrum セクションの Spectrum File には、前に保存したファイルへのパスが既にあることが分かります。これは、エクスプレッションがocean_surfaceネットワークからパスを取得しているためです。また、スペクトルの評価時間と押し出したジオメトリを読み込むためのエクスプレッションもあります。

  5. Dicing セクションに移動し、ネットワークからcamera1ノードを Camera LOP Path フィールドにドラッグします。

    ビューポートレンダーデリゲートが既に Karma に設定されている場合、下の画像のような結果が表示されます。

  6. 海の品質を向上させるには、 Geometry に移動して Preview Quality0.4などに上げます。

スペクトルを再適用する

スペクトルの品質が十分でなかったり、異なる波のパターンにしたい場合があります。スペクトルを再適用して、レンダリングジオメトリを更新することができます。

  1. Ocean Proceduralのocean_surfaceコンテキストの中に入ります。

  2. スペクトルの品質を高めたい場合、oceansprectrum1を選択して Resolution Exponent を上げます。

  3. 異なるパターンを作成したい場合は、 Seed などを変更します。また Wind タブを開き、完全に新しい波のサーフェスを作成することもできます。

  4. save_spectraノードを選択し、 Save to Disk をクリックして既存のスペクトルファイルを上書きします。

  5. stage に戻り、Ocean Proceduralを選択します。 Spectrum セクションに移動し、 Reload Geometry をクリックして Spectrum File を更新します。

Whitecaps(白波)

品質を高めると、サーフェスは以下の画像のように見えるはずです。よく見えると、波の一部で白波が立っています。白波の量は Shading セクションで制御されており、そこには様々な cusp パラメータがあります。値を変更してより独特な効果を作成しましょう。例えば Cusp Intensity は、白波の明るさを制御します。1より大きい値も使用できますが、過剰に明るくなる可能性があります。デフォルトでは、 Cusp Min/Max がオンで、cusp Primvarが作成されます。このアトリビュートは、オーシャンサーフェスのシェーディングおよびディスプレイスメントに使用することができます。

Foam(泡沫)

cusp パラメータだけでなく、 Foam Particles チェックボックスもあります。このパラメータにも、ファイルパスが必要です。単一のファイルで十分な Spectrum File とは対照的に、 Foam Particles はシーケンス全体が必要です(250フレームの海のシーケンスには、泡沫のパーティクルを含む250フレームも必要)。泡沫のパーティクルは、カスタマイズ可能な泡沫のパターンを作成するのに使用され、サーフェス上に白いスポットとして表示されます。

ただし、泡沫のパーティクルは、Houdini Procedural: Ocean内部で作成および制御されます。

  1. プロシージャルLOPのocean_surfaceジオメトリノードの中に入ります。そこで、oceanfoam1 Ocean Foam SOPノードを選択します。

    あらかじめ設定してあるパラメータ値で通常は十分ですが、もちろん変更してかまいません。

  2. Particle Density で、泡沫のパーティクルの量を調整できます。パーティクルが増えるほど、サーフェスに密度の濃い泡沫が作成されます。パーティクル数は急速に増えるので注意してください。より詳細に制御したい場合は、 Solver タブを開いて Life Expectancy を下げてもよいでしょう。また、泡沫がパーティクルの最大数に到達するまでに数フレームかかることにも注意してください。最初の15または20フレームでは期待通りの結果が得られないことがあります。

  3. パーティクル数を制御するもう1つの方法は、 Conditions タブのパラメータを使用することです。 Min Cusp は波のchoppiness(うねり)を計算します。指定した値を上回るカスプ(尖)レベルの波のみが、泡沫を放出します。これは Min Velocity にも有効で、パラメータ値よりも速く動く海の波がパーティクルを作成します。

泡沫をエクスポートする

泡沫のパーティクルをOcean Proceduralで使用するには、泡沫のパーティクルをエクスポートする必要があります。

  1. bake_foam File Cache SOPを選択します。

  2. デフォルト設定のまま進めてもよいですし、独自のパスを作成することもできます。 Base Folder は、プロジェクトのディレクトリ($HIP)へのパスを使用し、geoフォルダを作成します。

    Version がオンのときは、完全なパスは$HIP/geo/v1になることに注意してください。そこにパーティクルがあります。

  3. Base Name には2つのトークンがあります。$HIPNAMEはプロジェクトの名前に置き換えられ、$OSはFile Cacheノードの名前です。ここでは、$OSbake_foamです。

  4. Base Name の横のドロップダウンが、sc.bgeoに設定されていることを確認します。

  5. Save to Disk または Save to Disk in Background をクリックし、パーティクルシーケンスをディスクに書き出します。後者の方法では、ファイルを書き出す前にプロジェクトを保存するように求められます。

パーティクルを接続する

Spectrum File とは異なり、泡沫のパーティクルは自動的に接続されないため、プロシージャルに泡沫のシーケンスを読み込むよう指定する必要があります。

  1. Houdini Procedural: Oceanノードを選択し、 Shading 領域に移動します。そこで、 Foam Particles をオンにします。

  2. Open floating file chooser ボタンを使用して泡沫のシーケンスをロードします。ファイル選択ダイアログで、 Show sequences as one entry がオンになっていることを確認します。このオプションは$F4トークンを使用して、現行フレームを更新し、適切なファイルをロードします。

また、 Foam Pattern タブのパラメータがアクセス可能になったことも分かります。値を変更して、泡沫のルックの変化を確認しましょう。 Displacement タブを使用すると、カスプ(尖)および泡沫のどちらにもディスプレイスメントを追加でき、平坦すぎたり突き出しすぎたルックを回避できます。

マテリアル

Ocean Proceduralを選択して Shading セクションを見ると、3つのマテリアルが表示されています。

  • Surface Material は海のルックを定義します。

  • Interior Material は、光が水を通過するときの光の挙動を担います。ここでは、Absorption(吸収)およびフォールオフ(減衰)の効果を制御することができます。

  • Proxy Material は、海をビューポートに表現するのに使用されます。

Jump to operator ボタンをクリックし、サーフェスおよびボリュームシェーダのある適切なサブネットワークに直接移動します。

海のサイズ

Small Oceanシェルフツールは、100m x 100mのサーフェスと10mの深度を作成します。これを変更するには、再度プロシージャルの中に入る必要があります。

  1. サーフェスのサイズを変更するには、ocean_surfaceの中に入り、render_grid Grid SOPを選択します。そこで、 Size パラメータを選択してオーシャンサーフェスを調整します。

  2. ocean_interiorノード内で深度を変更することができます。extrudevolume1を選択し、 Depth に新しい値を入力します。

ダイシング

非常に詳細なオーシャンサーフェスは大量のコンピュータリソースを消費しますが、多くの場合、実際に表示されるのはサーフェスのごく一部のみです。ダイシングとは、カメラの視点に基づいて、詳細レベルを動的に変更する手法です。カメラのフラスタム(視野角錐台)の外側にあるジオメトリの詳細レベルを下げ、フラスタムの内側の海はフル解像度で表示します。解像度のレベル間は滑らかに遷移します。カメラのパラメータを変更すると、このトランジション領域が再計算されます。この画像は、カメラのフラスタム周辺でメッシュ解像度が異なる領域を示しています。

カメラなしでは、バンプがいくつかあるサーフェスが見えるだけです。両方のカメラフィールドが入力されている場合のみ、すべてのディテールが表示されます。また、 Resolution がレンダリング画像の解像度と一致している必要もあります。

Downsampling は、プロセスのプレビュー(ボリュームシェーダや全体的なルックの評価など)を高速化するのに大変効果的です。このパラメータはスペクトルデータを間引きますが、他の設定はすべて維持されます。 Downsampling レベルに応じて、サーフェスの粗さが変化します。

レンダリング

Note

Houdini Procedural: Oceanは、Karma CPUおよびXPUだけでなく、サードパーティ製レンダラーでも動作します。

Houdini Procedural: Ocean LOPを使用したシーンのレンダリングは、Karmaの標準ワークフローと同じです。karmarendersettingsノードで、以下のように設定していることを確認します。

  • 適切な Camera および Rendering Engine を選択

  • ノイズを削減するのに十分な数の Path Traced Samples を設定

  • Image Output ▸ AOVs (Render Vars) タブですべてのAOVを定義

  • Rendering ▸ Camera Effects タブでモーションブラー設定をオン

設定が完了したら、usdrender_rop1を選択し、以下を選択します。

  • Render to MPlay などのレンダーメソッド

  • Render Specific Frame Range などの Valid Frame Range

Solaris

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤーをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaレンダリング

チュートリアル