山里ぽん太

struggled in snowdome

30 July 2018

山里ぽん太はスノードームを作りました。


Chapter 1 スノードーム
スノードームとは、透明なカプセルの中に、置物と、液体と、星や雪を封入した置物です。カプセルを揺すると、星や雪が舞い上がります。
2015年公開のフランス映画、「La Petit Prince」のお話の中に、重要な小道具として、また重要なモチーフとして、スノードームが登場します。

Chapter 2 MODOで作る
MODO でスノードームを作りました。
作り方は簡単です。
透明なカプセルを作って、パーティクル・エミッターでパーティクルを作って、リプリケータで星の形のレプリカを割り当てて、ダイナミクスを適用するだけです。
すぐにできました!!。
漏れ漏れやーん(笑)。
きっと、メッシュが粗すぎて星がメッシュの隙間を通過してしまっているのです。


カプセルのメッシュを細かくしてみました。
漏れませんでした!!。
でも、カプセルの中に入りません(爆)。


いきなりカプセルはハードルが高すぎたのです。
ゴルフボールを、ゴールの穴に入れるところからやってみましょう。
というわけで、ゴルフボールを、ゴールの穴の上に置いて見ました。
穴に落ちません!!(笑)。
MODO でゴルフゲームを作ったら、きっと、スコアはめちゃくちゃになることでしょう(笑)。

もしかしたら、カプセルのサイズが小さすぎたからかもしれません。
というわけで、200倍のサイズで作ってみました。
というわけで、噴火していますwwww。

いろいろやっていたら、あるとき、星はカプセルの中にとどまってくれました。理由はわかりません(笑)。
でも、宙に浮いています。
これはアレです。ダイナミクスの精度の問題です(マジっすか?)。

というわけで、ダイナミクスの精度を高くしました。
底に沈みました(偉)。
でも、落ち着きがありません(笑)。

諦めることにしました(笑)。
さいごに、もういちどカプセルの形で試してみました。
最初と同じでした。
でもまあ、これはこれで綺麗なので、よしとしましょう。

Chapter 3 Houdiniで作る
というわけで、Houdini で作りました。
漏れ漏れですwww。
魔術師 Houdini でもできません。


漏れないように、桝の中に入れてみました。
いわば、オムツです(笑)。
升はレンダリングした動画には写っていませんが、ダイナミクスでは利いています。
飛び散りました。横漏れです(笑)。


「Houdini Visual Effects」の本で勉強した「Grain」を使ってみました。
まずは、桝の中に溜めてみました。
復習です(笑)。
はい、桝の中に溜まりました。

というわけで、カプセルの中に星を溜めてみました。
爆発しました〜〜〜〜〜!!!wwww。
いやー、笑っちゃいます。


カプセルだと、なんでできないのでしょう?(変)。
もしかして、閉じた形状だとできないのでは?。
というわけで、カプセルを下半分だけにして試してみました。
溜まってくれました。


もしかすると、カプセルの上半分と下半分の間に隙間があったらできるでしょうか?。
というわけで、試してみました。
だめでした〜(笑)。


下半分だけだったらうまくできるわけですから、カプセルにしないで、下半分だけにしましょう。
でも、下半分だけだと、星が上から飛び出してしまうから、飛び出してしまわないように、蓋をかぶせましょう。
というわけで試してみました。
できました〜〜〜〜!!!www。
なんかいい感じです(嬉)。

だがしかし、やはり、星の形で実現しなければいけません。
ということは、やはり、ソルバは POP ではなく、RBD か Bullet でなければなりません。
ということで、まずは、Bullet を試してみました。
Sphere に Scatter をつないで、Copy to points につないで、Box をつないで、小さい板をたくさん作って、下半分だけのカプセルに溜めてみました。
溜まってくれません(涙)。


ソルバを、RBD(Rigid Body Dynamics) にしてみました。
カプセルの中に落ちてくれました。
でも、団子状態で転がりました(笑)。


