日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2010年1月10日日曜日

パーティクル・エクスプレッションを作るときの思考手順(1)

エントリ「スクリプティング学習における第三の壁」で、プログラミング初学者の訓練で重要な事として「データ」に関する事を考えることが重要であることがわかりました。

(参照元:ブログ:毎日操縦不能「プログラミング初学者にはどうデータ化するかをしっかり訓練させる」)
初学者に教えるときには、
●最初と最後の状態
●各状態をどういうデータをもって表現するか
を大まかにつかませる、


この知識をベースに「個々のパーティクルの特性は何で決まるか?」で取り上げた内容「メモ:radiusPP = linstep(0,lifespanPP, age);」を再考してみます。


まず、「radiusPP = linstep(0,lifespanPP, age)」は個々のパーティクルのサイズを変えるためのものであることはわかります。


これを上記のルールに下がい「最初と最後の状態」を考えてみます。

パーティクル全体を一つと考えていては答えはみつからない。
「単体のパーティクルの最初と最後の状態」として考える必要がある。
「最初と最後」とはパーティクルにおいては「発生してから消えるまで」
その状態であるから、
(1)生まれたときの状態
(2)消滅するときの状態

今回の例ではサイズを変えているので以下のようになる。
●生まれたときは小さく
●消滅するときは大きく



ではつぎに、「各状態をどういうデータをもって表現するか
これはすでに答えはでているが、radiusPPである。
しかしこれでは今ひとつ、納得いかない。

上記ブログ「毎日操縦不能」によれば、以下のように続いています。
それでも足りなければ一ステップの変化を追い、そこで必要な細かなパラメータやフラグを足す。

「1ステップの変化」とは「途中経過」であり、すなわち今回は
●徐々に値(サイズ)が増加する。
ということになる。

「必要な細かなパラメータやフラグ」というのは
●「変化率」の計算
●個々のパーティクルの特性を分ける値(「変化率」を変えるための値)
に関連している。

まず「変化率」を計算するには、
●徐々に変化していく値を算出する「linstep」

「個々のパーティクル特性を分ける」には
●存在時間をきめる「lifespanPP」


これらが徐々に変化するためにはステップ単位の時間が必要となる。
それを決めるのが
●時間上の現在地「age」
ということになる。



以上のことからパーティクルエクスプレッションを作るときの思考手順をまとめると
(1)パーティクル誕生時と消滅時の状態をどうしたいのかを決める。
(2)ここから操作すべきアトリビュートを特定できる。
(3)ステップ毎の変化を考える。
(4)それをどのように導くか考える(関数や計算方法)
(5)底に必要な値をどこから撮ってくるか考える。(アトリビュートなどの決定)


前よりはプロセスがはっきりしてきたように思いますが、まだ今ひとつな感じがします。


おまけ、
パーティクル単体に関連するアトリビュートを、大まかに分けて考えてみるといかの三つになる。

位置」に関するもの:位置、方向、速度など、(position, velocity, accelerationなど)
見た目」に関するもの:色、透明度、サイズなど(rgbPP, opacityPP, radiusPPなど)
時間」に関するもの: 時間、寿命、発生時間など (age, lifespanPP,birthTimeなど)
  

0 件のコメント:

コメントを投稿