>   >  スクリプト兵法書 〜MAX Script編〜:Vol.4:スクリプトの具体的な作り方(後編)
Vol.4:スクリプトの具体的な作り方(後編)

Vol.4:スクリプトの具体的な作り方(後編)

前回は「プログラムをどのように書いていけばいいのか?」に焦点を当てて解説しました。千里の道も一歩から、千行のプログラムも一行から、作りたいプログラムの内容を分析して、それを徐々に細かいパーツに分解していく感覚を身に付けるためには、自分でプログラムを書いてみるしか方法はありません。この連載を読んで 「なるほどー」と思うだけでは不十分です。ぜひ自分で試してみてください。
さて今回は、前回「Vol.3:スクリプトの具体的な作り方(前編)」 の最後に少しだけ触れた Particle Flow を使用してジオメトリの影を Cube にする方法の解説をします。PF でスクリプト!? と尻ごみをしてしまう人も多いかもしれませんが、基本は通常の MAXScript と同じです。

Particle Flow( PF )入門

そもそも Particle Flow(以下、PF)を触ったことすらない! という方も多いでしょう。そこで、まずは簡単に PF について解説をします。PF はその名の通り、パーティクルの処理の流れをグラフィカルに設定するためのシステムです。近いシステムに Houdini やノードベースで視覚的に各種機能の設定画行える Softimage の ICE、3ds Max のプラグイン thinkingParticles などがありますが、それらよりもシンプルなシステムのため、ノードベースの処理システムが苦手な人でも比較的簡単に使用することができることでしょう。

Particle Flowのプリセットをシーンに配置した例

PF のプリセット(Standard Flow)をシーンに配置した状態。デフォルトの表示では少し判りにくいので、Display をジオメトリにし、立方体を表示するようにしている

PF で処理するパーティクルの一生は以下のような感じです。

<1>生成(Birth)
......Birth オペレータでパーティクルを生成します。この時はパーティクルが生まれただけで、位置やその他属性は特に決まっていません

<2>配置(Position)
......Position オペレータでパーティクルの位置を決めます

<3>初期速度指定(Speed)
......Speed オペレータで、パーティクルの初速を決めます

<4>各種処理
......外部から力を与えたり、衝突判定をさせるなどしてパーティクルの挙動を制御します

<5>表示(Display)
......計算結果を画面に表示します

<6>消滅
......指定した条件に合致したパーティクルは削除します

以降は、計算ステップ毎に<4>〜<6>を繰り返します。そして、イベントの最後まで処理が終わると計算ステップが 1 回終わり、次の段階ではイベントを頭から計算し直します(Birth、Position、Speed などはパーティクルが発生した時にしか影響を与えません)。ここで重要になってくるのが、計算ステップの間隔です。PF では「インテグレーションステップ」と呼びます。

PF のインテグレーション ステップ設定パラメータ

PF のインテグレーション ステップ設定パラメータ

この値は、1 フレームをどれだけ細かく区切って計算するかというものです。当然、この値を細かくすればするほど計算の精度は上がっていきますが、それだけ計算時間も増えます。また、ビューポートとレンダリングで値を変えれば、プレビュー時の結果とレンダリング時の結果も違ってきます。それらをきちんと考慮した上で、この値を決める必要があります。

インテグレーション ステップ計算方式の概念図

インテグレーション ステップ計算方式の概念図。1フレームでは、計算が1回であるのに対して、1/4フレームでは同時間で4回に分けて計算を行うため精度が上がる

より詳しい内容は、Autodesk 3ds Max ヘルプから、[ Autodesk 3ds Max ヘルプ→スペース ワープとパーティクル システム→パーティクル システム→パーティクル フロー→パーティクル フローの操作方法]を参照してください。

その他の連載