パーティクルを使っているときに、時間に関するキーワード、アトリビュートや変数によく出会う。
なんとなくわかったつもりになって使っていたが、エクスプレッションで使う際にキーワードとアトリビュート名が混乱している。
頭を整理するために調べてみた。
--------------------
--------------------
<time キーワードと frame キーワード>
これはパーティクルに限らずエクスプレッションであれば使うことができるものだ。
機能は、フレームレンジでの現時点の値を返すだけ、変更は出来ない。
オンラインマニュアルでは、関数でも変数でもなく「キーワード」として扱われている。
使い方は変数と同じ。
現時点の、「ミリ秒」もしくは「フレーム数」が格納された変数と考えればよい。
---<time>---
time: タイムライン上の現在地(時間)
秒数
24fps:1フレームあたりの時間は、1(秒)÷24(フレーム)=0.041666666・・・ =>0.0417秒(41.7ミリ秒)
30fps:1フレームあたりの時間は、1(秒)÷30(フレーム)=0.033333333・・・ =>0.0333秒(33.3ミリ秒)
注意:似たものに「timeノード」がある。
これは、秒数ではなく現時点のフレーム数を出力する。
混乱しやすいので注意
---<frame>---
frame: タイムライン上の現在地(フレーム数)。
フレーム数
--------------------
--------------------
<パーティクルのアトリビュート>
これはパーティクル・シェイプに存在するアトリビュート
age以外は、それぞれユーザーが設定、変更できる。
アニメーション操作は、キーフレーム、エクスプレッションが可能。
---<age>---
age: (年齢) 各パーティクルが最初のフレーム以降、存在する秒数。
秒数。変更不可。
ヘルプ内に詳細の説明を見つけることは出来なかったが、1フレームあたりの秒数なので計算方法は「time」キーワードと同じだろう。
---<currentTime>---
currentTime: マップされているフレームを示している。パーティクル全体に影響
フレーム数
注意1:デフォルトではtimeノードにコネクトされており常に現時点のフレームを示している。
注意2:キーフレームでコントロールする場合、全フレームをカバーしている必要がある。
もしキーフレームが100フレームで終わっているならそれ以降のパーティクルはなにも動かない。
以下にキーフレームでコントロールしたときの関連を示す。
実際のフレーム currentTime
001-100(100フレーム) 001-200(200フレーム) (2倍の速度)
101-200(100フレーム) 201-250(50フレーム) (半分の速度)
上記の例であればフレーム100を過ぎた時点で、パーティクルの全スピードが半分になる。
キーフレームの付け方次第で、マトリックスのようにリアルタイムから超スローモーションへ、そしてまたリアルタイムに戻るような、タイムワープをスムースに作ることができる。
参考までにオンラインヘルプの解説は以下の通り
それぞれのパーティクル オブジェクトには、パーティクル エフェクトを遅くしたり早めたりするようにアニメートすることができるカレント タイム(Current Time)アトリビュートがあります。このアトリビュートは独立した時刻の値を含みます。基本的には、パーティクル オブジェクトのクロックを遅らせたり早めたりして、作用するダイナミクスを遅らせたり早めたりします。
---<lifespan>---
lifespan: パーティクルの寿命を設定する。
秒数。
lifespan「1」=1秒を示す。
24fpsの場合、24フレーム経過したときにそのパーティクルは消滅する。
24fpsの場合、1フレームは、0.0417秒(41.7ミリ秒)に相当。
関連するアトリビュートがいくつかあるが詳細はヘルプを参照。
「lifespanAttributes」で設定したり「lifespanPP」にエクスプレッションを作成して使用する。
「lifespanAttributes」で「Randam range」を使用する場合。
「LifespanRandam」の値は、lifespanの値から+-の範囲を示す。
lifespan: 5
lifespan Random: 4
と設定した場合、5から、プラス値へ2まで、マイナス値2までのランダムの値になる。
----------------------------------------
<<まとめ>>
何を明確にしたかったかというと、
1)それぞれがどんな値を返してくるのか(フレームなのか?秒なのか?)
2)どれが読取り専用でどれが変更可能か?
簡単にまとめると以下のようになる。
time: ミリ秒(読)
timeノード:フレーム(読)
frame: フレーム(読)
age: ミリ秒(読)
currentTime:フレーム(読・書)
lifespan: 秒(読・書)
名前に「time」という単語が含まれいるとどうしても秒数を連想してしまう。
しかしながら「timeノード」と「currentTime」はフレーム数を扱う。
また「age」「lifespan」はフレームで制御したいところだが秒数になっている。
これらが混乱の原因だったと思う。
0 件のコメント:
コメントを投稿