第9回: SOPのレンダリング 2
前回は Geometry COMP や Render TOP、MAT を使ってSOPのレンダリングをやりました。 今回はそれに引き続いてもうすこし高度な機能を紹介していこうと思います。
インスタンシング
第6回: SOP基礎 で Copy SOP を使ったジオメトリのコピーをやりましたが、Geometry COMPのインスタンシング機能を使うとジオメトリをコピーしながらの描画を高速に行うことができます。
なぜ高速にコピーができるかというと、Copy SOP がCPU上でコピーを行うのに対して、インスタンシングは描画時にGPU上でコピーを行うからです。CPUとGPUの処理の違いは 第1回: はじめはじめるにあたって のあたりで解説しました。
映像表現をするにあたって物量をたくさん出すのは絵のインパクトを上げる手っ取り早い方法なのでインスタンシングは是非覚えて欲しい機能です。
SOPからのインスタンシング
/project1/INSTANCING1 を参照
インスタンシングの設定の仕方はどのオペレータータイプの情報を使うかによっていくつかパターンがあるのですが、まずはSOPからインスタンスを作る方法を説明します。
Geometry COMPのInstanceページにあるInstancingをONにするInstance CHOP/DAT/SOPに増やす元となるSOPを指定するTranslate X/Y/ZにそれぞれP(0)などのアトリビュート名を指定する
という手順でSOPの頂点位置にインスタンスを増やすことができます。

CHOPからのインスタシング
/project1/INSTANCING2 を参照
次にCHOPを使ったインスタンシングです。手順は次のようになります。
Geometry COMPのInstanceページにあるInstancingをONにするInstance CHOP/DAT/SOPに増やす元となるCHOPを指定するTranslate X/Y/Zにそれぞれtxなどのチャンネル名を指定する

SOP と CHOP の両方でインスタンシングをする手順を紹介しましたが、個人的には多少手間がかかってもCHOPを使ったインスタンシングをオススメします。理由は:
CHOPのほうがSOPに比べて処理が早いCHOPのほうがノイズを使った変形などのバリエーションが出しやすい- 外部のパラメーターを使ったコントロールがしやすい
などが挙げられます。
CHOPでの変形のコントロールはある程度の慣れが必要なので、何でもいいので手っ取り早く増やしたい!という場合はとりあえずSOPを使うでもいいと思います。
向きや大きさ、色をコントロールする
/project1/INSTANCING3 を参照
インスタンシングをする際に、SOPやCHOPのデータで向きをコントロールしたくなる時があります。そういう時にはInstance 2ページの Rotate to Vector X/Y/Z にどの方向を向いて欲しいかのデータを渡します。通常は法線(N)のデータを渡すことが多いです。

方向のデータがある場合には Rotate to Vector X/Y/Z が +Z方向になるようにコピーされます。なので、あらかじめ元となるジオメトリは原点から +Z方向に何かがおこるとわかりやすいように下準備しておくと面白い結果になりやすい です。
例えば↓の例では、
- 元になるジオメトリ
- +Z方向に移動させて原点につくようにオフセットする
- スケールを調整して細長い形状にする
といった手順で下準備をしています。

さらに、Scale X/Y/Z に大きさのデータを渡すと各インスタンスの大きさもコントロールすることができ、RGB にデータを渡すと色も指定できます。
方向を指定した時に Geometry COMPにWarningがちらちらと表示されますが、多分あまり気にしなくても大丈夫です
やってみよう
インスタンス用のデータ、元のジオメトリのどちらをいじっても結果がかなりダイナミックに変化します。SOPやCHOPのオペレーターをいじって、どういう感じになるか実験してみてください!
物理ベースレンダリング
/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 COMP の Environment Map にアサインすることで使えるようになるのですが、そのままだと光が暗すぎるので Level TOP を使って明さを調整します。通常は Gamma 1の値を2程度にすると適切な明るさになります。HDRIの階調を失わないために Clamp Input to [0-1] のトグルを外しておくのに注意してください。

Environment Light COMP の設定が終われば、あとは Phong MAT と同じように PBR MAT を Geometry COMP に指定すればOKです。
PBR MAT
PBR MATは、Phong MATよりも質感の設定が簡単になっています。主なパラメーターを解説します。

Base Color 素材の色を指定
Metallic 金属かそうでないかを指定。1が金属、0が非金属
Roughness 素材の表面の粗さを指定。1だと荒く、0だとツルツルした質感になる
上記以外のパラメーターは基本的には初期状態でいいはずです。狙った質感に寄せていきたい場合にすこしづついじる感じになると思います。
影の処理
材質の光の質感が上がっても、影の質感も同時に上げていかないといわゆる「リアルな質感」にはなりにくいです。
TouchDesignerで影を出すには、Light COMP の Shadows ページの 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 MAT の Diffuse(Base Color) や Roughness などに設定すると、テクスチャを貼っていない場合と比べてだいぶ質感の違いがあるのがわかると思います。自分のイメージにあったテクスチャがあれば、ダウンロードして色々試してみてください。
