Houdini 20.0 レンダリング

ワークフローの一部としてのレンダリング

On this page

概要

Houdiniのレンダリングを自動化ワークフローに統合するには、一般的には以下のコマンドラインのどれか、または両方とも必要となります。

  • hythonhbatchコマンドライングプログラムは、コマンドラインからHoudini PythonまたはHScriptを(個々に)実行して、HoudiniのGUIでできることほとんど(レンダーノードからIFDファイルを生成するなど)をコマンドライン上から行なうことができます。

  • MantraレンダラーはIFDファイル(Mantraのシーン記述フォーマット)を受け取り、それを使って画像をレンダリングします。

この2つの手法の主な違いは、hbatchはHoudiniライセンスを使用するのに対して、Mantraはレンダーライセンスのみを使用します。共通する一般的なワークフローは、1台のホストを使ってアニメーションフレームのIFDファイルを生成し(1つのフルライセンスを使用)、そのレンダリングをMantraインスタンスでファーム上で計算します(安いレンダーライセンスを複数使用)。

windows

Windowの場合、 Start ▸ All Programs ▸ Side Effects Software ▸ Houdini x.x.x ▸ Command Line Tools で、環境変数とHoudiniプログラムのパスを設定したコマンドラインシェルが開きます。

全般Tips

  • Shellレンダーノードと一緒にPre Postレンダーノードを使えば、スクリプトを実行して、レンダリング前にサーバーからジオメトリファイルを読み込み、レンダリング後にレンダリング画像をサーバーに保存することができます。

  • 他のたくさんのネットワークタイプと同様に、わかりやすい説明の名前でNullレンダーノード(例えば、FINAL_OUTPUT)をレンダーネットワークの最後に追加すれば、常に最後のノードを一貫して参照できるようになるので良いやり方です。

  • テイクを指定してレンダーノードをレンダリングすることができます。これはレンダーパスをセットアップする方法が簡単です。

レンダーの依存関係

レンダーノードをお互いに接続して依存関係のネットワークを構築すれば、レンダーの起動順を制御することができます。入力と出力は任意の数だけ接続することができます。

ノードをレンダリングすると、まず始めにHoudiniは入力ノードすべてをレンダリングします。

デフォルトでは、Mantraはコマンドラインからコールされると、レンダリングするノードの任意のフレームをレンダリングする前に、入力ノードの フレームすべて をレンダリングします。 つまり、ノードBがノードAに依存していれば、ノードBの任意のフレームをレンダリングする前にノードAのフレームすべてがレンダリングされます(A1、A2、…、An、B1、B2、…、Bn)。

Note

例えばレンダーノード上の Render ボタンをクリックするといったようにHoudiniでインタラクティブにレンダリングを開始する場合、 Houdiniは-I(“interleaved”)フラグを使ってMantraを実行するので、Mantraはノード単位ではなくフレーム単位で依存関係をレンダリングします。 これによって、インタラクティブに作業している時に単一フレームの結果をもっと速く表示させることができます。 つまり、インタラクティブレンダリングとコマンドラインレンダリングのデフォルトの挙動が異なります。

コマンドラインで-Iフラグを使用することでフレーム単位の挙動(A1, B1, A2, B2, …, An, Bn)を得ることができます。

通常であればHoudiniでは、子ノードの Valid Frame Range パラメータを“Render Frame Range Only (Strict)”に設定しない限りは、依存関係をレンダリングすると入力ノードの Frame Range パラメータは無視されます。“Render Frame Range Only (Strict)”では、Houdiniは入力ノードのフレーム範囲内でのみフレームを出力します。

例:

