実践編4 4次元的思考で波を作る戻る デジタル降魔録へ 次へ
使用されている略語は以下のとおりです。
C4d L……Cinema 4D Lite AE……After Effects Ai……Adobe illustrator Ps……Photoshop
4次元的思考……なんだかハードルを上げたタイトルになってしまいましたが、SF的な話をするのではなく、純粋に数学の話になりますので、さーっと流してしまいます。
簡単に次元を説明すると、C4d Lは 3次元の世界を 2次元のディスプレイに表現している、これだけのことです。そのときに重要になるのが座標。『X、Y、Z』座標ですね。これを利用して物体を作り、あるいは座標位置を変数として、その内容を変化させるキーフレームを打って、アニメーションを実現しています。
これにあと一つ変数を足してやれば、いつもと違う世界が見えてくる。それが 4次元的思考だといってもいいのでは? なんてことを考えていたのですが、そんな小難しいことをいわなくても、C4d Lにはちゃんとそれなりのものが準備されています。それがデフォーマの【数式】でした。
最初のころは使い方が全く分からず、そのまま放りつけていたのですが、調べてみると、意外と面白いものを作れることに気づいたのです。
この【数式】デフォーマは何に対して使用するのか、簡単に言えば何らかの物体に対して利用します。立方体、球体、三角錐、何でもいいです。平面とかスプラインパスに対しても利用できます。
デフォーマは立体物に対して各種の変形を可能にして、その効果を得るものです。この流れから【数式】は計算式に応じた変形を作るものとなります。
実際の例で見てください。まずは平面に対して【数式】を使ってみます。
メッシュオブジェクトの平面を出したあと、続けてデフォーマから【数式】を選びます。オブジェクトマネージャに出たら、平面の子階層に入れます。すると上の画像のように【属性マネージャ】にいろいろと初期化されたパラメーターが並びます。
すでに変形して帽子のような形なっていますが、今は気にしないでください。順に進めていきますから。
まずは属性マネージャの説明からです。
①サイズ
これは数式デフォーマの効果が届く空間の広さです。平面のデフォルトサイズは400×400ですから、それと同じ範囲にすっぽり収まっています。【上面】ビューを見るとその様子がよく見えています。
②効果
ここで指定した軸方向に、計算結果を適用することになります。デフォルトは『Y軸方向』になっていますので、計算の結果が Y軸に現れます。
数学的な書き方をすれば『y=x+1』の、『y=』の部分です。
③d(u,v,x,y,z,t)
ここに使用する数式を入れます。先ほどと同じように数学的な書き方をすれば『y=x+1』の、『x+1』の部分です。
プログラムの経験がある方なら何の抵抗もないと思いますが、四則演算子で『×(掛け算)』は『*』、『÷(割り算)』は『/』と書きます。もちろん全角文字は使用禁止です。
数学と同じで掛け算、割り算を先に計算するように書きますが、先に足し算をしてから、というときはカッコ、『( )』で括ります。そしてカッコの入れ子(ネスト)もありです。
(x * (y + 10)) / 2
この場合は(y+10)を先にやってから次に x を掛けて、それを 2で割るということになります。
またどんなにカッコが入れ子になっても、すべて丸カッコ "( )" で統一します。 "{ }" や "[ ]" は使用しません。
それと数式を利用していて最も多いエラーはカッコの閉じ忘れです。カッコ "(" と、カッコ閉じる ")" がペアになっていないとエラーです。
また、エラーがあっても教えてくれません。数式を入れたのに何も変化が無い、あるいはオブジェクトが消えてしまうときは、どこかでカッコの閉じ忘れがあるか、使用できない変数を使っているか、など何かのエラーが起きていると思ってください。
さてここで疑問が……。
この『x』や『y』などは、いったい "どこの" 、あるいは "どの" 物体に対する『x』なんだという疑問です。
そうですね。首をかしげるのは当然です。ストレートにお答えしますと、これは【数式】が入れられている親のオブジェクトの分割点に対して計算結果を反映させます。ここでいう『親』は【数式】デフォーマを入れている『平面』オブジェクトです。その分割点が対象になっています。
分割点の説明を始める前に、次の数式を実際に入れてどうなるか実験してみましょう。
2*x
『2*x』と入れます。数学的に記述すると y=2x ですが、数式欄には『*(掛ける)』が必要です。そうしないと、『2x』という変数だと判断されて、おかしな結果になります。
正しく入力されていれば、この数式は比例の数式なので右肩上がりになります。比例定数は 2です。
するとただの平坦だった平面がこのようになりました。
これは、平面を斜めに傾けたのではありません。『y=2x 』という数式の計算結果として右肩上がりの平面になったのです。
どのように計算したのかを説明する前に、【数式】デフォーマの親である平面オブジェクトの構造を見てください。
上の画像のように、ビューの【表示】を『ワイヤーフレーム』にしましたので、平面が縦横 10個の面で分割されているのが見えます。分割数で切られた交点部分が分割点で、上の例の場合、高さ幅ともに 400cmで、分割数が 10(上の画像ピンク枠内)ですから、分割点の間隔は 40cmおきに存在することになります。この分割点すべての『y位置』が一つずつ順番に『2*x』を計算して、そのときの答えが yに反映され、上の絵ができています。
分割点が多いほど計算に時間が掛かりますが、画像は高精細になります。
【数式デフォーマの重要ポイント】
さあ、ここからが【数式】デフォーマのキモの部分ですよ。
y=2x
この場合の『x』は親である平面の『x』ではなく、デフォーマの『x』から見た分割点の『x』です。その計算結果を親が持っている分割点、一つ一つの『y』に反映させているところです。
ここが混乱のもと。デフォーマの『x』から見たと説明しますと、時空間の座標位置を思い浮かべて、ああ、【数式】デフォーマの x座標ね、とか、
【数式】デフォーマの『x』から見た分割点の xだから、それは分割点のxでしょ。
とか思いがちですが、そうではなく、【数式】デフォーマの軸(中心)を原点にして見た、分割点の相対的な横位置(x位置)になり、答えがその分割点の縦位置(y位置)に入る……。
「ちょっと、何言ってんのか分からないです」
――ですよね。
この『相対的に~』という表現は抽象的で、なかなか理解しづらいところです。そこでこう考えてください。
【数式】デフォーマはグラフ用紙です。大きさは属性マネージャの【サイズ】で示されたとおり、この例では『400×400』cm(ややこしいので zは省略しました)です。
そしてこのグラフ用紙は透明で、中央に原点が(0,0)が印刷されていて、それが【数式】デフォーマの軸位置です。
このグラフ用紙をスライドさせて好きな位置へ移動できるのが、【数式】デフォーマの【座標】=(x,y,z)の数値です。
つまり【数式】デフォーマをどこに移動させようとも、グラフの原点は【数式】デフォーマの中央(軸位置)です。
その透明グラフ用紙の下に分割点が並んだ親の平面があると考えてください。
計算は、平面の分割点ごとに行われますが、その分割点から尖った "ピン" を差し込みます。そのピンの先が刺さった【数式】デフォーマの x位置、中央を(0,0)とした相対的な位置から見たピンの先の xから『2*x』が計算されて、いま差し込んだピンがある分割点の y座標が決まります。それがデフォーマの中央(y,x)=(0,0)を通る傾き 2の右肩上がりの平面になったわけで、元の平面を回転させて斜めにしたのではありません。
デフォーマが動くと原点(0,0)も一緒に動くので、その相対的な位置は動いていない、という部分は理解しやすいと思いますが、原点から相対的に見た分割点の x位置、となるとなんとなく解ったような、解らないような、もやもやした気分の方に、もうひと押しさせてもらいます。
下の画像は、親の平面の分割線(黒色ライン)がクロスする点(分割点)と【数式】デフォーマの原点(x,y)=(0,0)が一致した部分を、赤色のガイド線で表した 3D画像です。
斜め上から見ていると想像してもらえると理解できると思います。そして赤色ガイドより左側がマイナス方向で、(-1,-1)~(-3,-3)の青色のガイドで表現、右側がプラス方向で、 (1,1)~(2,2)の緑色ガイドが通っています。
デフォーマを右に一つ動かします、つまり x=1 にするとこうなります。
【数式】デフォーマの中心は(1,0)に移りますが、グラフの用紙の原点は中心にあるため、上の画像のようにグリッド線(赤色のガイドや他のガイド)は何も変わりません。印刷された透明のグラフ用紙は動かしても方眼の部分は変わらないのと同じです。しかし、もと分割点だった場所は (-1,-2) に移動しています。
計算式は『y=2x』なのに、なぜ xが -1で、y座標が -2になったのか。ここが相対的に見ている証となります。つまり【数式】デフォーマの原点を世界の中心にして考えるということです。【数式】デフォーマが王様です。王様から見たものがすべてですから、その原点(0,0)から見た左側はマイナスです。ということで、原点がプラス方向に 1動いたので、いままで 0だった位置は -1になります。それが計算式に反映されて
y=2×(-1) = -2 となって、
前は原点位置だった分割点が計算後、(-1,-2) になったということになります。
そうして、【数式】デフォーマをどんどん右に動かしていくと、平面は左下へどんどんズレていくことになります。
この考え方で計算式を『2*y』(y=2y) に変えてみてください。面白い結果になります。
他にも次の計算式でも【数式】デフォーマの中心がグラフの原点になっていることを説明できます。
Abs(x)
『y = Abs(x)』は絶対値を求めるもので、xがマイナス(負)のときは強制的にプラス(正)の数にします。
この数式で試した動画が次の例です。これでその理由がはっきりします。
映像を動かして見る前に、画像の説明をします。
『Abs(x)』という数式をグラフにしますと、xがマイナスのときは、yが常にプラスの値を取ります。したがってグラフは『V字型』になります。その折れ曲がり点がグラフの原点になります。
映像では、【数式】デフォーマを左右に動かしていますので、原点も一緒になって動きます。そして絶対値のグラフは原点で折れ曲がりますから、平面もその位置で折れ曲がります。ただ、分割点が無い位置に原点が来ると、折れ曲がることができないため、その周囲の分割点が動ける範囲内で動いて、つじつまを合わせています。だから角が平たい『V字』になるときがあります。この場合は分割点を増やせば解決します。分岐点が多いほどラインが滑らかになるのは、このような理由からです。
x * x
次は y = x2 ですね。中学で習った『放物線』ができます。カーブがカクカクしないようにするには、平面の分割を大きくします。最大『1000』までできます。
Exp((-x*x)*5)
y=e-5x2 です。これはガウス分布の釣り鐘型の形を作る指数関数の数式です。
指数関数というのは "何倍の数(底:てい)" を "何回掛け算" するのかというもので、
y=ax
で表されます。aが底で、xが掛ける回数になります。
普通の関数、例えば『y = 2x』のような計算式は、掛けられる数(この場合は "すう" と読みます)『2』が固定されていて、掛ける数である『x』が増えていくカタチです。
それに対して指数関数は、掛けられる数(底)はそのままで、掛ける回数(指数)がどんどん増えていくのが特徴です。
《補足》
小学校の算数ではy=2x のような書き方はせずに、y=x×2 のように書き、この場合は xが掛けられる数で、2が掛ける数となります。中学校の数学からは "数字を文字の前に書く" というルールに変わるため、記述の順序が逆になります。
そしてこの底に eを使い、さらに掛ける回数を『マイナス 2乗』の形にしたものが、ガウス分布と呼ばれるものになります
じゃあ、こんどは eってなんだ、となります。だんだんここが数学の教室みたいになってきましたが、簡単に説明しておきます。
eは自然対数の底(ネピアの数)とよばれるもので、具体的には『2.7182818…』と無限に続く数です。超簡単にいうと、円周率が『3.1415926…』で記号 『π 』だと覚えたように、記号『e』は自然対数の底で『2.71828…』だということです。
とにかくこれを使うと、「自然界のアナログ的な数値の変化や確率の広がりを分析したときに、数式が一番美しくシンプルにまとまるんだぜ」と "ネイピア先生が作った対数の仕組みをベースに、エライ数学の先生が発見した" いうことです。
上の式では、-x2を 5倍にしていますので、通常のカーブよりも横幅がキュッと狭まり、裾はゆるゆると、途中から急激に盛り上がって素早くきれいに平らになるようなカタチになります。
さて、前置きが長くなりましたが……(ええ~っ、これでオープニング!?)。
ひとまず【数式】デフォーマはグラフ用紙だったということが理解できたら、まずは一つの山を越えました。あともうひと山あります。
ここまでは『x, y, z』という 3次元の空間をベースに考えてきましたが、ここに新たな変数である『時間 t』を加えます。つまり、空間に時間を加えた 4次元的な思考の計算式を使って、いよいよ静止画からアニメーション(波の動き)へとステップアップしていきます。
ここで最初の例題に戻ります。
分割数を100にした(10では粗すぎますので)平面オブジェクトに【数式】デフォーマを適用するとこんな絵が出ます。
色が無いと寂しいので赤い色にしました。まるでテンガロンハットのような形です。
初めて【数式】デフォーマを平面オブジェクトに掛けたとき、数式入力欄は次のようになっていたと思います。
d(u,v,x,y,z,t) = Sin((u+t)*2.0*PI)*0.2
この計算式をそのまま見ただけでは、何がなんだかよく解りませんが、変数と係数に分解すると構造が見えてきます。
変数は 『u,t』で係数となりそうなのは『2.0』と『0.2』です。『PI(パイ)』は『π 』ですので、定数『3.14159265…』の固定値になります。
このうち変数『t』にも係数を与えて、3つの『a,b,c』というアルファベットにして置き換えると、
d(u,v,x,y,z,t) = Sin((u+a*t)*b*PI)*c
となります。つまり、三角関数の『Sin』を利用して波形を作るのですが、この係数に入れる数値を変えてやると、波の形がいろいろ変わるんだと、想像できます。
さきに種を明かしますと、
係数『a』を増減させると、波が広がるスピードが変化。負の数にすると方向が逆に。
係数『b』を増減させると、波の数(周期=1往復にかかる時間や長さ)が変わる。
係数『c』を増減させると、波の高さが変わる。
次に変数です。
変数は uと tです。
最初は tから説明します。これまでに出てこなかった新しい次元の登場です。
これも先に種明かしをすると、tは時間です。
このtに『-1』を掛けて負の数にすると、波が向かう方向が逆になます。そして掛ける数を大きくすると速くなり、1より小さい数にすると遅くなります。
では変数 tは何から求められているか――。
t=再生ヘッドが示す現在のフレーム数 ÷ fps です。
『fps』はその映像のフレームレートですから、例えば 30fpsとして、映像を表示しているときの再生ヘッドの位置が 55フレーム目を指していたとしたら、
t=55÷30=1.833333…
となり、これが tに代入されています。
試しに再生ヘッドを 55フレームに置き、変数 tを『1.833333』と書き換えてみてください。画像には変化が起きないはずです。逆に『3』と書き換えると、パッと画像が変化したと思います。それは再生ヘッドが 90フレームに移動したときと同じ結果になったからですね。
これではっきりしました。tは秒を表す変数です。
続いて【数式】デフォーマ最大の難関。変数 uの登場です。
【変数 u と v 】
変数 u以外にも vという変数も使えるようなことが書かれていますが、この二つが何を表すものかをネットや AIを利用して探しましたが、確実な答えを見つけることができませんでした。
一つ言えるのは、【数式】デフォーマの【効果】によって変化するということで、次の答えは得ることができました。
① 【効果】が『X、Y、Z軸方向』のとき(空間の形: 直交座標系)
u= √x2 + z2 (XZ平面上の【数式】デフォーマの中心からの距離)
v= √x2 + y2 + z2 (3次元の空間的な中心からの距離)
② 【効果】が『球状』のとき(球面座標系:地球儀のような、角度と半径で表す空間)
u= 中心から見た「水平方向の角度(経度:0~2π )」
v= 中心から見た「垂直方向の角度(緯度/仰角・俯角:0~π )」
《ちょっと待ってください》
実際に試してみたところ、この答えでも正確ではなさそうです。上の解答はネット上と AIの見解で得たものですが、ワタシの検証では次のようになりました。
uは確かにu= √x2 + z2 のとおりで、【数式】デフォーマの中心からの距離を表していると推測されます。これを前回のようにグラフ用紙で説明します。ただし、見慣れた十字にクロスする直交座標系のグラフ用紙とは違ってて、原点から同心円がいくつも描かれた波紋のようなグラフ用紙(極座標に似ている)で、中心からの距離を求めるグラフ用紙を使います。
これだと、親の平面の分割点に対応する点が中心からどれぐらいの距離かが求められます。単純に数式欄に『u』とだけ書いていますが、実際は内部で、
u= √x2 + z2
三平方の定理を利用して【数式】デフォーマの中心から親の分割点までの距離を求めているようです。
注意することは、C4d Lでは虚数は扱いません。もし計算結果が負の数になると、エラーになって見えなくなるか、強制的に絶対値を取って正の数になるようです。
変数『v』に関しては、正しい答えを説明したものがありませんでした。
もしかすると、Lite版に課せられた悲しい制限かもしれませんが、ワタシの調べたところでは【数式】デフォーマの【効果】を『Y軸方向』にしている場合では、『u=v』の挙動をとっているとしか考えられませんでした。つまり、
u=v= √x2 + z2
となって、uと同じ結果になりました。
次が検証時の映像です。
平面を使うと考える場所が多すぎて、脳(ワタシの)が処理しきれません。そこで平面をやめて、スプラインパスに円形をスイープさせて目に見える『赤いロープ』みたいな物にしています。またスプラインパスは、意図しない角ばった形が出て混乱しないように、【補間】を『均等』にして【ポイント】(分割点)を『100』まで上げました。
この赤いロープを使って検証したのが次の映像です。
計算式の欄にuと、入れた場合も vと入れた場合も、【数式】デフォーマの初期位置は(x,y,z)=(0,0,0)です。この計算式に当てはめると、
u= √x2 + z2= √02 + 02=0
となって、【数式】デフォーマの中心から赤いロープが持つ分割点までの距離が 0となって、y位置も 0、つまり、もっとも底の部分を示し、徐々に上昇していく V字型になっています。それが映像の最初の部分です。
忘れないように何度も書きますが、勘違いしてはいけないのは、【数式】デフォーマの親(赤いロープ)の実座標である Yに 0が入るのではありません。親の分割点の y座標に代入されます。もう少し分かりやすくいうと、スプラインパスに打たれた分割点、一点一点(この場合は横に 100個ならんでいます)とデフォーマの中心との距離を計算してスプラインパス(親)の y値としている、と考えたほうが理解しやすいかもしれません。
続いて、x=1,2,3,4,5…の場合も、z=0ですから省略して、順に、
√12=1、
√22=2、
√32=3、
√42=4、
√52=5…、
という計算結果で、右肩上がりになります。これを図で表すとこんな感じです。
前面ビューは赤いロープを真横から見たことになります。その中で【数式】デフォーマを x方向に動かしても z軸は 0のままですから、デフォーマの中心と分割点間の距離は √x2=xとなりそれが uに、そしてその uが、赤いロープの分割点の yに代入され右肩上がりになります(前面ビュー)。
上面ビューは真上から見た図ですから、y(高さ)は見えません。なのでただの直線と表現されます。
xが負の場合も x=-1、z=0となり、zは省略しますが、
√(-1)2=1 です。
-12は カッコを付けないで計算すると『-1* (1 * 1)=-1』になってしまいますので、注意してください。正式には、『(-1)2 = (-1) * (-1)』で、『マイナス×マイナス』はプラスですから、負の場合も、結果は同じで、
√(-1)2=1です。
そして、
√(-2)2も、
√(-2)*(-2)=√4=2 となります。
あとは同じで、『-3,-4,-5…』を 2乗して √を外せば、『3,4,5…』ですから、中心から左側は左肩上がりの赤いロープになり、全体としてはV字型になります。
映像では次に【数式】デフォーマを y方向に動かしていますが、そこでは何も変化が起きませんでした。しかし、z軸方向に動かしたときに注目してください。ここが難所です。
z軸をプラス方向に動かすといままで V字だったロープが、緩いカーブを描いた U字に変化したうえに、だんだんとロープが上へ(y方向)と動いていきます。このことを先ほどの、
u= √x2 + z2
に当てはめてストレートに考えると、【数式】デフォーマの x座標は動かずに z座標が動いているだけなので、計算結果は同じで V字型になるはずだと考えていたら、画面の結果と辻褄が合わなくなります。これも図にして考えると理解しやすいです。
上の図の右側、上面ビューを見てください。【数式】デフォーマの中心が奥へ動きました。すると zはその分の値を取りますが、デフォーマの中心と分割点の xの位置も離れていきます。この動きを忘れていましたね。
真横から見た絵、左側の前面ビューを見てください。デフォーマの中心を示す x座標は動きませんが、分割点との x距離が変化しています。u= √x2 + z2 の値も大きくなり、結果的に前面ビューの赤いロープは上へ動いていきます。
ではなぜ、ゆるい U字型になるのか、です。
最初中心にあったときの V字型はスプラインパスという奥行がほとんどない物体です。スイープしている円形の直径分の厚みを持っていますが、ほぼロープ状態です。
その状態から z軸を奥へ動かしながらコマ送り撮影をしてみるとわかります。【ジェネレータ】の【回転】を適用したのと同じようにきれいな『すり鉢型』の物体が浮かびあがります。
その立体物のほんの赤いロープの部分だけが目に見えて実体化したのが、現在の形です。立体スキャナーのレーザー光が空間をスキャンするところを想像すると理解しやすいです。すり鉢型の中心をスキャンするときは、V字型を示しますが、徐々に縁のほうへ移動して行くと、ロープの形がゆるく湾曲を始め、そして上へと移動して行きます。まさに、いま目の当たりにしている状況と合致します。
これでこの計算式の難問部分は解けました。
d(u,v,x,y,z,t) = Sin((u+t)*2.0*PI)*0.2
元の計算式を忘れるぐらい話が逸れてしまいましたが、使用される数式の意味を知っているのと、知らないとでは、完成する映像にも影響が出ますのでぜひ理解してください。
【π を掛ける理由】
あとは、なんで『π (パイ:この数式内では『PI』と書かれています)』を掛けるんだ? ぐらいではないでしょうか。
π の説明は必要ないと思いますが、これは円周率で、円を考えない場合は、『3.14159……』という単なる数値ですから、別に『1.23456』でもいいような気がします。しかし三角関数『sin,cos,tan』を語るときは重要な数値になります。
sinを例にしますと、この関数は2π (6.28)進むごとに 1往復(1周)するという性質を持っているからです。それを利用しますので、π を掛けるというより、『2π 』を掛けることに意味があります。
今度は係数を割り振った数式を見てください。
d(u,v,x,y,z,t) = Sin((u+a*t)*b*PI)*c
この『b*PI』を『b*2*PI』にしてみてください。こうすると、『b』の意味が、波が何周するかに見えてきませんか。例えば、『b=1』だと『1*2π= 1周』です。
他にも『b=3.2345』だとすると、『3.2345*2π』です。これを『帯分数』のように考えると、直観的にいま何周なのかがわかります。
整数部分は『3』ですから、3周回っています
小数部分は『0.2345』、つまり 4周目の 23.45%まで進んでいます。
この周期の求め方はあとで役に立ちますので、覚えておいて損はありませんよ。そしてそのときは、『2π 』を掛けるところまでが一組だと覚えてください。
【いろいろな波】
次は式の組み合わせです。この数式を見てください。
Sin(5*x-t*5) * Exp((-x*x)*5)
これを分割数を100まで上げた平面オブジェクトの子階層に入れた【数式】デフォーマに入力して、0フレームから 900フレームぐらいまでを再生ヘッドをドラッグして動かしてみてください。布の両端が固定された波が生まれます。
これは波の数式は掛け合わせること(乗算)が可能だということを示しています。『Sin』の波にガウス分布の釣り鐘型の波形を掛け合わせていますので、このような動きになります。
次の例は、スプラインパスをスイープさせて細い糸のようなラインを作り、これに【数式】デフォーマを適用してから、『Sin(5*x*x*t)/sin(1.6*x)*.5』という計算式でキレイに波打たせたものです。
その画像がこちら。
数式だけでは波の形がイメージ通りにならないときは、この例のように【数式】デフォーマの【サイズ】で調整する手もあります。この場合も【サイズ】を『5373,380,400』と x方向にずいぶん引っ張って波の形を整えています。
ちなみに、波が 1本だけでは何の感動も生みませんが、これが 60本も束になると目を疑う光景に変貌します。
もう一度、計算式を見ます。
『Sin(5*x*x*t)/sin(1.6*x)*.5』
Sinの波をSinの波で割って、さらに分子の Sinで使われている xが2乗になっていたり、時間 tも使われています。
これは中心から離れるほどに波の山の間隔が密になり、それが時間の経過とともに変化します。そして分母にも Sinを使ってさらに複雑な形を作ったロープみたいな物の集まりです。
しかし、ただ複製して並べたのではなく、それぞれの【数式】デフォーマの x位置を一定の数値でずらしていきます。これはたくさんのグラフ用紙を x方向にずらして並べていくということになり、原点がずれていけば、波形の位相が少しずつズレた(波のスタート位置が変わる)きれいな模様が浮かび上がることになります。
もちろんスプラインの分割数は【補間】を『均等』【ポイント】は『300』とかなり精細にしています。
さらに個々の【数式】デフォーマの【R.P】の角度も一定数ずつずらすことでデフォーマの中心を軸にして回転するように並びます。これが奥行きを作る結果となり、波が覆いかぶさるような立体感を生んでいます。そしてその部分を狙ってライトを強めに当てますと、ダイナミックな明暗の景色となって、より立体感が強調され、単純に一つの波をコピペして並べたのとは異なる独特の美しさが生まれます。3Dソフトでないとできない芸当かもしれません。
どんどんいきます。
数式の係数を色々と変化させつつ、できた波形に AEでグローを掛けて怪しく光らせるとこんな感じに。
角の丸い長方形でスイープさせてガラス質にすればこのとおり。
数式は『sin』や『cos』だけではありません。『tan』を使うとこんな模様も可能です。
次は、形ばかりにこだわらずに、もっと自由な考え方で波を作ってみましょう。
安らぎを感じる物柔らかな波は平面に対して適用させてると、見ていて飽きなものができ上ります。
使用する計算式はこれ。
Sin((u+0.1*t)*2.0*PI)*0.2*x
初めに出てきた基本の形に、x座標を掛けることで【数式】デフォーマの x座標を動かせば基本の形が崩れて複雑な波ができ上がります。その状態で【数式】デフォーマの角度も変ることで、波の進む方向が予測不能になったまるで嵐の大海原みたいな状態になります。
この映像の詳細を説明します。
【数式】デフォーマで歪められる平面は『1000×1000cm』のサイズで分割数は 縦横『260』です。
その平面に【数式】デフォーマを次の画像のように適用しています。
波が複雑に入り組むように【数式】デフォーマの角度を、R.H=-26°、R.P=-44°にして傾け、波の発生源を平面の端の方に持っていくことで、遠くから押し寄せてくるように見せています。
他にも、【数式】デフォーマの【サイズ】の内、高さを『480』程度に抑えつつ、横方向を『600』まで引き伸ばして、安定感のあるものにしています。
また、海原となる平面には二つのマテリアルが貼られ、もっとも上は黒と白の水玉模様の絵を【アルファ】チャンネルに施し、その下になるマテリアルが、上のマテリアルの透明部分、絵では黒い丸い部分から見えるようにしています。そしてどちらのマテリアルにも強めの鏡面反射が出る【Beckmann】を適用、その【減衰】を『加算』にして、【金属の光沢を考える】で説明した映り込み専用の球体に貼られた、SFのワープ風の画像が映りこむようにすることで、波打つ表面が妖しく蠢くさまを表現しています。
この映像を見ていて不思議に思えた方はいますか?
「終わりがない……」
そうです、波が循環していますので、映像の終わりと始めにつなぎ目が無く、映像プレーヤーをループにしておくと永久に見ていられます。このような映像を『シームレス ループ映像』と呼びます。
そしてこれは偶然できたのではなく、そのようになるように数式をいじっています。
それが、先に書きました【π を掛ける理由】に出てきた『2π 』を掛けるにつながるのです。
波の映像は複雑そうに見えていますが、次の計算式で成り立っています。
Sin((u+0.1*t)*2.0*PI)*0.2*x
この中で波形の周期を決めているが『0.1*t』の部分です。ここが、『1』になると、『1*2π 』で、1往復したことになります。
ではこの波の周期(時間)は、
0.1*t=1……で1往復ですから、
t=1/0.1 = 10
C4d Lでは tは秒を表しますから、10秒で1往復。すると『30fps』の映像だと、
10*30=300フレームとなります。
実際に……。
上の画像のように、映像時間の設定欄は『0F』から『299F』、300フレームの長さになっています。
逆に任意のフレーム数(映像の長さ)で 1往復させるには、先ほどの計算式を利用して、
1往復=0.1*t より、
t=1/0.1……0.1を aとして、
t=1/a
ここで、t* fps=映像長さ に代入。
映像の長さ=(1/a)* fps より、映像の長さを Fとして、
F = 1*fps / a
a = fps/F
この式を覚えておくと、60fpsで、200フレームのシームレスになる波が作りたい、となったときに、感覚で数値をいじって何度も修正を繰り返すよりも、
a = fps/F より、
a= 60/200=0.3 となり、Sin( )の中は、
Sin((u+0.3*t)……となります。
まだ疑問は残っていますね。たぶんこれでしょう……。
Sin((u+0.1*t) の 0.1*tが周期に関係しているものを、なぜ、uに加えているのか、というところです。
これは時間とともに波の位相(波の "山" や "谷" の位置)をスライドさせるオフセットとして働いています。
再生ヘッドが動いて、tの値が増えるたびに位相がすこしずつ動くので、海面が波打つように見えているわけでした。
さていよいよラストです。
波といえば物理学の代表みたいなものを想像します。音波や地震波(P波・S波)などは学校の理科から登場する身近なものです。そして海の表面がうねるのも波です。たくさんある波の現象ですが、その最後を飾るものといったらこれ。これを避けて通るわけにはいかないでしょう。
【数学で作るミルククラウン現象】
しずくが水面に落ちて、美しい波紋を広げる現象です。一般的には ミルククラウンと呼んでいます。
実はこれも先ほどまで見てきた【数式】デフォーマで作ることができます。
ただし、落下してくる丸いしずくや、ぴょんと飛び出る水玉は、別に作った【球体】オブジェクトで、あとから合成しています。しかし鋭く尖った跳ね返りから、徐々に静まっていく動きまですべてが計算式でできています。
ちなみに、水滴が落下してきたり、何度も頭をもたげたりするアニメーション部分は、今回の趣旨から外れますので、省略させていただきました。ここは単純に波の動きに合わせて球体が上下に動くキーフレームを打つだけですから、誰でもすぐにできると思います。
まずはメイキングの画像をどうぞ。
オブジェクトマネージャに並んでいるのはこれだけです。この中の『映り込み』と名前の付いた球体はいつもの水面に移りこむ景色を表現するもので、ミルククラウンとは関係ありません。
水面となるのは『ディスク』と呼ばれる、円形の平面で、分割数は縦横『400』とかなり精細です。跳ね返りの尖った部分をきれいに出すにはもっと分割数を上げたほうがいいかもしれませんが、あまり細かくするとパソコンに負荷が掛りすぎて重くなりますので、ほどほどにしてあります。
ライトも全方向のごく一般的なもので、【詳細】は『2乗に反比例』で、【強度】は『200』と強くして、水面の下から照らしています。下から照らすということでお分かりのように、水面のマテリアルは【透過】チャンネルを使って透明で、かつ水面に映り込みの景色が入るように【反射】チャンネルには【Beckmann】を使い、その【減衰】は『加算』という、鏡面反射強めのマテリアルが張られているだけです。他と異なるとしたら、ライトを水面の下から照らすことで、水面に起きた波紋の山と谷の光の明暗を、より際立させるようにしたところです。
さてここまではすんなりと受け入れられたかもしれませんが、本番はここからです。
この水面に適用する【数式】デフォーマは 2種類あります。つまり、二つの波を組み合わせてこの映像が作られています。
水滴が空から落ちてきて、水面に衝突した瞬間に、ドンっと伝わる衝撃波が作る鋭く尖った波と大きな波紋が時間とともに収まっていく姿【数式.1】と、水滴が突き抜けたショックで水面全体が緩く盛り上がるたくさんの同心円の波。そしてこれも静かに消えていく。それが【数式.2】と名前を付けた二つの【数式】デフォーマです。
一つずつ紐解いていきます。
問題にするのは次の項目です。
① 瞬間に起きる尖った衝撃波と何度も繰り返す急峻な角度の波【数式.1】
0.08 * (1 / (0.035 + sqrt(2*u*u))) * sin(sqrt(2*u*u) * 20 - (t-2) * 5) * exp(-(t-2) * 0.5) * (1 - exp(-(t-2) * 5)) * (t > 2)
「うげぇ~なんだこれ……」
一瞬たじろぎそうな数式になっていますが、【数式】デフォーマの記載方法ではなく、一般的な書き方に変えて、役割別に分解すると、意外と難しいことはしていないのがわかります。
最初の 0.08は波全体のスケールを決めています。高くなりすぎないように調整しています。
sin(√2u2 × 20 - (t - 2) × 5)
中央から外側に向かって、同心円状の波がふわっと広がっていく動きを作ります。
その次の『e-(0.5t-1)』も、前回出たのと同じ eの指数関数です。これは急ブレーキをかけるものと考えてください。AEや C4d Lでいうところのイーズの効果を作るものです。ドカンと動いてあとは急激に静かになる、というやつです。
次の『1-e-(0.5t-1)』は、波が跳ね上がる動きのイージングです。波が発生した直後に中央の角が、グンッ! と急激に立ち上がる滑らかな加速運動を作っています。その部分を詳しく書くと、波が発生直後は t=0ですから、e0=1で、この部分は 0から始まり、その後、急激に 1へと近づきます。
② 何度も繰り返す緩やかな波【数式.2】
sin(u*1)*sin(u*1)* exp(-(t-2) * 0.3)* (1 - exp(-(t-2) * 5)) * (t > 2)
これも同じように分解してみます。
そして最後はこれ。
③ 任意の時間でこの現象が起爆するリアルさ
①と②が必要なのは理解できるのですが、③の必要性があるのかですね。
実際にやってみると、すぐにこれは必要だと感じると思います。
【数式】デフォーマは、再生ヘッドの進みに合わせて波を動かしますので、映像がスタートすると同時に水面が波打つことになり、水滴が落ちてくるアニメーションと同期がとれないことになります。そのためこれは必須だと思いました。
でも任意の時間が来たら波が起きる、なんて、プログラムの if文でも使わないと不可能だと思われた方も多いと思います。しかし、Cinema 4Dの開発チームは、素晴らしい方法を残してくれていました。
(※他の3Dアプリでは通用しないかもしれませんのでご注意ください。また、今後のバージョンアップで仕様が変わる可能性もあるニッチなハック(裏技)ですので、その点はご了承ください)
それが上の 2つの式の最後に書かれている (t > 2)の部分です。
プログラムの世界に触れたことのない人から見れば、
「不等式が掛け算に入っとるゾ! なんじゃこれ?」って、なりますが、これをプログラムの世界にいた人から見ると、
「おっ、なんじゃこら? 掛け算と条件式を一緒くたにしとるぞ、アホちゃうか」
と、やっぱりアホ扱いされてしまうかもしれませんが、これが『時限爆弾の起爆スイッチ』です。今の若者言葉でいうフラグを踏む、と同じものですね。
仕組みは『0か 1のスイッチ』です。if文の代わりになるものです。
詳しく説明しますと、プログラムの世界ではこのカッコの中を評価して、答えを 0 か 1(偽=0 / 真=1) の 2択で返してくれます。その機能を計算式の中でもそのまま使えるようにしてくれた Cinema 4Dの開発チームに感謝です。
つまり、
tが 2秒未満のとき(爆破前)は条件が満たされないので 0 です。
tが 2秒を超えた瞬間(発火!) 条件が成立して 1 となります。
掛け算はいくつ横に並べようとも 0を掛ければ、答えは 0です。 ようするに、tが 2を超えるまでは、ずっと 0を維持しますので、波は起きずにじっとしています。
ところが、2を超えた瞬間(2秒ぴったりは超えていないので、まだ『偽=0』)この計算式が発動します。
それと、式の中にある (t-2)の部分は tが 2で 0になりますので、0から始めるためのものです。もしこの 2秒後に発火させるという時間を別のものに変更するなら、ここも調整する場所です。忘れずにしてください。
この計算式だけで作られた映像はこうなります。水滴落下部分を省略していますので、いきなり波が起動するところを注目してください。
ところで気づかれましたでしょうか。これらの波の映像はキーフレームを一つも打っていないことに。これがワタシのいいたかった 4次元的思考だという意味です。
もし【数式】デフォーマを使わずに、キーフレームだけで波のアニメーションを作ったとしたら、こんなにきれいにコントロールできたでしょうか。
アニメーションはキーフレームだけではないという、柔軟な考えを持っていただけたら幸いです。
もし将来、熱を表現できるデバイスが登場したら、時間の経過(t)に加えて "熱(h)" をパラメータに組み込むような 5次元的思考で何か異なる現象をデザインする未来が来るかもしれません。数式は難解な計算ではなく、そうした次元を超えて空間や表現を操るためのもう一つのツールなのです。そしてこのアプローチが、あなたの作品づくりに新しい視点をもたらすきっかけとなれば、これ以上の喜びはありません。





