やはり、Grain を使うしかなさそうです。
Grain の丸い形と、迷彩色みたいな色をなんとかしましょう。
ということで、DOP ネットワークの中の、「POP Sprite」ノードと、「POP Color」ノードの Bypass フラグを立てました。

そして、DOP ネットワークの出力に、Copy to Points ノードをつないで、星の形をした Box をコピーしてみました。
というわけで、試しに1枚レンダリングしてみました。

黄色い色をつけてみました。うん、きれいです(嬉)。

というわけで、試してみました。
なんか、いい感じじゃーん(嬉)。

ここで気がつきました(何)。
星の向きが変です(笑)。
この絵は、星がカプセルの底に溜まっているところです。
いい感じで横たわっています。

この絵は、星が上の方に向かって行くところです。
星は上を向いています。

この絵は、星がカプセルの上にぶつかったところです。
星は、カプセルの内面に張り付いているような感じです。

この絵は、星が落ちてゆくところです。
星は、下を向いています。

これは、たぶん、アレです(何)。
たぶん、星の向きが、パーティクルの速度ベクトルに合っているのです。たぶん。「Copy to Points」ノードの、「Transform Using Point Orientations」の機能かもしれません。
Chapter 4 星の回転(考察)
星の向きが揃ってしまうところを、いろんな向きにしたり、いろんな回転をしたり、というような変化をつけられないでしょうか。
単純な方法は、@ptnum などを seed にして、rand() や noise() などの関数で、星ごとに違う回転をつけてあげることです。
では、どれくらいの速さで、どんな方向の回転をつけてあげたらよいでしょうか?。
カプセルの中には液体が詰まっています。液体は、カプセルの中を、いろいろ動き回ります。
液体は、小さな渦をつくることもあるでしょう。その渦の中に入った星は、きっと速く回転するでしょう。
カプセルの中にある置物に角をぶつけた星は、きっとその瞬間からくるくると回り出すことでしょう。
星が、カプセルの内側の壁にぶつかったときには、星の角はカプセルの内側でつるっ、と滑って、カプセルの内側の壁に、べったりとくっついて向きを変えることでしょう。
衝突したことは、アトリビュートの値で判断できます。衝突した時の星の回転の角度と壁の法線ベクトルと星の upベクトルから quaternion を計算して、2〜3コマでアニメーションさせてあげるでしょうか?。それとも、1コマで壁にぺたり、と沿わせてあげるでしょうか?。
いやー、回転をつける、って簡単じゃなさそうです。
ひとまず諦めます(笑)。
Chapter 5 ドラッグ(考察)
カプセルの中には液体が詰まっています。ということは、星が液体の中を移動する時も、回転するときも、液体の抵抗を受けます。ということは、アレです。drag を考慮しなければいけません。
POP ネットワークの中で drag を使うには、「popsolver」ノードの前に、「POP Drag」ノードと、「POP Drag spin」ノードを追加すれば、drag が効くようになります。簡単です。
しかし、ここでも、液体の移動の問題があります。
カプセルの中の液体が静止しているのであれば、単純に drag を適用すればよいのですが、液体は常に静止しているわけではありません。液体だって移動します。
星が液体の移動の方向と逆向きに移動しているときは drag は強く働きます。
星が液体の移動の方向と同じ向きに移動しているときは drag は弱く働きます。
液体の移動が星よりも速いなら、drag じゃなくて、force として働くことになります。
液体の移動が星に影響する様子を表現するには、フィールドを構築して、移流(advection)のような操作をすることになるかもしれません。
どうすればよいかわかりません。
ひとまず諦めます(笑)。
Chapter 6 カプセルを作る
カプセルの厚さは、とりあえず5ミリメートルにしてあります。5ミリメートルにした理由は、計算が暗算でできるからです(笑)。
でも、実際のスノードームのカプセルの厚さは、5ミリメートルもありません。たぶん2〜3ミリメートルくらいでしょう。
というわけで、2ミリメートルにしてみました。
うん、カッコいいです!。

