Oculus
VR

ソードスキルを作っている話

この記事は、Oculus Rift Advent Calendar 2017 の 17 日目の記事です。
昨日の記事は、かずまさんの Wedding × VRについて!でした。
結婚式向けの VR サービスもいろいろ出てきているんですね。恐らく一生に一度の方が多く、力の入るイベントですから、より臨場感のある方法で残したいというニーズはありそうです。
先日会社の先輩の結婚式の二次会に誘われまして、THETA で何箇所か撮影してプレゼントしたのですが、「自分たちの写った写真はあるけど、参加者の表情がわかるものは無かったから嬉しい」と感想を貰いました。確かに皆が写っているものがあると、ありありと思い出せて良さそうです。今後が楽しみな領域ですね!

というわけで本題に入ります。

ソードスキル、ご存知でしょうか。VR 諸賢で知らぬものは居ないと勝手に思っているのですが、なぜか今までそれらしいものを作ったプロジェクトを見ません。日本で作らなきゃでしょこれは! と Palmer Luckey も考えていると思います(多分)というわけで取り掛かってみました。

とりあえず仕組みだけ作った感じですが、こういう感じです。

swordskill.gif

VR 諸賢はこれを見て酔わないのか?と思うでしょう。
多分酔いますが、ソードスキルとはこういうものなので、ある程度仕方がないです。

また、酔い対策が進行するまでは公開の予定はありません。

酔い対策

そのままだと酔う人が出ます。そのため、いくつかの対策をしていますこれからやります。

  • 移動パーティクル(集中線のような)
  • 周辺視野の減衰
  • アバターを回転する場合、体が動いてもカメラは移動させない
  • 動きますよということを事前に伝える

あたりの予定です。

ソードスキルの定義

何はともあれ、ソードスキルとはどのようなものなのか、分解する必要があります。
私の中では概ね次のような理解です。

  1. 剣を持ち、特定の構えをする → システムが対応するソードスキルを準備し、ソードが輝く。
  2. 初動モーション → システムアシストが入り、勝手に体が動いて敵を刻む。

これらの実現のためには、次のような機能を作る必要があります。

  • 構えの認識
  • 構えの認識する際のエフェクト
  • 初動モーションの認識
  • カメラの移動

構えの認識

構えを認識するには2つの手の位置関係を把握します。
例えばこういう構えの場合、右手と左手が同じ方向を向いており、上下に50cm以上離れている、という定義が良さそうです。

すると、次のような機能を有した構え認識コンポーネントを作成すれば良いことになります。

  • 左右の手の距離によって構えを認識する
  • 左右の手の回転によって構えを認識する

ソードスキル認識エフェクト

ソードスキルで気持ちが盛り上がる一因として、ソードがやたらとカッコいいエフェクトを帯びる点が挙げられます。
Noise モジュールで動きにランダムネスを持たせると割といい感じになります。

effect.gif

…パーティクルに難しさを感じています。まだ頭の中のイメージを形にしきれてないです。
次のアップデートでは Bloom します。

初動モーションの認識

これはいわゆる最初の1歩を踏み出す的なことです。1歩さえ踏み出せば後はシステムアシストによってカッコ良く対象を両断できるというわけです。

とは言え、あまり敏感だと暴発が増えてしまうので、プレイヤーが意図しないと起こらないモーションをトリガーにする必要があります。ここはやはり、1歩踏み出すことを認識してみたいと思います。
今回は、頭が前進しており、かつ同じ方向に両手も移動していることをトリガーにしてみます。

折角なので、プレイする際はめちゃくちゃ格好つけながらドシンと踏み込むことをお勧めします。

カメラの移動

踏み込みを認識したら、お待ちかねの両断タイムです。
今回はギガスラッシュ基本垂直斬り「バーチカル」(Sword Art Online より)を作成してみます。

要件は次の通りです。

  • カメラが前方に素早く移動(目標地点を設定)

ダメージ判定は普通に衝突を取れば良いので、簡単ですね!

Scriptable Object でソードスキルを定義

さて、以上の条件を多くのソードスキルで汎用的に扱えるようにするため、Scriptable Object で構えの認識条件と移動先を記録できるようにします。これで、新たな構えも簡単に(実際に構えてボタン押すだけで)記録でき、複数のソードスキルを簡単に扱えるようになります。出来上がったのはこんなやつです。

キャプチャ.PNG

対応ハードウェア

Rift、Vive、Windows MR、Santa Cruz(予定)など、ポジトラで両手が使える機器が対象です。インサイドアウトトラッキングの機器では、認識範囲の問題できちんと認識できないモーションがあるかもしれません。

感想

SAO ファンとして、これはどうしても作りたかったので、アドベントカレンダーを機会にスタートできて良かったです。
とりあえず今後は、カメラ移動に直線以外の動きを入れられるようにしたり、エフェクトを改良したり、暗めの空間を作って良い感じにする予定です。明るいとコントラストが下がって格好がつきづらいですからね。
他には床が平面でなくても問題なく移動するように、移動システムは自前のものに差し替える予定です。既製の Tween ライブラリだと、床に合わせて移動制限みたいな機能は見当たりませんからね。(パッケージにして配布もしづらいし)

明日は Hisa Itami さんの記事です。が出てくるんでしょうかね、ワクワク。