山里ぽん太

Kaleidoscope

10 February 2019

山里ぽん太は涸れ井戸を覗き込みました。


Chapter 1 涸れ井戸
道端を歩いていると、涸れた井戸がありました。
井戸口の木組みが、三角に組まれた井戸でした。
その涸れ井戸を覗き込むと。。。
というわけで、涸れ井戸、もとい、カレイドスコープです。
和名では、万華鏡です。
Chapter 2 万華鏡
万華鏡というのは、アレです。
細長い鏡を3枚組み合わせて、三角柱にしたアレです。
鏡は内側を向いています。
端の一方は、透明なガラスになっています。
端のもう一方は、不透明な壁で、壁の真ん中に丸い穴が空いています。
三角柱の中には、色とりどりの星の砂だとかが入っています。
三角柱の端の一方の透明なガラスを明るい方に向けて、もう一方の端の丸い穴から覗きます。
三角柱をぐるぐると回転させると、色とりどりの星の砂だとかが、動きます。
そして、色とりどりの星の砂だとかが、3枚の鏡に反射して、いろんな模様が見える、という仕掛けです。
その模様が、千変万化する花のようだ、ってんで、万華鏡、という名前をつけたのだろうと思います。
昔、縁日のテキ屋とかで買って遊んだものでした。
星の砂は、いろんな色の、樹脂のチューブを細かく切ったものとかが入っていたように思います。
Chapter 3 Houdini で万華鏡を作る
というわけで、Houdini で万華鏡を作ってみましょう。
構造は簡単です。
grid で作った3枚の鏡を三角柱の形に組み合わせて、両端に grid を当てるだけです。
はい、できました。

Chapter 4 星
というわけで、星を入れましょう。
星は、やはり「☆」でしょうか。
いえ、ここは六角形にします。
六角形というのは、アレです。
雪です。
雪は、星じゃないのではないでしょうか?。
大丈夫です。
雪だって、空に浮かんでいる間は、星みたいなものです(マジすか?)。
というわけで、できました。

Chapter 5 空に浮かぶ雪
万華鏡の中に雪を入れて大丈夫でしょうか?。
鏡にくっついて、雪の塊になって、溶けてしまうんじゃないでしょうか?。
大丈夫です!。
Houdini は魔術師です!。
不可能はありません!!(おおー!)。
というわけで、雪は、万華鏡の中を降ります。
Chapter 6 舞う雪 その1
ここで、星ではなく、雪にしたことを、若干後悔したのでした。
雪は、ひらひらと舞うのでした!!(がーん!)。
舞う動きはどうしましょう。
大丈夫です!。
Houdini は魔術師です。
不可能はありません!!(もういいってw)。
Chapter 7 舞う雪 その2
というわけで、雪が舞う動きを作るネットワークを作りました。

一番上の tube と 次の scatter でポイントを作ります。
次の、attributewrangle_Scatter_Y では、作ったポイントを、Y 方向に適当にばらまく操作をしています。
その次の、solver_Fall で、ポイントの Y座標を変化させて、ゆるやかに下降させます。
その次の、attributewrangle_rotate で、雪が舞う動きをつけています。
雪が舞う動き、と言っても、回転するだけです。
X座標とZ座標を動かすと、いろいろ面倒なので、ここでは、X座標とZ座標は固定です(笑)。
要するに無風状態で、雪は静かに降る、というわけです(笑)。
その次の、attributewrangle_pscale では、雪の大きさに少し変化をつけています。
そして、copytopoints で、雪をポイントにコピーしています。
Chapter 8 舞う雪 その3
というわけで、attributewrangle_rotate の VEX のコードはこんなことになっています。
quaternion で @rot アトリビュートを作るだけです。

1行目の「v@axis = noise( @P );」がけっこうミソです(笑)。
「noise()」関数は、Perlin Noise を発生してくれます。
そして、「noise()」関数の戻り値の型は、スカラー型とベクター型の2通りあるのですが、どちらの戻り値を希望するかを、明示して指定する方法はありません。
なので、代入演算子「=」の左辺に、「v@axis」と、ベクター型のアトリビュートを書いて、「ベクター型をくれー!」と、叫んでいます(笑)。
この「v@axis」のところを、「vector axis」と、変数にすると、「noise()」関数は、スカラー型の戻り値を戻してくれます。
このことに気づくのに手間取りました。
「あれー?、うごかないー?、なんでー?」と(笑)。
式そのものは単純で、回転軸が偏っているんじゃないかとか、正規化していないんじゃないか、ツッコミどころ満載です(笑)。
Chapter 9 レンダリング
というわけで、レンダリングしてみました。
時間の節約のために、次のようなことをしています。
①サイズは、640 / 360 です。
②雪の透明度はゼロです。
③mantra のパラメータの reflection limit の値は「10」です。
④雪(point)の数は、ぜんぶで100です。カメラに映るのはその半分以下です。

Chapter 10 メモ
① PrincipledShader の reflection を 1 にして、roughness を 0 にするのですが、きれいな鏡面反射ではなく、すこし、ボケる反射になります。これは、おそらく、PrincipledShader がそう設計されているからなのだろう、と思います。

② 雪の結晶の透明度はゼロにしてあります。少し透明にして、分光をつけて、虹色にしようとしたのですが、うまく分光してくれませんでした。

③ ①②のようなことがあって、Houdini の個性ある絵が生まれるのだろうと思いますが、このあたりは、いつか自由に変更できるようになりたいものです。