2019-11-06

pdg first step


PDG の使い方を

  1. 各種設定
  2. IFD の書き出し
  3. IFD のレンダリング
  4. ムービーファイルの作成
  5. コンタクトシートのファイルの作成
  6. Rows および Columns の指定
とサルにもわかるように説明したい。



使用したビルド: Houdini 17.5.425 (Windows 10)
シーンファイルへのリンクは一番下にあり。

1. 各種設定

PDG でムービーファイルおよびコンタクトシートの作成には、以下の二つのソフトウェアのインストールが必要。

  1. FFMPEG
      FFMPEG は 画像シーケンスからムービーファイルを作成したりその逆をしたりするのに使う。FFMPEG は下記の ImageMagick に含まれるようになったので、このインストーラをダウンロード、インストールしてから、環境変数 PDG_FFMPEG で実行ファイルの場所を指定する。
  2. ImageMagick
      ImageMagick は 画像フォーマット変換やコンタクトシートの作成に使う。インストール方法はここ に記載。インストール後は、環境変数 PDG_IMAGEMAGICK で実行ファイルの場所を指定する。
  3. Nvidia Optix
      PDG とは直接関係ないが、レンダリング時間を短縮したいのであれば、NVIDIA Optix もインストールする (Mac OSX には非対応)。

ファイルパスに関して
Windows で FFMPEG および ImageMagick を PDG が実行する際に、入力ファイルと出力ファイルのドライブが異なっていたり、パスの表記方法に C:\ と \\ という形式が混在する場合、