というわけで、シミュレーションしてみました。
星が漏れています!(がーん)。

これは、アレです(何)。
ソルバのサブステップ数を増やせば解決できます(おおー!)。
というわけで、POP Solver の「Max Substeps」が10になっていたのを、20に変更しました。
やっぱり漏れます(笑)。

というわけで、「Max Substeps」を30にしてみました。
やっぱり漏れますwww。

というわけで、カプセルの厚さは、5ミリメートルくらいあったほうがよさそうです。
というわけで、表示用のカプセルと、シミュレーション用のカプセルを、別々に用意することにしました。
表示用のカプセルは、厚さ2ミリメートルです。

シミュレーション用のカプセルは、こんなのです。

丸い部分を取るとこんな感じです。

胴体の部分を取るとこんな感じです。
完璧です!!。

というわけで、シミュレーションしてみました。
漏れました〜www。
おもいっきり漏れ漏れです(笑)。

シミュレーション用のカプセルを重ねてみるとこんなことになっています(驚)。
こんなにぶ厚いのに、なんで漏れるんでしょう?(謎)。

メッシュの細かさだって、十分に細かくしてあります。

ここで閃きました(?)。
メッシュの細かさを、粗くしてみました(?)。
こんな感じです。

というわけで、シミュレーションしてみました。
漏れません(なんで???w)。
理由はわかりません(爆)。
そのうちわかるでしょうw。

Chapter 7 星に光を
星はカプセルから漏れなくなりましたので、レンダリングしてみました。
星が暗く写ります。

カプセルを取り外してみました。
星は明るく写ります。
なんででしょう?。
もしかして、Houdini のガラスは光を通さないのでしょうか?。

MODO のガラスは光を通すので、カプセルがあっても、星は明るく写ります。
この絵では、カプセルの中に液体が入っているので、光が屈折して、星が大きく写っています。

カプセルを取り外すとこんな感じです。

ちょっと実験することにして、こんなセットを作りました。
いちばん左に平行光のライトを置いて、その次にガラスの壁を置いて、その次に円柱を置きました。
小学校の理科の実験みたいです。

ガラスの壁がないと、こうなります。
そりゃそうです。

ガラスの壁があると、こうなります。
え〜〜〜〜〜っっっっっ。
影になっちゃってます(びっくり仰天)。
透明なガラスなのに光が通りません。

なんでだろ〜〜〜〜♪ なんでだろ〜〜〜〜♪
なんでだなんでだろ〜〜〜〜♪
と歌いながら、いろいろ見てみました(笑)。
こんなのを見つけました。
PrincipledShader の 「Opacity」タブに「Fake Caustics」ってのがあります。
「Caustics」ってやつは、アレです。
スポーツドリンクのペットボトルの影にできる光の線です。

というわけで、「Enable」にチェックをいれてみました。

できましたー(万歳)。

「Fake Caustics」の「Fake」は「偽の」という意味なので気になって、リファレンスを調べてみました。
シェルフツールに、「Caustic Light Shelf Tool」ってのがあるようです。
たぶん、これを使うと、シーン全体にコースティクスの効果を出してくれるのでしょう。
MODO は、コースティクスの設定をしなくても、なんとなくきれい〜(笑)な シェーディングをしてくれるので、Houdini の挙動にびっくりした、というような感じでした〜。ちゃんちゃん。
というわけで、カプセルの「Fake Caustics」の「Enable」にチェックをいれてみました。
星が明るくなりましたー^^。

Chapter 8 置物を作る
カプセルの中に、とりあえず写真立てを置きましょう。
安直です(笑)。
というわけで、テクスチャマッピングです。
Houdini でテクスチャをマッピングするって、どうすればよいのでしょう?。MODO なら、シェーダーツリーで簡単です。
リファレンスを調べてみましたら、「UV Quick Shade geometry node」ってのを見つけました。簡単そうです。
というわけで、早速試してみました。
テストに使う絵は、コレです。

