On this page |
概要 ¶
Houdiniのレンダリングを自動化ワークフローに統合するには、一般的には以下のコマンドラインのどれか、または両方とも必要となります。
-
hython
とhbatch
コマンドライングプログラムは、コマンドラインから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_diffuse
、char_specular
、backgound
に依存しています。char_diffuse
とchar_specular
はどちらもcharacter
に依存しています。composite
をレンダリングする場合、レンダリング処理の順番は、以下のようになります:
-
character
のフレームすべて -
char_diffuse
のフレームすべて -
char_specular
のフレームすべて -
background
のフレームすべて -
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を出力するようにレンダーノードをセットアップする |
|
コマンドラインからIFDファイルをレンダリングする |
mantra -f <<filename>>.ifd <<output_filename>>.pic ( |
コマンドラインで |
|
コマンドラインから直接 |
このスクリプトは |
コマンドラインでの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シェーダがカーブまたはポイント(enginecurvegen
とenginepointgen
)だけを生成します。full
とは違い、これはHoudini Engineライセンスを消費しません。
full
Proceduralシェーダがサーフェスジオメトリを生成する(Mantra: Houdini Engine ProceduralとInstance with Hscript Procedural)ので、Houdini Engineライセンスを使用します。
シーンにSOPプロシージャルがあっても、-e
を使ってそれに適切な設定でレンダリングしないと、シェーダはエラーメッセージをプリントし、何もジオメトリを生成しません。ただし、他のレンダリングは正常に動作します。
-F
すべてのオプションの後の最初の引数が、レンダリングするIFDファイル(出力画像の代わりに)の名前を指定することを示します。
-o file
詳細な出力を指定したファイルに出力します。
Windowsでは、ファイル名の代わりにconsolewait
やconsolenowait
を使うことができます。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:renderengineをraytrace
に設定します。
-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=N
–sample=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がデバイスを待った時間(例えば、遅いネットワークからファイルを読み込むのに費やした時間)を含みません。
hython
とhbatch
¶
-
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
このコマンドラインは、localhost
、clinton
、beijing
、finland
という名前の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のオンラインドキュメントを参照してください。