compositeは、char_diffusechar_specularbackgoundに依存しています。char_diffusechar_specularはどちらもcharacterに依存しています。compositeをレンダリングする場合、レンダリング処理の順番は、以下のようになります:

  1. characterのフレームすべて

  2. char_diffuseのフレームすべて

  3. char_specularのフレームすべて

  4. backgroundのフレームすべて

  5. compositeのフレームすべて

  • Houdiniでは循環依存関係を作成することはできません。

  • サブネットワーク内側のノードよりも先にサブネットの入力のレンダーノードすべてがレンダリングされます。

  • サブネットワークでは、同じフレームまたはフレーム範囲でその“最終の”ノード(出力に何も接続されていないレンダーノード)すべてをレンダリングします。

  • サブネットワークに2つ以上の“最終の”ノードがあれば、 それらのレンダリングの順番は任意 となります(ノードを作成した順番)。順番を決めるなら、Mergeレンダーノードノードを使って最終のレンダーノードを結合して、そのMergeノードの入力を利用して順番を決めます

  • サブネットワーク内のレンダーノードは子のレンダーノードとサブネットワークの入力のレンダーノードとは直接、接続されていません。そのため、サブネットワークで何の入力もないSwitchやBatchレンダーノードを使ってもサブネットワークの入力に何も影響がありません。

To...Do this

ノードを他のノードの出力に依存させる

“親”のレンダーノードの出力を、依存させるノードの入力に接続します。

レンダーノードに2つ以上の入力があれば、Houdiniは順番に入力をレンダリングします。兄弟関係にある入力は、お互い依存関係がありません。

依存関係修正レンダーノード

いくつかのレンダーノードは依存関係を管理しますが、それらのノード自身は何もレンダリングしません。

  • Pre Postは、“pre-render”と“post-render”のブランチを追加して、 branches to run before/after a “main”ブランチの前/後を実行することができます。

  • Batchは、要求したフレーム順とは関係なく、1パスの連番で入力のフレームをレンダリングします。

  • Frame Dependencyは、フレームを他のフレーム時間に依存させます。

  • Mergeは、依存関係すべてをまとめて結合してネットワークを読みやすくします。

  • Switchは、依存関係にする入力の切り替えをします。

ワークフローレンダーノード

  • Alembicは、シーンをAlembicファイルに“出力”します。

  • Mantra Archiveは、シーンをレンダラーで(プロシージャルシェーダを使って)読み込むのに最適化なジオメトリフォーマットを“出力”します。

  • Geometryは、Houdiniのシーンの一部をジオメトリファイルに“出力”します。

  • Shellは、スクリプトまたはコマンドを実行します。

レンダーパス

レンダーパス毎に別々のオブジェクトを表示/非表示する方法が2つあります:

  • テイク別に、レンダーパス毎に可視性と設定をセットアップし、そのテイクを使ってレンダリングするレンダーノードを設定します。

  • パスで可視にするオブジェクトを指定したバンドルやワイルドパターンを作成します。Mantraノードの Objects タブを使って、レンダーノードがレンダリングするオブジェクトを指定します。Houdiniのワイルドカードは名前を含めたり、除外することができます。

Tip

良いやり方は、レンダーパス毎に別のレンダーノードを作成することです。しかし、単一のレンダーノードを使って、そのノードの Take パラメータをスクリプト化する方法もあります。

IFDやRIBファイルの生成

IFDはHoudiniで生成されるシーン記述フォーマットであり、レンダリング画像やアニメーションシーケンスを生成するためにMantraで使用します。IFDファイルにはシーンの完全な記述とレンダリングの設定が含まれています。

RIBはIFDをRenderManとRenderMan互換レンダラー用にしたものです。

レンダー出力ノードをセットアップして、直接画像をレンダリングするのではなく、ファイルに保存します。これは、他の時間で、他のマシンから、またはレンダーファームでレンダリングができる柔軟性があります。詳細は、ネットワークレンダリングを参照してください。

To...Do this

画像の代わりにIFDを出力するようにレンダーノードをセットアップする

  1. レンダーノードの Driver タブから Disk File チェックボックスをオンにして、ファイル選択アイコンをクリックしてファイルパスを設定します。

  2. Render ボタンをクリックするとIFDファイルが保存されます。