できました。
表の面だけでなく裏の面にも投影されてしまったので、AttributeWrangle ノードを追加して、表の面だけのグループを設定して、表の面だけに投影するようにしました。
うん、綺麗です。

「Principled Shader VOP node」で投影する方法も試してみました。
できました。

というわけで、とりあえず、SOP でできる「UV Quick Shade geometry node」を使ってみることにしました。
カプセルの中に、かまぼこの板のような板を立てて、花の写真を投影してみました。
できました。

カプセルに液体を入れてみました。
屈折して絵が横に広がって見えます。

ちょっと星を散らしてみました。
なんかいい感じです。

カプセルと液体の間に隙間ができないように、すこし重なるような大きさにしました。
カプセルと液体の両方が光を透過するので、カプセルが液体に優先するように「Surface Priority」を設定しました。
なかなかいい感じです。
Chapter 9 星に色を
星に色をつけましょう。
MODO では、シェーダーエフェクトのグラディエント編集機能を使って、パーティクルの ID で、ディフューズの色をつけました。
Houdini ではどうすればよいのでしょう?。
MODO と同じように、シェーダーのランプ・パラメータを使って、色をつける方法を試みてみました。
PrincipledShader にパラメータ・エディタでランプ・パラメータを追加してみましたが、ジオメトリ・アトリビュートをどう適用すればよいのかわかりませんでした。
そういえば、VOP がまるでわかりません。
思わず「じぇ〜っと VOP はぶろろろろ〜!ぶろろろろ〜!ぶろろろろ〜!」と、口ずさんでしまう僕でありました。
というわけで、ジオメトリのアトリビュートを使ってみることにしました。
Houdini では、ジオメトリのアトリビュートにカラー値を持っていて、シェーダーのカラー値を上書きすることができます。
まずは、「AttributeWrangle」ノードをひとつ作って、C言語で書くようなプログラムを書いて、実行してみました。
マシンがハングアップしました(笑)。
なんとなくですが、「setpointattrib」の処理に、多くの時間と大量のメモリを使うようです。これを約20万回の「for」ループで回したのでした。1時間くらい放置しておいたところ、Mac Book Air の Finder の表示が壊れていました(笑)。
そこで強制終了(kill)してしまったので、書いたコードは失われてしまって、ここに乗せることができません。笑って許してください(笑)。
で、コードを3つに分けて、「AttributeWrangle」ノードを3つ作ってみました。ループの回数も1万回くらいに減らしました。
1つ目の「AttributeWrangle」ノードのコードです。

2つ目の「AttributeWrangle」ノードのコードです。

3つ目の「AttributeWrangle」ノードのコードです。
さっき、マシンをハングアップさせたコードは、この処理の部分に、ランプ・パラメータを使わないで、「if」文を使って、色の値を計算で求めるような VEXpression のコードを書いていました。それが原因なのか、それとも、ひとつの AttributeWrangle ノードの中に、20万回の「for」ループを2回記述したことが問題なのか、わかりません。もういちど試して原因を探る気にはなりません(笑)。
というわけで、これで実行してみました。Mac Book Air が、数分で計算してくれました。

数分ですが、これで数百コマのシミュレーションをするわけですから、まだ長いです。
速くしたくて、3つ目のコードを書き直してみました。
これで実行したら、Mac Book Air が、数秒で計算してくれました(嬉)。
SIMD 万歳!w

というわけで、こんな感じになりましたー!!。

ちょっと色がキツイ感じなので、パステル調の色にしてみました。

で、レンダリングしたら、なぜか真っ白になってしまいました。

でも、スプレッドシートを見ると、色はついている感じですし、「PrincipledShader」の反射の数値も変ではなかったので、もしや、と、ライトの光を弱くしてみました。
綺麗になりました。