ValueError: Cannot mix UNC and non-UNC paths (//alida/SideFX/HoudiniFiles/projects/web/pdg/render/test7.renderifd1.0001.png and C:/Users/ktaki/AppData/Local/Temp/houdini_temp/test7/pdgtemp/19616)

などとエラーになる。回避策はあるが、HOUDINI_TEMP_DIR, JOB などの設定をあらかじめ考慮し、可能であれば同じドライブを使うように設定しておくも一つの方法。

2. IFD の書き出し

2-1. シーンの作成

  1. Houdini 起動し、ビューポートで TAB->Test Geometry: Rubber Toy を実行、Enter キーを押して原点に配置。
      testgeometry_rubbertoy_object1 が /obj 以下にできるはず。
  2. testgeometry_rubbertoy_object1 の Rotate Y に
    ($FF-$FSTART)*360/$FEND
    と入力。これで Rubber Toy が総フレーム数の長さにかかわらず、最初と最後のフレームの間でY軸を中心に回転する。

    FF: 実数による現在のフレーム
    FSTART: 開始フレーム
    FEND: 終了フレーム
  3. Lights and Cameras シェルフの Camera ツールを Ctrl キーを押しながらクリックし、カメラを作成。
      /obj/cam1 ができる。
  4. カメラのマニピュレータを使ってカメラを心持上にあげる。
  5. レンダリング時間を待ちたくなければ、最終フレームを48など短くする。
  6. ライトを追加したければ追加してもよい。
  7. testgeometry_rubbertoy_object1 の Render タブに行き、Render Polygons As Subdivion (Mantra) をオンにする。
      これにより Rubber Toy がサブディビジョンサーフェスとしてレンダリングされる。
これでシーンの作成はおしまい。

2-2. IFD 出力ノードの設定
IFD に関する詳細はこちらにもある。

  1. ネットワークエディタの /obj で TAB->TOP Network を実行。
      /obj/topnet1 ができる。
  2. topnet1 内に入り、TAB->Generate IFD を実行。
      generateifd ノードができるが、これはTOP 用の Mantra Render ノード。IFD が出力できるように Rop Mantra タブの下の右のほうにある Driver タブ以下の Disk File がオンになっていて IFD を出力するようになっている
  3. ROP Mantra タブの一番上にある Evaluate Using を Single Frame から Frame Range に変更。
  4. 上記の Disk File のファイル名の指定を $HIP/ifds/$HIPNAME.$F4.ifd と4桁で出力するようにする。
  5. レンダリング時間を短縮したいのであれば以下の設定をする。
    1. Override Camera Resolution をオンにし、1/2 なり 1/4 なり好きな設定に。
    2. Optix デノイザを使うのであれば、ROP Mantra > Images > Output 以下の Pixel Filter の右にあるプルダウンから NVIDIA Optix Denoiser を選択。
        Pixel Filter の設定が denoise optix -a basecolor に変更される。
    3. Optix を使うのであれば、 Rendering > Sampling 以下の Pixel Samples を 1x1 にしてもよい。
    4. 同様に Max Ray Sample も (このシーンであれば) 2 にする。
  6. File->Save でシーンファイルとして保存。
      UNC パスで記述して、\\... 以下の pdg_ifd.hip として保存した。
  7. Network Editor の generateifd で RMB->Generate Node とすれば、レンダリングするフレームの数だけタスクが作られる。48 フレームの場合、48個。
これでIFD 出力ノードの設定はおしまい。

3. IFD のレンダリング

3-1. Render IFD ノードの設定

  1. generateifd の出力に Render IFD ノードを接続。
      renderifd1 ノードができる。
  2. ムービーやコンタクトシートを出力するのであれば、Output Path のファイル名の拡張子を .png に変更しておくとよい。
      つまりファイル名は $HIP/render/$HIPNAME.$OS.$F4.png となる。
      renderifd1 のファイル名が generateifd のファイル名より優先される。
  3. renderifd1 で RMB->Generate Node とすれば、generateifd と同数のタスクが作られる。

3-2. Local Scheduler ノードの設定
/obj/topnet1 にある localscheduler を選択し、以下の設定を行う。

  1. Location を Houdini Temp から Working Directory に変える。
      特にシーンファイルの保存先が C:\ ドライブ以外で、HOUDINI_TEMP_DIR が C:\ ドライブ以下の場合。C: ドライブで完結している場合、変更は不要。
  2. Maximum CPUs to Use を "Use All CPUs Except One" (全ロジカルコアを一つ除いて使用) に設定。
  3. renderifd1 上で RMB->Cook Selected Node を実行すれば、IFD の書き出しとそのレンダリングが実行される。

4. ムービーファイルの作成

4-1. renderifd1 ノードからの出力

  1. renderifd1 の出力に Wait For All ノードを接続。
      waitforall1 ができ、これにより 48のタスクが一つにまとめられる。
  2. waitforall1 の出力に FFMPEG Encode Video ノードを接続。
      ffmpegencodevideo1 が出来る。
  3. 環境変数 PDG_FFMPEG で FFMPEG のインストール位置を設定している場合、ffmpegencodevideo1 上で RMB-> Cook Selected Node を実行すればムービーが作成される。
      そうでない場合、FFmpeg Path のトグルをオンにし、ffmpeg.exe までのパスを挿入する。
  4. ffmpegencodevideo1 左脇にチェックマークがつき、無事にムービーができれば、ノードのドットをダブルクリックすれば情報パネルが開き、Output の部分のファイル名をダブルクリックすれば、ムービーファイルが開く。

5. コンタクトシートのファイルの作成

5-1. Wait for All ノードからの分岐

  1. waitforall1 の出力に ImageMagick ノードを接続。
      imagemagick1 が出来る。
  2. imagemagick1 上で RMB-> Cook Selected Node を実行すればコンタクトシートが作成される。

5-2. 既に出力した画像ファイルを取り込む
既に作成した画像を取り込んで ImageMagick に取り込む場合は以下の要領。

  1. /obj/topnet1 内に File Pattern ノードを作成。
      filepattern1 が作成される。
  2. Pattern 脇の▽ボタンをクリック、読み込みたいファイルのうち一つを選択、フレーム番号の部分を * で置き換える。
      例: $HIP/render/pdg_ifd.renderifd1.*.png
  3. filepattern1 上で RMB->Generate Node とすれば、読み込んだファイル総数のタスクが作られる。
  4. filepattern1 の出力に Wait For All ノードを接続。
      waitforall2 ができ、タスクが一つにまとめられる。
  5. waitforall2 の出力に先ほど作成した imagemagick1 ノードを接続。
  6. imagemagick1 上で RMB-> Cook Selected Node を実行すれば新しくコンタクトシートが作成される。

    imagemagick1 上のドットをダブルクリックすれば、情報パネルが開き、その Output のファイル名をクリックすれば作成された画像が確認できる。
この手順は、既存画像から FFmpeg ムービーを作成する場合でも同様。

6. Rows および Columns の指定

ImageMagick でタイルの縦横の数を指定したい場合は、 Custom ImageMagick Arguments をオンにして、 -tile で指定する。

  1. パラメータビューの一番下にある Custom ImageMagick Arguments をオンにする。
      オンにすれば、その横のフィールドが有効になる。
  2. 例えば、画像が10枚あり、これを4-4-2 (デフォルト) ではなく、5x2 にしたい場合、以下のように記述する。
      `pdginputvals('file/image', 0)` -tile 5x2 -geometry 128x128 $HIP/out.png
      -geomtry 128x128 を指定すれば、入力画像が128x128 にスケールされる。
      -geomtry 128x128+1+1 とすれば、入力画像が128x128 にスケールされた上に、1ピクセルのパッドが入る。
ImageMagick (montage) 時の他のフラグに関しては、こちらを参照のこと。

リンク


最終更新: 2024-01-03

0 件のコメント:

コメントを投稿