コマンドラインからIFDファイルをレンダリングする

mantra -f <<filename>>.ifd <<output_filename>>.pic

(-fオプションを指定しなかった場合、MantraはstdinからIFDを読みます。)

コマンドラインで.hipファイルからIFDファイルを保存する

hbatchコマンドラインプログラムを使って.hipファイルを読み込み、レンダーノードを実行します。

  1. 上記のようにIFDを出力するようにレンダーノードをセットアップします。

  2. .hipファイルをhbatchに読み込みます。

    hbatch myjob.hip
    
  3. hbatchコマンドラインで、renderコマンドを使ってレンダーノードを実行します。

    / -> render my_render_node
    / -> quit
    

コマンドラインから直接.hipファイルをレンダリングする

$HFS/binにあるhrenderスクリプトを使います。このスクリプトはcshで記述してあります。このスクリプトをWindowsで使うには、CygwinのようなUNIXライクの環境を使う必要があります。

このスクリプトはhbatchを使っているので、Houdiniライセンスを使用します。反対に、MantraでIFDをレンダリングする時は、レンダリングライセンスのみを使います。

コマンドラインでのMantraの使い方

IFDファイルがあれば、コマンドラインからMantraを使って、それをレンダリングすることができます。例:

mantra -f frame0001.ifd rendered_frame0001.pic

(-fオプションを指定しなかった場合、MantraはstdinからIFDを読みます。)

mantra -hは利用可能なオプションの一覧を表示します。

コマンドラインのオプションのほとんどがプロパティを上書きすることができます。つまり、シーンカメラ上にこれらのプロパティを設定して、必要に応じてコマンドラインでそれらのプロパティを上書きすることができます。

コントロールオプション

-H hostlist

レンダリングを実行するホストをカンマで区切ったリストを指定します。例えば、-H chili,cayenne

-n val

ネットワークレンダリングを使ってレンダリングするプロセスの数(お勧めしません。-jを使うことを薦めます)。

-N maj.min(.ren)

ネットワークレンダリングをする時、リモートホストは最低でもMantraのこのバージョンで動いている必要があります。

-j numthreads

スレッドの数(-j 0は最大のスレッド数を使います)を指定します。

-f file

stdinではなくファイルからIFDを読み込みます。

指定したファイルの拡張子が.gz.scであれば、Mantraは、そのファイルが圧縮されていると判断します。

さらに、ファイルシステムプラグイン(FS)が使われているので、opdef:, op:またはhttp:プロトコルを使用してIFDファイルを指定することができます。

-e none|basic|full

レンダリング時にSOPネットワークからジオメトリを生成するEngine Proceduralシェーダの使用を有効または無効にします。

デフォルトはbasicではなくnoneです。その理由は、ジオメトリを生成するプロシージャルを有効にするには、MantraでSOPネットワークを評価する環境をセットアップしなければならなくて、それは起動時のパフォーマンス(メモリと時間の両方)に影響するからです。この影響は、環境によって異なります。あるスタジオのEngineモードではプロセス起動時間が12秒でも、他のスタジオでは0.5秒以内だったりします。

-eの引数には、以下のどれかを指定します:

none

Engine Proceduralの使用を無効にします(デフォルト)。

basic

Proceduralシェーダがカーブまたはポイント(enginecurvegenenginepointgen)だけを生成します。fullとは違い、これはHoudini Engineライセンスを消費しません。

full

Proceduralシェーダがサーフェスジオメトリを生成する(Mantra: Houdini Engine ProceduralInstance with Hscript Procedural)ので、Houdini Engineライセンスを使用します。

シーンにSOPプロシージャルがあっても、-eを使ってそれに適切な設定でレンダリングしないと、シェーダはエラーメッセージをプリントし、何もジオメトリを生成しません。ただし、他のレンダリングは正常に動作します。

-F

すべてのオプションの後の最初の引数が、レンダリングするIFDファイル(出力画像の代わりに)の名前を指定することを示します。

-o file