ライトの角度とカメラの位置を変えてみました。
い〜い感じです(笑)。

Chapter 10 舞台を作る
これでも十分に綺麗ですが、「La Petit Prince」の絵は、ものすごく段違いに超絶綺麗です。
丁寧にモデリングされた部屋。丁寧に調整された照明。
部屋は、演出のために、グレーのうすぼんやりとしたトーンに調整されています。
そりゃそうです。だって、世界最高のスタッフが作ったんですもの。
ここまでは無理としても、勉強のためもありますので、舞台を作ってみましょう。

まずは部屋です。
こーんな感じw。
壁や天井は、Box で、ちょちょいのちょい、と(笑)。
窓の穴は、PolyBridge で空けました。MODO ならマウスで選択操作をしますが、Houdini ではシーンビューに表示されたプリミティブ番号を転記しました。
ドアのところに苦労しました。窓のように穴を空けるのではなくて、Box の角のところを削るという感じです。
いろいろ試しましたが、最終的には、PolyBridge を使って穴を開けて、周縁部分に厚さのないポリゴンが残りましたので Carve で削除しました。そうしたところがポイントだけが残りましたので、Clean を繋いでみたらポイントが消えましたので、これでよし、としました(笑)。

問題は照明です。
なんといっても舞台は部屋です。
部屋なんです!(笑)。
スタジオや、撮影ボックスを使うときは、照明は自由に使えますし、余計なものも写りませんし、余計な反射もありません。
でも、部屋だと照明は限られますし、余計なものも写りますし、余計な反射もあります。
今回の場合は、晴れた日の日中、ということにして、窓からの光だけで照明する、と、無謀なことをします。
何が無謀なのかは、知っている人は知っていますが、次第に明らかになります(笑)。
というわけで、ちょっとレンダリングしてみました。
Distant Light(照度=1)と、Environment Light(照度の値=1)に Portal を設定してレンダリングしたものです。北側の窓です。
暗いです。ノイズが乗っています。
mantra の設定は、Direct Ray Samples = 3、Indirect Ray Samples = 3、Diffuse Limit = 4 です。
いわゆる「いい感じ」に仕上げるためには、いろいろいじりながら試してみて、感覚をつかむしかありません。

というわけで、設定を変えてレンダリングしてみました。
Distant Light : Intensity = 3
Environment Light : Light Intensity = 3 , Portal Geometry
mantra : Direct Ray Samples=5 , Indirect Ray Samples=5 , Diffuse Limit = 4
う〜〜〜〜ん! まんだむ!(笑)。いい感じです。
この2枚は、同時にレンダリングしましたが、2枚で2時間かかりました(爆)。
まだノイズが乗っていますが、まあ、しようがありません。


というわけで、調子に乗って、壁に棚を作って、床にテーブルを置いてみました。
Distant Light : Intensity = 3
Environment Light : Light Intensity = 3 , Portal Geometry
mantra : Direct Ray Samples=5 , Indirect Ray Samples=5 , Diffuse Limit = 4

Chapter 11 スノードームをキャラクターに運んでもらう
次に、壁の棚に置いてあったスノードームを、机の上まで運ぶ、という作業を、キャラクターさんにやってもらいましょう。
というわけで、Houdini の オブジェクト・ノードで、Simple Female さんを召喚しました。呼ばれて飛び出てじゃじゃじゃじゃ〜〜〜〜んw。

Simple Female さんのオブジェクトの中にダイブしてみると、すごいネットワークが組まれています(驚)。

シーンファイルを保存して、別の作業をして、保存したファイルを開いてみると、なんかいっぱいエラーが出ます。
それでもがんばってSimple Female さんを動かそうとするのですが、動きません(汗)。
パラメータの値をいじってみましたが、思うように動きません。パラメータを変更しても動かなかったり、巨大な数値(1000とか)を入れなければ動かなかったりします。
これも apprentice の制限事項なのでしょうか?。
とりあえず、諦めることにしましょう(笑)。

