第9回: SOPのレンダリング 2

今回のプロジェクトファイル

前回は Geometry COMPRender TOPMAT を使ってSOPのレンダリングをやりました。 今回はそれに引き続いてもうすこし高度な機能を紹介していこうと思います。

インスタンシング

第6回: SOP基礎Copy SOP を使ったジオメトリのコピーをやりましたが、Geometry COMPインスタンシング機能を使うとジオメトリをコピーしながらの描画を高速に行うことができます。

なぜ高速にコピーができるかというと、Copy SOPCPU上でコピーを行うのに対して、インスタンシングは描画時にGPU上でコピーを行うからです。CPUとGPUの処理の違いは 第1回: はじめはじめるにあたって のあたりで解説しました。

映像表現をするにあたって物量をたくさん出すのは絵のインパクトを上げる手っ取り早い方法なのでインスタンシングは是非覚えて欲しい機能です。

SOPからのインスタンシング

/project1/INSTANCING1 を参照

インスタンシングの設定の仕方はどのオペレータータイプの情報を使うかによっていくつかパターンがあるのですが、まずはSOPからインスタンスを作る方法を説明します。

  1. Geometry COMPInstance ページにある InstancingON にする
  2. Instance CHOP/DAT/SOP に増やす元となるSOPを指定する
  3. Translate X/Y/Z にそれぞれ P(0) などのアトリビュート名を指定する

という手順でSOPの頂点位置にインスタンスを増やすことができます。

CHOPからのインスタシング

/project1/INSTANCING2 を参照

次にCHOPを使ったインスタンシングです。手順は次のようになります。

  1. Geometry COMPInstance ページにある InstancingON にする
  2. Instance CHOP/DAT/SOP に増やす元となるCHOPを指定する
  3. Translate X/Y/Z にそれぞれ tx などのチャンネル名を指定する

SOPCHOP の両方でインスタンシングをする手順を紹介しましたが、個人的には多少手間がかかってもCHOPを使ったインスタンシングをオススメします。理由は:

  1. CHOP のほうが SOP に比べて処理が早い
  2. CHOP のほうがノイズを使った変形などのバリエーションが出しやすい
  3. 外部のパラメーターを使ったコントロールがしやすい

などが挙げられます。

CHOPでの変形のコントロールはある程度の慣れが必要なので、何でもいいので手っ取り早く増やしたい!という場合はとりあえずSOPを使うでもいいと思います。

向きや大きさ、色をコントロールする

/project1/INSTANCING3 を参照

インスタンシングをする際に、SOPやCHOPのデータで向きをコントロールしたくなる時があります。そういう時にはInstance 2ページの Rotate to Vector X/Y/Z にどの方向を向いて欲しいかのデータを渡します。通常は法線(N)のデータを渡すことが多いです。

方向のデータがある場合には Rotate to Vector X/Y/Z が +Z方向になるようにコピーされます。なので、あらかじめ元となるジオメトリは原点から+Z方向に何かがおこるとわかりやすいように下準備しておくと面白い結果になりやすいです。

例えば↓の例では、

  1. 元になるジオメトリ
  2. +Z方向に移動させて原点につくようにオフセットする
  3. スケールを調整して細長い形状にする

といった手順で下準備をしています。

さらに、Scale X/Y/Z に大きさのデータを渡すと各インスタンスの大きさもコントロールすることができ、RGB にデータを渡すと色も指定できます。

方向を指定した時に Geometry COMPにWarningがちらちらと表示されますが、多分あまり気にしなくても大丈夫です

やってみよう

インスタンス用のデータ、元のジオメトリのどちらをいじっても結果がかなりダイナミックに変化します。SOPCHOPのオペレーターをいじって、どういう感じになるか実験してみてください!

物理ベースレンダリング

/project1/PBR を参照

前回の授業では Phong MAT を使ってジオメトリに質感の設定をしました。今回はPhong MATよりもリアルな見た目になる PBR MAT の使い方を紹介します。

PBRは Physically Based Rendering (物理ベースレンダリング) の略で、素材の反射を物理的に正しくなるようにモデル化した計算を行うことでよりリアルな質感を得られるようにした手法です。Phong MATに比べると多少設定する項目は増えますが、大幅にいい質感が得られるようになります。

Environment Light COMP

PBRのメリットを最大限に生かすためには通常の Light COMP の他に Environment Light COMP も同時に配置する必要があります。Environment Light COMPは、HDRI(High Dynamic Range Image)と呼ばれる環境光の情報の入ったパノラマ画像を使ってライティングをするためのものです。

HDRIは、HDRI Haven などのサイトから色々なシチュエーションの画像が無料で入手できます。HDRI画像を変更することでライティングの印象をガラっと変えることができます

TouchDesignerではHDRI画像をTOPとして読み込み、Environment Light COMPEnvironment Map にアサインすることで使えるようになるのですが、そのままだと光が暗すぎるので Level TOP を使って明さを調整します。通常は Gamma 1の値を2程度にすると適切な明るさになります。HDRIの階調を失わないために Clamp Input to [0-1] のトグルを外しておくのに注意してください。

Environment Light COMP の設定が終われば、あとは Phong MAT と同じように PBR MATGeometry COMP に指定すればOKです。

PBR MAT

PBR MATは、Phong MATよりも質感の設定が簡単になっています。主なパラメーターを解説します。

Base Color
素材の色を指定
Metallic
金属かそうでないかを指定。1が金属、0が非金属
Roughness
素材の表面の粗さを指定。1だと荒く、0だとツルツルした質感になる

上記以外のパラメーターは基本的には初期状態でいいはずです。狙った質感に寄せていきたい場合にすこしづついじる感じになると思います。

影の処理

材質の光の質感が上がっても、影の質感も同時に上げていかないといわゆる「リアルな質感」にはなりにくいです。
TouchDesignerで影を出すには、Light COMPShadows ページの Shadow Type を変更します。

影のタイプは Hard, 2D Mapped を選ぶのが簡単です。Soft, 2D Mapped は影のエッジがソフトになり見た目は綺麗になるのですが、そのために複数回レンダリングをするので処理が重くなってしまう傾向にあります。。

また、影のエッジがギザギザしてしまうのを回避するためには Shadow Resolution の数値を上げて影が書き込まれる画像の解像度を上げるとよくなります。ですが、こちらも解像度を上げすぎるとパフォーマンスに問題が出る可能性があるので、どんなに大きくても4096程度を越えないように注意してください。

また、ライトの影をおとしてもフラットな絵になってしまう場合は影が落ちるライトを複数個用意したり、Render TOP の後に SSAO TOP を追加して細かな陰影を足してあげるのも効果的です。

テクスチャを貼る

/project1/PBR_TEXTURE を参照

PBR MAT を使うとレンダリングの質感が上げられるという事を解説してきましたが、PBRの各パラメーターに対応したテクスチャを使うとさらに質感を上げられます。

HDRIと同様に、Texture Haven には石や木目など、色々な質感のテクスチャがあります。ダウンロードしたテクスチャを PBR MATDiffuse(Base Color)Roughness などに設定すると、テクスチャを貼っていない場合と比べてだいぶ質感の違いがあるのがわかると思います。自分のイメージにあったテクスチャがあれば、ダウンロードして色々試してみてください。