Day 3-1 : Paste Relative Reference の作例を改造してみましょう。
Box はデフォルトの状態だと、ピボット(回転・スケールをかけるときの基点)が中心で、かつ原点( XYZ すべての座標が 0 ) にあります。
この箱の底面が常に高さ 0 になるようにしてみましょう。
いま、シーン内にある立方体の一辺の長さは CONTROLLERで 指定している値になっています。
そしてピボットがオブジェクトの中心にあるわけですから、一辺の半分だけ Y軸方向=上方向に移動させれば底面の高さが 0 にできそうです。
Center Y に CONTROLLER の width の値を Paste Relative Reference して 最後に 「 / 2 」 と追記します。
/ は割り算を意味します。「 /2」は「÷2」という意味になるわけです。
一辺の半分だけ 上 ( Y+方向 ) にずらすわけですから、底面の高さが 0 になります。
「 /2 」ではなく 「*0.5」と書き換えてみてください。結果は変わらないはずです。
* は掛け算を意味します。「 *0.5 」は「 × 0.5」という意味です。
1/2 したのと同じ結果になりますので、同様に底面の高さを 0 になります。
また CONTROLLER の width の値は Box の Size X の値と同じで 同様に Size X と Size Y, Size Z の値も同じになっています。
従ってこのように書くこともできます。
掛け算や割り算を 「 * 」 , 「 / 」で表現できることは説明しました。 その他の計算方法についてはどうでしょうか。
足し算は 「 + 」、引き算は「 - 」とそのまま書くことができます。
また余りを計算する時には 「 % 」が使えます。 具体的には 3%2 と書くと 1 が答えになります。
^2 と書くことで累乗を表現することもできます。 具体的には 2^3 と書くと 2×2×2で答えは8になります。
少し書き方が複雑になりますが切り上げや切り下げもできます。
ceil(n) で 小数点以下を切り上げます。 ceil(1.2) は 2になります。
floor(n) で 小数点以下を切り下げます。 ceil(1.2) は 1になります。
ceil は天井で floor は床という意味ですね。
round(n) で 近い整数値を返します。 round(1.4) は 1 になりますし round(1.6) は 2 になります。
小数点以下だけを得る方法もあります。 frac(n) という書き方です。 frac(1.3) は 0.3になります。
今作成した箱をAとしたときに、一辺の長さがAの一辺の半分になる箱を載せてみたいと思います。
箱Aを複製して Merge します。 それぞれ別の色を設定しておくとわかりやすいかもしれません。
箱B は 箱Aのコピーなので設定を引き継いでいます。
Size Y, Size Z は Size X の値とリンクしているわけですから Size X の値だけ書き換えれば良さそうです。
Size X の値を ch("../CONTROLLER/width")/2 と書き換えると 一辺の大きさを半分にできます。
箱Bが 箱Aに常に乗る用にするには 箱Bの 高さをいくつにすればいいでしょうか。
イメージしにくければ一度絵にかいてみましょう。
箱 A の高さ プラス 箱 B の 一辺の長さの半分だけ持ち上げれば良さそうです。
また箱Bの一辺は 箱Aの一辺の半分なわけですから、箱A の 一辺 + 箱Aの一辺の 1/4 という書き方もできそうです。
今回は前者で設定してみましょう。
このように設定することで 箱Aの大きさを変えたとしても その半分の大きさの箱Bが 常に箱Aの上に載っている状態を維持することができます。
最後に グローバル変数について説明します。
CONTROLLER の width の値に " $F " と入力してみます。
この状態で ビューポート左下にある再生ボタンを押すと 箱がどんどん大きくなっていきます。
この $F は 現在のフレーム番号を示す グローバル変数と言います。
シーンの開始フレームや最終フレームなど、シーン全体が持っている情報を取得できます。
どんなグローバル変数が使えるかは こちらに詳しく書かれています。
最後にもう1つ作例を作ってみましょう。
Object 階層に上がって もう一つ Geometry ノードを作ります。
箱が入っている Geometry ノードは ビューフラグをオフにしてしまいましょう。非表示にすることができます。
新しい Geometry ノードの中に入って Sphere ノードで球体を作成します。
そして Sphereの Center Z に sin($F) と書いてみましょう。
再生すると ボールが前後に移動するようになります。
Sin とは三角関数のサイン = Sin のことです。
三角関数というと難しいイメージですが、要するに
半径 1 の円上にある点Pと 円の中心、P( 1, 0 ) の三点を結んだときに出来る角度をΘと置いたとき
P の Y 座標がサイン, X 座標がコサインです。
例えば Θが 90 度の時は X 座標が 0 で Y 座標が 1 になります。
Θが 180 度の時は X 座標が -1 で、 Y 座標が 0 になります。
そもそもの定義が円上の点を示すための座標ですので
Center X に Cos($F), Center Z に Sin($F)と書いてあげると、球体が円運動するようになります。
1 周は 360 度ですから 360 フレームで 1 周する形です。
Cos($F*10), Center Z に Sin($F*10)としてあげると 1 フレームで 10 度進むことになりますから 10 倍の速度で回転します。
サインもコサインも 半径 1 の円周上のX座標、Y座標になるわけですから、必ず-1 ~ 1 の範囲で値が返ってきます。
しかも、値の変化が周期的なので、今回のような円運動だけでなく、波のような周期的な動きを作るためにも使えます。
e.g. サインカーブで作った蛇