ポップアップメニューをいじっていたら、Simple Female さんにモーションライブラリがあることがわかりましたので、ちょっとレンダリングしてみました。
それにしても、Houdini の場合、キャラクターさんを動かすには、パラメータをいじる方法によるのでしょうか。そうかもしれません。映画の中に生きているキャラクターさんたちは、アニメーターやモーションデザイナーやディレクターや、たくさんの人たちが時間と手間をかけて、優れたセンスで、まさに animate されたものであることがわかります。


ところで、Simple Female さんの肌や衣服にはマテリアルが設定されています。色はもちろん、風合いも設定されています。
ところがぎっちょん、Simple Female さんの mat 階層には、何もありません(え!)。
obj のジオメトリノードの中にダイブして、だいぶ(笑)探しましたが、マテリアルらしきものは見当たりませんでした。
謎ですwwww。
Chapter 12 レンダリングする
部屋のレンダリング時間は現状で1コマ1時間です。
ノイズを減らすためにサンプリング値をもっと高くすれば、もっと長くなるでしょう。
スノードームをキャラクターさんに運んでもらうことも無理ぽいです。
このあたりが、僕の現状の限界です。
というわけで、この時点で、仕上げのレンダリングをしましょう。
まずは、スノードームを棚の上に置いた絵です。まさに棚上げです(笑)。

そして、スノードームを机の上に置いた絵です。
白井黒子さんに瞬間移動してもらった、ということにしておきましょう(笑)。

そして、動画です。
別室のスタジオで撮影しました(笑)。

Chapter 13 メモ
① カプセルを作るときの Boolean ノードのアウトプットと、星の形を作るときの VEXpression のアウトプットで、メッシュが乱れました。
ブーリアン処理の結果のメッシュの乱れは、ノードのワーニングメッセージでわかりました。
星の形のメッシュの乱れは、シーンビューでわかりました。
どちらも、乱れたメッシュに、「Clean」ノードをつないだところ、乱れは解消されました。

② 「Fake Caustics」を発見したときに、分光のテストをしてみました。
「PrincipledShader」の「Surface」タブの「Transparency」のところの「Dispersion」の値を0より大きくすると、分光することになっています。
平行光とガラスの球を配置して、地面(または床または机上)に見立てたグリッドに影を落としてみました。
結果は、ガラスの球を透過してカメラに至る光は分光しているような感じですが、ガラスの球を透過して、グリッドに届いた光は、分光していない感じです。


③ 16.5のリファレンスの「マテリアルの構築」のところに、こんなことが書かれています。

(このあたりのHoudiniは、新しいバージョンのHoudiniがリリースされる度に改良されていく予定です。将来のバージョンのHoudiniでは、おそらく過去の入り組んだ問題を解決したレイヤー中心のわかりやすいワークフローになることでしょう。)

VOP の習得は、Houdini のバージョンアップのときに勉強すると効率的でしょうか?。
しかし、それまでの間はどう対応すればよいのかは要検討です。

④ 「obj」階層で「Geometry」を作ったときに中に入っている「File」ノードで、ファイルに書き出したジオメトリをリンクすることができます。
実際に「Sphere」ノードを書き出して、「File」ノードで読み込むテストをしてみました。

「Sphere」ノードをマウスで右クリックすると、ポップアップメニュー(コンテキストメニュー)が表示されますが、その中に、「Save - Geometry」のメニューがあります。
このメニューで、適当な場所に、ジオメトリのファイルを書き出します。

そして、「File」ノードのパラメータの中で、書き出したジオメトリのファイルを選択すると、 書き出したジオメトリを読み込むことができます。


⑤ 「uvTexture」ノードをマウスで右クリックしたときに表示されるポップアップメニュー(コンテキストメニュー)の中に、「Save - Texture UV to Image」のメニューがあります。
これを選択すると、uv の書き出しのダイアログペインが開きます。

