今回は質感を扱う MAT とインスタンシングを勉強をしていきます!
サンプルファイル
chimanaco/takara-univ-media-programming-2023
05が本日のディレクトリです。
MATs
MATs は TouchDesigner で3Dの Geometry に質感を与えるのに使用します。よく使われるものとして PhongMAT、ConstantMAT、WireframeMAT、LineMATをご紹介します。
PhongMAT: /project1/Phong
基本的なマテリアルである PhongMAT を使ってみましょう。Phongは拡散(diffuse)、鏡面反射性(specular)、光沢(Shininess)の3つの特徴を使って表面の質を決める方法で、光沢のあるマテリアルを表現できます。
PhongMATをネットワークに配置して、Geometry の Render タブの Material にドラッグ&ドロップして指定します。

PhongMAT の代表的なパラメーターは以下の通りです。
| Name | Summary |
|---|---|
| Diffuse | diffuse reflection light。ベースとなる色 |
| Specular | 光沢のある物質のハイライトの色 |
| Shininess | 表面の光沢度 |
| Emit | 物体の発光の強さや色 |

PhongMAT Color Map: /project1/Phong_color
PhongMAT の Color Map に TOP を指定することで TOP のテクスチャをジオメトリに貼ることができます。

PhongMAT Noise & Height Map: /project1/Phong_Height
Normal Map を使って凹凸を表現することができます。グレースケールの TOP を Nomal MapTOP につなぐことによって Normal Map が作られるので、これを Normal Map(Bump) に指定します。さらに Enable Height Map を ON にして Height Map に Color Map と同じグレースケールの TOP を指定することにした上で、Displace Vertices を ON にして Height Map とその下にあるパラメーターを使って displacement を行うことができます。

Normal Map を使用して RenderTOP に warning が出る場合は、Attribute Create SOP を追加して Compute Tangents を ON にすることで解消できる可能性が高いです。


ConstantMAT: /project1/Constant
ライティングの影響を受けないマテリアルです。よって表面の光沢などはありません。

ConstantMAT Color: /project1/Constant_color
Color Map の指定もできます。

WireframeMAT: /project1/Wireframe
SOP で w キーを押したときのような、Wireframe のレンダリングができます。

Instancing
Geometry COMP には Geometry Instance という機能があります。これはgeometry のオブジェクトをコピーし、個別に変形を加えられるというものです。
GPU を使って処理をするため、以前ご紹介した CPU を使った Copy SOP よりも大量に高速に処理をすることができます。よく使うものには Translate、Rotate、Scale、Colorなどのパラメーターがあり、1つ1つの変化はシンプルでも大量のインスタンスを扱うことで面白い効果を得ることもできます。 それではやってみましょう!
いくつかやり方があるのですが、今回は CHOP を使用してインスタンスを作る方法をご紹介します。
Instancing Position: /project1/Instancing_position
Sphere に Noise をかけた形にインスタンスを配置してみましょう。

ポイントとなるのは以下です。
- 形を作る
SphereSOP を追加する。 - SOP を
SOP to CHOPで CHOP に変換して、3D空間上の各座標を CHOP で表示する。 Geometry COMPのInstanceタブのInstancingをONにする。Default Instance OPに変換した CHOP を指定する。Translate X/Y/Zにtx ty tzを指定する。
Instancing Normal: /project1/Instancing_normal
次に normal の値を使用して各インスタンスが元の SOP の法線の方向を向くようにしてみましょう。

SOP to CHOPでNormalをONにする。Rotate to Vector X/Y/Zにnx ny nzを指定する。
One or more of the Rotate to Vectors is co-linear with the up vector, no orientation will be applied for those instances. というエラーが出るかもしれません。これは上向きのベクター、y 方向のベクターと重なる法線があるので回転が反映されません、というワーニングです。Transform SOP で x か z 方向に少し回転を加えると直ったりします。

Instancing Color: /project1/Instancing_color
続いてインスタンスに色をつけてみます。

- 新しく
Noise CHOPを追加し、r g bの3チャンネルとする。インプットにSOP To CHOPのアウトプットをつなぐ。 Math CHOPを追加し、From Rangeを-1と1に指定。Merge CHOPを追加し、SOP to CHOPとr g bの入ったMath CHOPをインプットする。Geometry COMPのInstance2タブのR/G/Bにr/g/bを指定する。
Instancing Scale: /project1/Instancing_scale
最後にインスタンスのサイズを変えてみます。

- 新しく
Noise CHOPを追加し、チャンネル名をscaleとする。インプットにSOP To CHOPのアウトプットをつなぐ。 Math CHOPを追加し、From Rangeを-1と1に指定。To Rangeを0.5と2に指定(値は何でもかまいません)。Merge CHOPにインプットする。Geometry COMPのInstanceタブのScale X/Y/Zにscaleを指定する。
SOP に変化を加えたり、CHOP の値をいじることによって面白い動きになると思うので色々試してみてください!
本日の課題: インスタンシングと MATを使ってみよう
今日勉強した Geometry Instancing と PhongMAT を使ってみましょう。Instancing の元となる SOP を変えてみたり、マテリアルやライティングを変えたりしてレンダリング結果がどのように変化するか試してみてください。プロジェクトフォルダごと Teams に提出してください。
参考
- 映像音響処理概説 2018 第十五回
- 映像音響処理概説 2018 第十六回
- 映像音響処理概説 2019 第9回: SOPのレンダリング 2
- TouchDesigner Vol.030 Interactive Particles with Kaoru - YouTube
- 映像音響処理概説 2018 第七回
- 映像音響処理概説 2019 第8回: SOPのレンダリング
- 映像音響処理概説 2019 第9回: SOPのレンダリング2
- 第4回: レンダリング,質感 | Scott Allen
- Line MAT Structures – TouchDesigner Tutorial 20 - YouTube
- Variable Line Width in TouchDesigner - YouTube