« アデランス。くろぐろとしたプラグイン。 | トップページ | 生産挑戦。 »

2008年7月24日 (木)

Bradley 氏の氷デモ追加。

Bradley Gabe さまの新しいデモが追加されていました。XSI Base のトップに貼られています。

直リンク。
http://www.vimeo.com/1392786

いやあ、この人のデモはスヴァらしいですね。今のところ他の追随を許していない。本家 Softimageさん大丈夫ですか。ラウンチイベントではこれよりもいいデモをやってくれるんでしょうね。

より実用的なやつです。人間の手からツブツブがつぶつぶつぶ~と出て行くやつ。まあ見てみればわかるでしょう。とても実用的。

あまりにもスヴァらしく、その価値があると思うので、内容を追って書いてみます。


これは他のデモでもやっていますが、まずそもそも最初にツブツブを発生させるときに数を指定してエミッタに貼りついたパーティクルを簡単に作れるのが良いですね(55秒付近)。今のパーティクルでも似たようなことはできるけど、プリロールしたりペイントしたりすることになるのかな、いずれにせよ氷ではずっと簡単に見えます。

その後、パーティクルの発生位置を、エミッタオブジェクト全体ではなく、ウェイトマップで指定しています(1:30付近)。 これも今のパーティクルで TextureMap(マテリアルの方ではなくプロパティの方) を Rate に貼り付ければできるけど、氷ははるかに簡単に見えますね。現在のはて、ウェイトマップでは指定できなかったような。どうだっけ。 

塗ったウェイトマップを実際に発生に反映させるには、Filter by Wightmap というノードを使っています(2:05)。その後、パーティクルの動きを制御するのに色情報を使うのですが、ここで RandomizeTurbulize の違いを解説しています。Randomizeはその名の通りランダム、お互いに関連がないデタラメな値を返します(3:55)。 Turbulize は時間と空間でパーティクル同士が関連し合って、コンティニュアスな=連続的なフラクタル模様を作り出しています(4:30)。

このフラクタルの強弱を、次のパーティクルの動きに移行するトリガ(引き金、きっかけ)に使います。まだ腕に貼りついたまま動いていない白赤のパーティクルのうち、白いところは動け、と指定するわけですね。State MachineState というノードを使っています。6:30付近の紫のやつですね。 State =つまり「状態」を定義するノードですね。 State Machine は Stateノードから供給された状態に応じて処理を分岐させるための、まとめノードという感じでしょかね?

フラクタルの強弱を判断するために赤白を黒白に変換しています。赤白のままでもできるはずだけど、黒白の方がわかりやすいからでしょうかね。それと、最初から白黒を発生させてもいいんだけど、色んなことができるのをデモする目的で、Convert to Grayscale というノードを間に挟んで白黒に変換しています(7:10)。

その後、Greater Thanノード、つまり「○○以上かどうか」を判断するノードを出し(8:10)、フラクタル模様の R チャンネルを取り出し(白黒になってるからRGB同じ値になるので、どのチャネルを取ってきても同じこと)Greater Than ノードの接続しています(8:18)。で、Greater Thanノードの中で「入力が 0.95 以上なら、真を返せ」と指定します(8:30)。入力はさっきのフラクタルだから、つまり 0.95以上=ほぼ白(1.0)に近ければを返すことになります。その結果を Stateノードのトリガにぶち込みます(8:35)。すると、真がトリガになって、Stateノードは、自身の中で指定してある次の State を起動します。

フラクタル発生(常に動いている) → フラクタルの白に近い部分は、次の State に行け。
と命令しているわけですね。

再生してみると、青が緑に変わって行きます(8:45)。青が最初の State です。フラクタル模様の動きによって 0.95 以上になった部分は次の State = 緑に移行しています。

次に、だんだん緑に移行する部分を増やして行くために、さっきの Greater Thanノードの閾値にキーフレームを打っています(9:20)。最初は 1.05 にしています。つまり 1.05 以上にならないと真にならないので次の State に移行するトリガにはならないのですが、発生させているフラクタルの一番明るい色が 1.0 である以上、1.05 以上という条件が真になるパーティクルは1つも存在しません。つまり全部のパーティクルが最初の State にとどまったまま(青のまま)になります。

次にフレームを進めて 0.517 というキーを打っています(9:30)。 約 0.5、つまり中間グレーになったら真になるよう設定しているので、このフラクタルの動きを見る限りほとんどのパーティクルが真になるはずです。つまり、時間が進むにつれてだんだん条件にヒットするパーティクルが増えて、ヒットしたらそれがトリガになり次の State = 緑に移行するように調整しているわけですね。

