WGGの活動log

都内でゲーム開発だったりVRだったりをしてるかもしれないエンジニアです. WGGは「ワグ」と読みます

3D弾幕結界について

動画投稿しました

以前リクエストをもらった弾幕結界の3D化の途中段階です

www.nicovideo.jp

 

途中段階ではありますが,ある程度考えが纏っているので少し解説を書いていきます

 

<弾幕結界について>

まず,原作東方妖々夢/永夜抄の「弾幕結界」から考察します

f:id:wgg00sh:20150912205427p:plain

 

この弾幕の(主に1~4波の)流れは

①オプションの発生

②オプションが特定の軌道を描きながら弾を発射

③ここで発射された弾は主に、

 1.中心付近を向いて飛ぶ

 2.1と正反対に画面外に向けて飛ぶ

 3.そのまま停滞

  1の場合、多くは暫くすると弾は停止します

④オプションによる弾の発射が終了すると,発射された弾(特に停止している弾)が中央に収束

⑤①に戻る

といった感じです

 

この弾幕の攻略法ですが

例えばオプションが弾を発射している時はフィールドの中央はほぼ安全です,しかし最後の収束までには脱出しなければなりません

逆に画面下の方で回避するとオプションが後方から飛ばしてくる弾を避け続け,収束は上から降ってくる弾を避けるという形になります

どちらにしても,収束時の弾幕を安全に避けるには予め弾の軌道を覚えて安置、または容易に避けられる場所を探すことが重要です

 

<3D弾幕結界>

この弾幕を3D化するにあたって,気づいた点が一つ

「オプションは基本的に円運動しかしていない」

という事です

画面中心を基準に回転しているだけであとは半径や角速度が多少変化している程度です

よってこのオプションは

・半径

・角速度

・角加速度

この3つのパロメータがあればおおよそ再現できるだろうと推測しました

 

ここからそれを3Dに持ち上げる作業です

まずは下の画像をご覧下さい(3枚すべて同じモデルを別の角度から撮影しました)

f:id:wgg00sh:20150912211652p:plain

f:id:wgg00sh:20150912213040p:plain

f:id:wgg00sh:20150912213042p:plain

 

ここでは

赤:X軸

青:Z軸

緑:Y軸

としてそれぞれ色の明るい方を正とします

また球を描画すると見辛いので3本の銀のワイヤーで球を表現しています

棒と連結している白い球が「オプション」の位置です

このオプションの位置を決定するためには

・半径(長さ-Rとする)

・角度その1(水色の扇部分-Phyとする)

・角度その2(緑の扇部分-Sitaとする)

この3つだけで決定します

2つの角度は「XZ平面の位置を決定する角度」「Y成分を決定する角度」といった感じです

いわゆる「3次元極座標」と呼ばれる座標系です

これをXYZの座標系に変換する必要があるのですが

X=R×cos(Phy)×cos(Sita)

Z=R×sin(Phy)×cos(Sita)

Y=R×sin(Sita)

でそれぞれ求められます

この3次元極座標を使用するメリットは

・「長さ」の成分をダイレクトに持っている

これは,例えば長さを固定して角度だけを変えれば同一距離上にある複数のオブジェクトの生成,半径を維持した円運動の表現が容易、などができることが挙げられます

今回作ろうとしている物にピッタリですね

下の画像の大量の球は全て中心から等距離に存在します

これらは予め長さだけを決定して,2つの角度を等間隔で加算していきました

f:id:wgg00sh:20150912212749p:plain

 

 こんな感じで時間経過とともに半径,角度を変更していくと,冒頭の動画のような3D空間を回転するオプション群を作ることができます

あとはオプションに一定間隔で弾を発生させ,その方向,速度,加速度等を指定すると弾幕結界のような3D弾幕が展開できます

 

と,弾幕の作り方は大体完成しています

あとは実際にどういう形に展開すれば弾幕結界を再現できるか,或いは3D映えする弾幕にできるかを模索中です.

いつ完成するかは未定ですが,できたら動画投稿します

 

この弾幕の作成にあたってDixq様の以下のサイトを参考にしました.

http://dixq.net/rp/36.html