TPのエクスプレッションで値を操作する手法などをメモしていこうと思います。随時更新ってことで{%ピクトハカセhdeco%}
こういうのは、なるべく多く引き出しがあると良いですね。
とりあえず、考えるより引き出しを多くしていきたいです!
後、関数が使えるとこは関数使っています。
関数ヘルプ←式の使い方で検索
※スカラー値の変換であれば、Value To Timeノード+Floatノードを使えば、グラフで変換できるので便利!!←詳細は
米岡さんのブログに記されています。
今後ノードのパラメータ上でグラフが扱えることに期待。
はじめに、、
ベクトルについて
①ベクトルは方向と大きさのみを持った値
②空間での、あるポイントのワールド位置座標は原点からのベクトル値である
■スカラー演算
●値の範囲を「0~1」に変換。値を正規化する。
---------------------------
Input値
lifespan = 200
age = 0,1,2,・・・・,200
---------------------------
式
age/lifespan
---------------------------
Output値
0,0.1,0.2,・・・・,1
---------------------------
※正規化とは、値を利用しやすくすること。
例えば、範囲が「23~343」のような任意の値を「0~1」の範囲に値を変換し利用しやすくしたりすること。
●値の「0~1」を「1~0」に反転する
---------------------------
Input値
a = 0,0.1,0.2,・・・・,1
---------------------------
式
1-a
---------------------------
Output値
1.0,0.9,0.8,・・・・,0
---------------------------
●任意の数の比率をフロート値で求める
---------------------------
Input値
a = 30
b = 70
---------------------------
式
a/a+b =x
b/a+b =y
---------------------------
Output値
x=0.3
y=0.7
---------------------------
●値の「0~1」を0.5を最大値とし、0.5以上は0に減っていくようにする
---------------------------
Input値
a = 0,0.1,0.2,・・・・,1
---------------------------
式
0.5-(abs(a-0.5)) //absは絶対値
---------------------------
Output値
0,0.1,0.2,・・・,0.5,0.4,0.3,0.2,0.1,0
---------------------------
●三角関数で曲線を表現する
上手く説明できないのでメモです。
sin(a*b)*c+d
a:位相
a=0,1,2,・・・∞
b:周期
c:振幅
d:初期位置
xにcos、yにsinで円を表現することができる。
さらにzに位相(時間など)を加えることにより、上方に向かう螺旋を表現できる。
a,b,c,dにそれぞれ任意の値を入れ、(x、y、z)に上記の式を入れることにより、様々な曲線を表現できる。
もちろんcosでも良い。
パーティクルを動かすというより、パーティクルの配置に使うほうが良いか。。
動かす場合は、Positionオペレータでフレームごとに位置を与えていく感じ。
よってベロシティが簡単にとれないので、パーティクルを動かすには不向き?
ということは、ベクトルで動かすほうが良い?
すみません、すげー基本的なことかもですが混乱気味なのでダラダラと、とりあえずメモしました。
●オブジェクトを地面に転がせる際に回転を同期させる
1軸 degreerad((X_Position)/(Radius*pi))*360
3軸 quaternionを使用
https://vimeo.com/album/2630843/video/80532054
●剰余を使ってエクスプレッションの値を繰り返す
http://sidefx.jp/doc/ref/expression_cookbook.html
■ベクトル演算
●単位ベクトルを求める
---------------------------
Input値
v1(任意の名前) //ベクトル値
---------------------------
式
unit(v1)
---------------------------
Output値
v3(任意の名前) //v1,v2に対する直角のベクトル
---------------------------
●二つのベクトルに対する直角のベクトルを求める。これを外積という。
---------------------------
Input値
v1(任意の名前) //ベクトル値
v2(任意の名前) //ベクトル値
---------------------------
式
v1xv2
---------------------------
Output値
v3(任意の名前) //v1,v2に対する直角のベクトル
---------------------------
●二つのベクトルのなす角を求める。これを内積という。値はスカラー値になるので注意。
---------------------------
Input値
v1(任意の名前) //ベクトル値
v2(任意の名前) //ベクトル値
---------------------------
式
acos(v1*v2)
---------------------------
Output値
v3(任意の名前) //v1,v2のベクトルのなす角(スカラー値)
---------------------------
●ベクトルの加算を用いて、ある二点(A,B)を結ぶ線上に位置するポイントのワールド位置座標を取得する。
ベクトルを加算する前に、v2の値を決める。
①線分ABの単位ベクトル(方向)を取得する。(TPでいうと、点A,Bをポジションとする、DistanceノードのDirection値)
②ベクトルの大きさを用意する。(スカラー値)
③①と②を乗算することで、大きさと方向を持ったベクトルv2ができあがる。
---------------------------
Input値
v1(任意の名前) //ベクトル値
v2(任意の名前) //ベクトル値
---------------------------
式
v1+v2
---------------------------
Output値
v3(任意の名前) //原点から線分AB上を終点とするベクトル
---------------------------
●ベクトルの減算を用いて、ある二点(A,B)のベクトルを作成する。distanceノードがあるのであまり使い道ないかもだが。。。
●反射ベクトル
Input値
v1(入射ベクトル) //ベクトル値
v2(衝突サーフェスの法線) //ベクトル値
---------------------------
式
(-1*2*(v1*v2)*v2-v1)+v1
(2*(v2*v1)*v1-v2)
---------------------------
Output値
v3(反射ベクトル)
---------------------------
■条件式
if(式,真,偽)
例:if(pos.z>50,1,0)→Zポジが50以上なら、真、以外は偽