で、緑の State に移行したら何をするのかを指定しないといけないですが、ここでは、Windフォースを接続しています。Execute Stack に直接フォースをぶち込むと全部のパーティクルに効いてしまうので、緑 State の方にだけぶち込んでいます(10:40)。 つまり、さっきのフラクタルによって緑に移行したパーティクルだけが Windフォースによって飛ばされるわけですね(10:53)。

でも皆一定の飛ばされ方をしているので、乱してやるために、Turbulize Particle Velocityノードを使ってツブツブの加速度にばらつきを与えています(11:16)。 Randomize だとぐちゃぐちゃのランダムになるので、連続的に変化するよう、前と同様 Turbulize 系を使っているのでしょう。

以降はパーティクルにどう死んでもらうかの制御です。12:24付近で新たな State を追加して、パーティクルが死ぬ条件を設定します。 さっきは、次の State に移行する条件としてフラクタル模様の白黒強度を使ったわけですが、今回は一定時間が経過したことを条件にします。
Timer ノードを取り出し(13:00)、0.75秒という時間を設定しています。そして緑 State に接続しています(13:10)。つまり、緑が始まって 0.75秒経過したらそれがトリガになって3つ目の State に移行するということですね。Timerノードは時間の設定を供給し、供給された時間が経過したかどうかを実際に判断するのは Test Timerノードの仕事のようです(13:27)。 再生すると、青から緑に変わってから 0.75秒経過したパーティクルが、3つ目のState = 赤に変わっています(13:57)。

で、赤いやつらは死んで欲しいのだから、Delete Particle ノードを出して赤Stateに接続しています(14:23)。再生すると、赤パーティクルはもういません。死んだわけです(14:30)。

ただ、このままだと皆同じタイミングで死んでしまうので、ばらつきを与えるために、Randomize by Range ノードを出し(15:25)、0.5 から 1.5 というレンジを指定しています(15:30)。そしてそれをさっきの Timerノードにぶち込んでいます(15:35)。 つまり、さっきまでは 0.75 という固定の値だったのが、今度は 0.5 から 1.5 という範囲でランダムになるわけですね。 ここで Turbulize を使わないのは、Turbulize は時間と空間で連続的な値を返すため、パーティクルの死に方がおそらく絵に出てしまう(ある形を作ってしまう)であろうからです。死ぬタイミングは、ある形など見えずに、デタラメランダムの方がこの場合は良いという絵的判断ですね。

ということで完成。
流れを大雑把にもう一回まとめると、

1.ウェイトマップで制御された位置に、動かないパーティクル発生
2.パーティクル自体はまだ動かないけど、フラクタル模様を動かしてパーティクルの明るさを決定
3.明るい部分に入ったパーティクルから、風で飛ばす
4.風で飛ばされ始めてから 0.5~1.5秒経ったら、死ぬ

というデモでした。

なんだか俺が作ったチュートリアルのような書き方になってきてますが、もちろんこれは Bradley さんの力作チュートリアルであり、俺は5回くらい繰り返し見て超大雑把に翻訳しただけです。


いやあ、わかりやすく、実に実用的な、まさに現場的なチュートリアルですね。ノードのつなぎ方のルールなどは実際に触らないと慣れないと思うけど、氷ツリーの考え方の基本としてはスヴァらしく明快でした。実に説明が上手い。英語の発音もクリアで聞き取りやすい。英語が苦手な方も何度も繰り返しこのビデオを見て、よーく聞いているうちに、わかってくると思います。


今回はまたしてもパーティクルの挙動だけでレンダリングには触れられていないけど、次回は是非このツブツブ君たちをどうレンダリングするのか、ボリュームでブロブなシェーダについて語って頂きたいものです。

こりゃあ Bradley さんにビールおごらねえとなあ。




|

« アデランス。くろぐろとしたプラグイン。 | トップページ | 生産挑戦。 »

コメント

BradleyとJunkiさんに感謝、是非今度のラウンチでビールおごらせてください。
・・これじゃタダビールでしたね。
XSIの公式Tutorialも某機能読み上げではなくこの方のような本当のTutorialを期待したい所

投稿: XSI男ファン | 2008年7月25日 (金) 10時03分

XSI男ファンさま、Bradleyさんは、声はあんなにかっこいいのに体型はデブです。
差別発言ですか。そうですか。

投稿: junki | 2008年7月25日 (金) 11時37分

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: Bradley 氏の氷デモ追加。:

« アデランス。くろぐろとしたプラグイン。 | トップページ | 生産挑戦。 »