詳細な出力を指定したファイルに出力します。

Windowsでは、ファイル名の代わりにconsolewaitconsolenowaitを使うことができます。consolewaitは出力用にコンソールウィンドウを開きます。次のフレームがレンダリングされる前にウィンドウを閉じなければなりません。これは、速く移動してしまう出力を読むことができますが、ウィンドウを子守する必要があります。consolenowaitはコンソールウィンドウを開き、フレームの処理が終わるとすぐに閉じます。遅いレンダリングなら、出力を読むことができるかもしれません。そしてフレーム毎にウィンドウを閉じるためにクリックする必要がありません。

-p file

詳細な出力を指定したファイルに追加します。

-P pyfilter

Pythonフィルタープログラムを指定します(Pythonのフィルタリングを参照)。

-V string

stringに設定する内容は以下のとおりです:

0-9

renderer:verbose IFDプロパティを設定。

a

renderer:alfprogress IFDプロパティを設定。

p

renderer:vexprofile IFDプロパティを1に設定。

P

renderer:vexprofile IFDプロパティを2に設定。

Windowsでは、もし出力がポップアップコンソールウィンドウに表示されたら、-o consolewaitを使ってウィンドウを開いたままにすることができるので、詳細な出力を読むことができます。

レンダリングオプション

-r

renderer:renderengineraytraceに設定します。

-q

レンダリング品質を設定します(お勧めしません。-Qを使うことを薦めます)。

-Q arg

レンダリング品質を設定します。引数を指定するならば、以下の通り

  • b - モーションブラーを無効にします。

  • B - レイトレースのモーションブラーを無効にします。

  • d - 被写界深度を無効にします。

  • r - すべてのレイトレースを無効にします。

  • i - Irradiance/Occlusionを無効にします。

: -Q Bd

-s factor

renderer:shadingfactorプロパティを設定します。

-L factor

renderer:rayshadingfactorプロパティを設定します。

-M memory

renderer:geocachesizeプロパティを設定します。

-S filename

レンダリングに使用するスタイルシートファイルを指定します。

-v variance

image:varianceを指定した値に設定します。

-A

image:samplesを(1,1)に設定します。

-B size

image:bucketプロパティを設定します。

-J jitter

image:jitterプロパティを設定します。

-c coving

object:covingプロパティを設定します。

画像オプション

-i

強制的にインタラクティブレンダリングをします(MPlayでレンダリング)。

-I

いろいろな画像オプションを設定します(カンマ区切りのリストを使用)。

  • resolution=WxH – image:resolutionを設定します。

  • jitter=V – image:jitterを設定します。

  • subpixel=0|1 – image:subpixelを設定します。

  • sample=WxH – image:samplesを設定します。

  • sample=Nsample=NxNと同じです。

例:-I resolution=100x80,bucket=16,sample=4,subpixel=1

-w width, -h height

画像の幅/高さを指定します(お勧めしません。-Iを使うことを薦めます)。

-b depth

画像平面のデフォルトの量子化を指定します。

-z

デプス画像をレンダリングします。各ピクセルで 平均的な 深さの値を使います。

-Z

デプス画像をレンダリングします。各ピクセルで一番 近い 深さの値を使います。

-u object[:attrib]

renderer:uvobjectを設定します。任意でrenderer:uvattributeプロパティを設定することもできます。

出力ログ

  • -Vを使えば、詳細レベル(1から9)を設定することができ、-oを使えば出力ログをファイルまたはデバイスに出力することができます。

  • 出力ログに書き込まれる時間の測定方法が色々あります。

    Frame Wall Clock Time

    フレームのレンダリングにかかった実際の時間(壁時計を見て測定する時間)。

    Total Wall Clock Time

    全体的にレンダリングにかかった実際の時間(この時間には実際のフレームレンダリングの前後にかかった作業時間を含みます)。

    Total CPU Time

    フレームのレンダリングに実際にCPU(s)が費やした時間。コアが複数あれば、この時間はWall Clock Timeよりも長くなります(例えば、理論的には、8個のCPUがあれば、この時間はWall Clock Timeの8倍になります)。

    System CPU Time Only

    Mantraがオペレーティングシステムのコール(例えば、ディスクからのデータの読み込み、メモリの割り当て)に費やした時間。この時間は、OSがデバイスを待った時間(例えば、遅いネットワークからファイルを読み込むのに費やした時間)を含みません。

