ノーツのバウンドギミックについて
(最後の方にツールを用意しています。)
Arcaeaの創作譜面であるあるギミックといえばノーツのバウンドですよね。
自分もよく使うのですがわかりやすい例として以下の動画の1分3秒あたりからをご覧ください。
本家譜面でも使われていますよね。(1分6秒あたり)
創作譜面を何個か作ってる人は仕掛けがわかると思いますが、これはtiminggroupでスカイノーツを逆走させては元のスピードに戻して…という作業の繰り返しになっています。
しかし!!!!!!!!!!
これ普通に作ろうとすると落とし穴があります。そうです。簡単なギミックに見えてしっかりとtimingの概念が頭に入っていないと難しかったりします。
落とし穴とは?
「逆走させればいいだけだから手前のタイミングで逆走させればいいんじゃね?」
そう思ってもらっていいんですが実は工夫がいくつか要ります。
1.イージングを使おう
シンプルにaffを書いてみましょう。
timing(0,100.00,4.00);
(600,2);
(1200,2);
timing(600,-100.00,4.00);
timing(1200,100.00,4.00);
なんてこった。ゴミみたいな譜面じゃないか!
これでは、反対側からノーツがこんにちはしているだけです。
理由は単純で、バウンドというのは
マイナスBPM→0→プラスBPM
という過程を踏んでいるからです。つまりイージングで考えれば簡単で、
マイナスBPMから0に徐々に減速し、
0からプラスBPMに加速しているということです。
じゃあイージング使おうぜとやってもまた落とし穴があります。
2.BPMを調整しよう。
先ほどのようにイージングしたものを書いてみました。
timing(0,100.00,4.00);
(600,2);
(1200,2);
timing(600,-100.00,4.00);
timing(675,-75.00,4.00);
timing(750,-50.00,4.00);
timing(825,-25.00,4.00);
timing(900,0.00,4.00);
timing(975,25.00,4.00);
timing(1050,50.00,4.00);
timing(1125,75.00,4.00);
timing(1200,100.00,4.00);
なんてこった。
こんな感じでノーツが重なってくれません!
原因は、ノーツのタイミングが1200で、BPM100になるのも1200だからです。
つまり、ノーツの速さは-100BPMで開始しているのに終了時は75BPMであるということです。
これを解決するには、timingの概念を理解する必要があります。
バウンドするときにノーツが重ならないのは、
バウンドしている時間×BPMの総和が0になっていないからです。
もっとかみ砕いていえば
マイナスBPMの期間=プラスBPMの期間 になればよい。
もっとわかりやすく図に表せば、
この赤の範囲と青の範囲の面積が同じじゃないからノーツが重ならないということです。
何を言ってるかわからないって?作っていればに分かるようになります。
さて、解決するには上の図の赤の範囲と青の範囲の面積が同じになればよいので
このようにBPMを+12.5すれば同じになりました。
timing(0,100.00,4.00);
(600,2);
(1200,2);
timing(600,-87.50,4.00);
timing(675,-62.50,4.00);
timing(750,-37.50,4.00);
timing(825,-12.50,4.00);
timing(900,12.50,4.00);
timing(975,37.50,4.00);
timing(1050,62.50,4.00);
timing(1125,87.50,4.00);
timing(1200,100.00,4.00);
やったぜ!うまくいったね!!!!!!
…….でもなんで12.5ってなんだろう?
簡単です。
BPM/何回に分けてイージングしたか
これだけです。
先ほどのイージングでは8回に分けていました。よって
100/8=12.5
このように導かれます。これをBPMに足すことでノーツを重ねてキレイにバウンドすることができます。
まぁ何となくわかればいいのです。何となく。
ちゃんと説明するのは面倒なので省きますが使っていれば何となく理由がわかってきます。
ツール化しました。
こちらのシートで試すことができます。便利だね。
こちらはTempestissimanさんのイージングツールを編集したものになります(許諾済み)
Start BPMに元のBPMのマイナスしたもの(今回なら-100)
End BPMに最終的なBPM(今回なら100)
を入れます。
そうすることで出力されるバウンド(B)とバウンド(S)の値がバウンドするBPMのイージングになります。
Bは二次関数のような曲線的なイージング。
Sは絶対値付きの一次関数のような直線的なイージングになります。
注意点として最後のBPM、今回ならtiming(1200,112.50,4.00);は
timing(1200,100.00,4.00);に直しておいてください。
てなわけで、終わり!!!!!お疲れさまでした!
記:nesiddo
この記事が気に入ったらサポートをしてみませんか?