書き出すファイル形式はいろいろ選ぶことができるようになっていますが、いずれもラスタ形式のようです。MODO では、EPS と SVG を選択することができます。
スクリーンショットでは PNG を選択することになっていますが、書き出すことはできませんでした。apprentice の制限かと思います。

「picnc」形式では書き出すことができました。このファイルをダブルクリックすると、Mplay が開いて、内容を表示してくれました。
サイズを 1000/1000 に指定したのですが、書き出された解像度は粗いものでした。

Mplay から PNG での書き出しをすることができました。
書き出されたファイルはこれでした。背景は透明でしたが、ここでは色をつけてあります。

apprentice の制限かと思います。思いますが、一言叫ばせてください。
セコイぞ!!ほうぢに!! (笑)

⑥ geometry ノードで部品を作って、別の geometry の中に「object merge」ノードを作って、作った部品の geometry をリンクして使う、という方法は、一見よさそうですが、部品に割り当てたマテリアルのリンクは引き継いでくれませんでした。
Chapter 14 いろいろ
① MODO で作ろうとしてうまくできなくて、Houdini ではできるだろうと思って、やはりうまくできなくて、それでもなんとかした、というものです。失敗の連続が、なかなか楽しいのではないかと思います。他人の失敗はメシウマでもありましょう。

② カプセルの中の液体の動きを流体シミュレーションして、その液体の動きを force にして、星の挙動に影響させる、ということをしなければ、本物の動きには近づかないと思います。

③ VOP の使い方がなかなかわかりません。アトリビュートがわかれば、たぶん、VEX でマテリアルをコントロールできるのだろうと思います。
と書いている僕は、勘違いをしているのだろうと思います。というのは、リファレンスに次のような記述があるからです。

Bind VOPを使用することで、現行ポイントでのジオメトリアトリビュートの値を取得したり、アトリビュートを設定することができます。

VOP/VEXを使って、サーフェスとパーティクルのノードを新しく作成することができます。これらのノードは、内部のVOPネットワークまたはVEXプログラムを評価して、 入力のジオメトリ/パーティクルのPointアトリビュートを操作します。

「ジオメトリアトリビュートの値を取得」することや「アトリビュートを設定する」ことは、VOP を使わなくても、SOP の AttributeWrangle を使えば、VEX でできます。また、AttributeWrangle に VEXpression を記述することで、Cd や Alpha のような、一部のシェーディング・アトリビュートをコントロールできます。
ということは、シェーディング・アトリビュートさえわかれば、SOP だけで、マテリアルを記述できてしまうことにならないでしょうか?。mat 階層も、VOP も、不要とならないでしょうか?。むしろ、そのほうが、すっきりとして、わかりやすくなるのではないかと思います。もしかすると、Simple Female さんは、そのように作られているのでしょうか?。
しかし、「サーフェスとパーティクルのノードを新しく作成すること」は、もしかすると、VOP でしかできないのかもしれません。いや、AttributeWrangle でも、パラメータ・エディタで編集して、ノードを作ることができます。やはり、mat 階層も、VOP も、不要ではないでしょうか?。

④ Chapter 11 で、キャラクターさんを動かすことを試みました。僕の現状ではパラメータをいじって動かすことしかできないだろうと思われますが、機会があれば、モーション・キャプチャーを使って、アニメートしてみたいものです。

⑤ MODO や Houdini を使い始めて日が浅く、笑える失敗をたくさんしておりますので、このような記事を作ることができますが、習熟が進むと、少々のテストで目的のものを作ることができるようになってゆくでしょう。したがって、本記のような失敗談の記事を作ることも次第に減ってゆくことでしょう。
しかし、大切なことは、輝かしい成功の中にではなく、衆目に触れない失敗の中にあります。大切なものは目に見えません。これからも、どんどん失敗してゆきたいと思います。