hythonhbatch

  • hythonを実行すれば、Houdini Object Modelパッケージ(hou)が利用可能なPythonコマンドライン環境が起動します。

    % hython myscene.hip
    Python ...
    Houdini ... hou module imported.
    Type "help", "copyright", "credits" or "license" for more information.
    >>> rnode = hou.node("/out/mantra1")
    >>> help(rnode)
    >>> rnode.render()
    
  • hbatchを実行すれば、HScriptコマンドライン環境が起動します。これは実行したいアクションのほとんどをスクリプトにすることができます。

    % hbatch myscene.hip
    hbatch Version ... (Compiled on ...)
    / -> cd out
    /out -> help render
    /out -> render mantra1
    

    hbatch -hは利用可能なオプションの一覧を表示します。

マルチスレッドレンダリング

Mantraはマルチスレッドレンダリングです。つまり、単一のMantraでも利用可なプロセッサーを使ってレンダリングを高速化します。デフォルトではMantraはシステムのプロセッサーの数を検出してプロセッサすべてを使ってスレッド処理を開始します。

Mantraレンダーノードの Properties タブのレンダリングサブタブにある Use Max Processors チェックボックスを外せばマルチスレッドレンダリングがオフになります。また、 Thread Count を設定することスレッドの数を手動で設定することができます。

シンプルなネットワークレンダリング

Mantraにはレンダリングをローカルネットワーク上の複数のマシンに分散させる単純なメソッドがあります。これは、1枚の画像をレンダリングする時にその場しのぎで高速化するのに役に立ちます。もっと強固で多機能なネットワークレンダリングを行なうには、HQueueやAlfredなどのレンダーキューマネージャーを使います。

-Hオプションでレンダリングするホスト名を指定することができます。これを使えば、コマンドラインやMantra出力ドライバの Main タブの Command パラメータでからIFDファイルをレンダリングすることができます。

例:

mantra -H localhost,clinton,beijing,finland

このコマンドラインは、localhostclintonbeijingfinlandという名前の4つのサーバー上でMantraを起動します。各マシンは、タイルをレンダリングして、それをホストマシンに戻して最終画像を組み合わせます。

  • これは1枚の画像のレンダリング用にのみ動作します。

  • すべてのマシンは、同じバージョンのHoudiniライセンスソフトウェア(hserver)を起動している必要があります。指定したマシンの1つが別のバージョンのhserverの場合やhserverがまったく起動していない場合は、レンダーがハングしてしまいます。

    hserver -lコマンドを実行することで、マシン上で起動しているhserverのバージョンを確認することができます。

    % hserver -l
    Hostname:       clinton [Linux (little endian)]
    Uptime:         21:29:16        [Started: Wed Aug 15 18:11:48 2007]
    License Server: internal
    Server Version: sesinetd9.0.634
    Version:        Houdini9.0.688
    ...
    

    Version:の値のメジャーとマイナー(この例では、9.0)がすべてのマシンで同じでなければなりません。

レンダーファームの管理

HQueueは、複数のサーバー上でタスクを分散、監視、管理をするための汎用的なジョブ管理システムです。これは、Houdiniから投入したレンダリングとダイナミクスシミュレーションの管理に特化していますが、他のアプリケーションからのジョブも取り扱えるようにカスタマイズすることができます。

HQueueのインストールと使い方に関する詳細は、HQueueのオンラインドキュメントを参照してください。

レンダリング

Mantraユーザガイド

基本

ライティング

次のステップ

導師レベル

他のレンダラー