GDC2016 Going Off the Rails: The Making of 'Bullet Train' 講演まとめ

この記事はOculusRiftAdventCalendar2016 13日目の記事です。

Oculus Touchもローンチしたので、EPIC GamesさんによるGDC2016、Oculus Touchを使ったVRコンテンツ「Bullet Train」のメイキングの講演[「Going Off the Rails: The Making of 'Bullet Train'」](http://www.gdcvault.com/play/1023648/Going-Off-the-Rails-The)を訳したものを少しまとめました。動画の時間入りの訳ドキュメントも形を整えたら公開したいと思います。講演の動画はとても面白くてわかりやすいので、ぜひ実際に体験しながら見てみてください。

自分の勉強も兼ねて訳したので、ここ違うよ！とかこの方が良い！とかありましたら、教えていただけたら嬉しいです！

#Going Off the Rails: The Making of 'Bullet Train' 

##検討編

###設計の検討
- ビジュアルの水準は”Showdown”以上に上げる
かつ、Oculusの推奨スペックのハードウェア上で実行する
- 面白い環境/構造であること
- モーションコントロールを使う
- エンジンとレンダリングの改良を自分たちを実験台に試す

→CEO命令でShowdown以上にビジュアルの水準を上げることに。
ShowdownのターゲットPCのビデオカードは980。Oculus推奨スペックは970。30％パフォーマンスを向上させなければならないのに、ビジュアルのクオリティをあげなければならなかった。
UE4はビジュアルが素晴らしいエンジンなので、プレイヤーが見て面白い環境、構造を作って、こんなゲームが作れるんだ、と期待されるようにするというミッション。


###シナリオの制限
- ”Showdown”の続編にはしない
- モーションコントローラーだけで行うゲームプレイとうまく合う。
- 大部分が新しいコンテンツ

###ロケーションの制限と目標
- アーキテクチャにもビジュアル的にも面白いものであること
- プロトタイプにするまでに二週間
 - 映像産業から新しくメンバーが１人参加(リアルタイム初めて)
 - コンテンツは簡単にスケールアップすることができなければならない。
- ゲームプレイに合っていなければならない
 - 複数の場所、有利な場所、侵入地点
 - プレイヤーが行きたくないような”危険地帯”も含まなければならない。
 
→移動の問題も解決する必要があった。

メインのインスピレーションになったのは、EPICの近くにあった、ノースカロライナの空港。建築的にも面白い。
もう１つインスピレーションになったのはヨーロッパの鉄道の駅。アーチ上の構造に、プレイすることができるスペースがあり、普通の人は線路上には飛び出さずに、ホーム上にいようとするので、危険地帯と感じる場所を含むのにも適していた。


###Mix and Match!
アセットの大部分は Bullet Trainのためにカスタムビルドしたけれど、いくつかのアセットは購入して、一定のレベルで使えるようにきれいにした。
(電車の外側、武器パック、キャラクターはInfitratorのスキンを変更)
武器パックはUE4のストアで購入したものをVRで機能するように作り直し

##ゲームプレイ編
###1 射撃演習場スタイル
面白いし、マルチプレイヤーを簡単にサポートできる、けれど、１つのところにいると飽きる。

###2アジアンアクション映画
[Oldboy](https://www.amazon.co.jp/%E3%82%AA%E3%83%BC%E3%83%AB%E3%83%89%E3%83%BB%E3%83%9C%E3%83%BC%E3%82%A4-%E3%83%97%E3%83%AC%E3%83%9F%E3%82%A2%E3%83%A0%E3%83%BB%E3%82%A8%E3%83%87%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3-DVD-%E3%83%81%E3%82%A7%E3%83%BB%E3%83%9F%E3%83%B3%E3%82%B7%E3%82%AF/dp/B0007INYIU)や[ハードボイルド 新・男たちの挽歌](https://www.amazon.co.jp/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%BB%E3%83%9C%E3%82%A4%E3%83%AB%E3%83%89%EF%BC%8F%E6%96%B0%E3%83%BB%E7%94%B7%E3%81%9F%E3%81%A1%E3%81%AE%E6%8C%BD%E6%AD%8C-Blu-ray-%E3%83%81%E3%83%A7%E3%82%A6%E3%83%BB%E3%83%A6%E3%83%B3%E3%83%95%E3%82%A1/dp/B006VQ96BQ)のようなアジアのアクション映画の”ワンショット”の技法にインスパイアされた。移動の問題の解決法としても考えた。
[ワンショットの例の動画](https://youtu.be/QIexGSksnPQ)

####チェーンアクション
例)
1　プレイヤーの前に倒すべき敵が２人いる
2　プレイヤーは一人の敵のところに銃を投げる
3　倒れた敵のところにテレポートして、銃を空中で握る
4　プレイヤーは同じ銃を次の敵を撃つために使う
5　プレイヤーはにやっと笑う。
[動画](https://youtu.be/QIexGSksnPQ?t=11m3s)

利点
・環境の中で移動して行く動きが、面白さを保てる
・コンテンツ、アニメーション、AIスクリプトの必要性の点で、制約ができる。
・連鎖するゲームプレイができる。

→Showdownのような環境内を移動する動きで面白さを保てる。
コンテンツ、アニメーション、AIスクリプトで制約をつくれることは、少人数で短期のプロジェクトだったので、良いオプションだった。
連鎖するプレイはユニークだし、モーションコントローラーを使うと面白い。

####試してみた
VR内で正面のオブジェクトに対して、静止している状態で、インタラクションをする場合
２つのトラッカーの視線上にHMDも両コントローラーもあり、問題がない。

プレイヤーが、敵を追って動く時に、回転しすぎが起こりやすい。
手の遮蔽の原因になって、トラッキングが途切れてしまう。
[動画](https://youtu.be/QIexGSksnPQ?t=11m58s)

####学んだこと
- 動きがあると、楽しさが継続できる
- Showdownのように、注意深くコントロールされたNPCの動きは面白い
 -瞬時に動かし始める、フェードインさせる
- 向きと、動く距離の両方をコントロールする必要がある。

プレイヤーはNPCから逃げられないので、心の準備ができるように必ずフェードインしてあげる。いきなり現れると、びっくりする。
プレイヤーが敵を追いかけようとして、向きを変えすぎないように、また遠くに行き過ぎないように、両方をコントロールしてあげる必要がある。


###3 Magic!
1と2の良いとこ取り

- 静止した状態で射撃：距離をコントロールできる。常にアクションが起こる方を向いている。[画像](https://youtu.be/QIexGSksnPQ?t=14m23s)
- アジアンアクション映画：ステージの中を歩き回って、大きなアクションができる。

####テレポートの採用

#####プレイヤーのコントロール
テレポーターによってプレイヤーがどこに行くかコントロールできるようになる

 - 必要なコンテンツを制限できる
 - プレイヤーの向きをコントロールできる
 - プレイヤーへのめりこみが減る。

テレポーターを常にアクションに向き合うように設置
→プレイヤーは常に危険な場所である線路上に向き合う形になる。
プレイヤーが向きを現実世界で変えずに、常にトラッカーの方を向いているようにすることで、コントローラーのトラッキングを失わなくて済んだ。

アクションを常にマップの中心の線路の法で起こるようにした
→プレイヤーは電車の線路内は危険だとわかっているので、前進してつっこんで移動しようとしないで済む。

#####テレポートブリンク
- 短時間の白いフェードをいれることで、プレイヤーに合図することができる
- ジュッというサウンドは非常に役に立った
- 自分がどこから来たかがわかるように、プレイヤーの背後にトレイルを残した。

#####テレポーターの選択
- もともとは、プレイヤーがテレポートしたい場所を見つめるようにしていたが、慌てている戦闘中ではうまくいかなかった。
- テレポーターのコントロールを手に変更して、ボタンを押して離すことで、プレイヤーがターゲットを指し示せるようにした。

#####ステルステレポート
手がとどく至近距離でのアクションを維持するために、ステルステレポートを追加。
プレイヤーは、かっこいいコンボだけでなく、テレポートで相手のところに近づいてパンチ！ができるようになった。

#####テレポートの問題
・トレイルがあっても方向変換でプレイヤーが混乱する
・プレイヤーはテレポートがあっても「ローカルスペース」で動き回ろうとする
・アクションが常にセンターで行われるわけではない
・プレイヤーはすぐにテレポートできることを忘れやすい

→解決策を模索中(その答えの一つがRoboRecallのテレポートの方向転換方法を選べることなのかも)

###Bonus Lesson!

####ボタン操作
- テレポートするときに、同じボタンでスローモーション機能を入れた。プレイヤーはたくさんのボタンを使うのが大変だから。

→最初はスローだけしたいときのために、テレポートボタンとスローボタンは違うボタンにしてた。でも二つのボタンを操作するのは大変すぎるので、一つにした。
コントロールコード(同時に複数ボタンを押す)は意味があると思うけど、今はまだだと思う。この装置になれることの方が大事なので、すべてのアクションを単純に。

####操作はシンプルに
プレイヤーはそのうちゲームパッドのようにVR内の物をどう操作するのか学んでいくだろうけど、それまではできる限りシンプルに。

###プレイヤーに俺かっこいい！と感じてもらう
####失敗させない
ほとんどの人がVRを使ったことがないし、モーションコントローラーを使ったことがある人はもっと少ない。
・死なせない、どんどんかっこよくなることだけにする
・手加減されてる！と感じると楽しくないのでバレない手助けをたくさんいれる

###投げる動作のアシスト
####手榴弾
現実に投げるのが上手い人はそんなに多くない。
だけど、何かを投げて目標に当たるのはとても気持ちが良い。

- 視界をとって、もっともらしいターゲットをトレース
- プレイヤーの手の速度と角度に基づいて、グレネードが投げられる軌跡を計算する。
- 目標に到達するまでの、違うアーチをいくつか試した
- ばれないようにする

→手加減じゃなくて自分でできた！と感じると楽しい。
[動画](https://youtu.be/QIexGSksnPQ?t=14m23s)
目の前に敵が三人いて、グレネードを投げるとしたら、プレイヤーが見ている視野に入っている敵を、グレネードを投げつける目標になる可能性がある敵として、小さなコンポーネントを敵につける。頭、胸、腕、など、グレネードがヒットしたらかっこいいとデザイナーが考えたところ。すべてのターゲットをトレースして、プレイヤーが見ていて狙おうとしているところを決める。プレイヤーが投げたら、グレネードがそこに当たるもっともらしいアーチを作ってあげる。
あからさまにわからないけど、かっこよくプレイしていると感じられるような手助けを実現したかった。


####ロケットミサイル
最終ボスでプレイヤーがロケットミサイルを握って、狙って、飛ばすことができる。
デザイナーがゲームをプレイした時にはうまくいって、誰でもできると思ったが、
他の人が試してみたら、投げようとして、真下に落ちて、全然かっこいい気分にならなかった。

プレイヤーはロケットをオーバーハンドで投げようとして失敗していた。

#####ソリューション：ロケットを投げれるようにしよう！
・プレイヤーはロケットミサイルを握る
・プレイヤーの「意図」をとるためにロケットミサイルの過去の数フレームの速度の平均をとる。
・コントロールされていない感じを出すために、見た目に派手さを加えた。

→ほとんどの人は、ほとんどこのやり方でできた。
だけどまだターゲットに当てることができない人(Brendan)がいた。

#####長く失敗すればするほど、失敗しにくくなる調整
コースを外れてミスをする度に10%ずつ当たる方向に直すようにした。
ターゲットを狙うのが少しずつ簡単になるように。たくさん外すと、外すのが、外そうと狙わない限り難しくなる。だけど、それもこっそりと、甘くされているとわからないようにするために、アシストを遅らせた。投げた後、軌道をずらすアシストを後で入れることで、自分の行動の結果成功した、という感覚を得られるようにした。
[動画](https://youtu.be/QIexGSksnPQ?t=24m58s)

####プレイヤーの期待に答える
プレイヤーに何が一番自分かっこいと思わせるのかを調べるためには、やりたいようにさせて、どこでがっかりするかを把握すること。
Tips：プレイヤーは直接言わないので、プレイ中の表情を見る

プレイテストループ
実装→テスト→うわあああって言ってるのを観察→実装

#####プレイテストループで得たもの
- 弾丸を掴んで投げる
- ターミネーターショットガンのパンピング
- ガンジャグリング
- ロケットミサイルやグレネードを撃てる
- 電車のつり革に触れる

マトリックスのネオみたいになれる。つり革も触れるように。みんな触って動かすのが大好き。

##Touchコントローラー編
###期待に応えるようにセットアップする
プレイヤーの期待させるようなセットアップをするなら、期待を満足できるように準備する
例)
つり革を電車においたら、みんな触りたくなる。
プレイヤーの期待に応えると、大きな見返りがある。
ちょっとしたものでも、触りたいと思ったものが触れるとプレイヤーは非常に喜んで笑顔になる。
チュートリアルで、何が触れる、掴める、投げられる、を教えて上げるのもうまくいった。

###手榴弾
手榴弾のピンを抜くのを実装できなかったのは失敗。
触れそうで、触れないものがあるとユーザーが、これ何か間違っているの？とヘッドフォンを外して聞いてしまう。

手榴弾のピンをGDC用に実装
・最初は失敗
・みんな人差し指(トリガー)でピンをひこうとする。
・全てのインタラクションは、Grabボタン(中指)でやってた。

最も低いレベルからインプットロジックを書き換えなければならなかった。
それでも人差し指でもインタラクションできるようにしたら、すごく良くなった。
その価値はあった。

期待、予測したことが予測通りにできるというのが大事。

###銃
最初プレイヤーは銃が、期待したように自分の手に持てていないと感じた
例えば、下に向きすぎているという感じ。
ピストルが一番手にあっていなかった。(実際に銃を使ったことがある人は、問題が少なかった。)

####持ち方
#####Oculus Toybox Method
手のメッシュをコントローラーにアタッチ。
手のメッシュが何かのオブジェクトに当たると、オブジェクトを手のメッシュにアタッチ。
シンプルなアプローチで安定しているが
銃を手に合わせるのは難しい。やりたいように正確にインタラクションすることができるから。

####Bullet Train Method
コントローラーのメッシュに銃をアタッチ。
銃に合わせて、手をアタッチ。
[動画](https://youtu.be/QIexGSksnPQ?t=31m10s)

コントローラーに対して直接銃がアタッチされているので、コントロールしたいと思ったように正確に銃をもつことができる。
手のメッシュはビジュアルのためだけ。

- コントローラーに正確に銃を合わせることが簡単。
- 手を合わせるアニメーションに微調整が必要だった


####一番良いメソッドは？
まだ議論中
手のひらからトリガーまで合わせるか
直接ハンドルに合わせるか
トリガーに合わせるか
中くらいのあわせかた
[動画](https://youtu.be/QIexGSksnPQ?t=32m6s
)

#####将来的にやりたいこと
・決まったターゲットを撃つようにプレイヤーにお願いする機能
・銃のトランスフォームを、好みの握り方にあわせて調整する

####反動(Recoil)
砲身にかかる物理的な衝撃
小さいランダムなローテーションを、反動のVectorに与えた
Recoilは速く撃つと自然に蓄積する。
多くのVRシューティングゲームは使ってないけど、とても効果的

####衝突
ほかの全てのものに対して、衝突する(他の銃を含む)
コリジョンに対して、小さいハプティックエフェクトを加える→とても良かった。

銃が他のものにひっかかる問題
→銃のポジションがコントローラーから離れすぎてしまうと、快適でない
銃が大きければ大きい程、問題が大きい

対策
マニュアルで、すべてのものをこうなって欲しいというようにシミュレートした。
・銃のポジションのスムージング
・物理的な衝撃のあるRecoil
・シームレスなグラブ、ドロップ

####銃のポジションのスムージング
VR内の手に対して常に低遅延が良いとは限らない
手に対して、敏感に動きすぎると、銃が重い感じが全くしない。
移動に対してポジションをスムージングした。
[対応前と対応後の動画](https://youtu.be/QIexGSksnPQ?t=38m6s)

###掴む

####プロトタイプ
・Toyboxデモと同じようにセットアップした
・オーバーラップするボリュームを小さくした
・”リアル”なインタラクションの距離を真似した

手の幅と同じくらいのSphereのボリュームを持たせた。
実際に手が届く距離をシミュレートして直感的にしたかった。

#####結果
・プレイヤーはものをつかむのがとてもたいへん
・Grabボタンをパカパカと押して、何回も掴もうと試みることがよくあった
・かなり遠くからものを掴もうとする人もいた。
ある程度遠目な距離から、何回かGrabボタンをパカパカと押して、銃を掴もうとする。
もっと遠くにいるまま、掴もうとGrabボタンをパカパカする人もいた。(デプスについての感覚が苦手な人がいる)

#####考察
・腕全体を、「つかむ」という１つの行為と頭の中でつなげているようだ。
・この行為に、感覚的なフィードバックが強く結合されている
・ものがあると感じると、反射的に指が掴もうとしてしまう

掴むという行為がGrabボタンを押して指先だけでつかむという感覚ではなく、腕全体を使ってのばして掴むと、頭では認識されているらしい。かつ、手を伸ばしている、物に触ったなどの感覚的なフィードバックが強く行為と結合されている

#####対策
- 掴める状態の時にオブジェクトにハイライト
- オーバーラップのボリュームを拡張する(この形の中に入ったものを何でも掴むと、自分の手の方に引き寄せる引力が働く)

#####物を拾うのが面倒問題
・何かを拾い上げるためにしゃがむのが最悪。
・Toyboxは、落としたオブジェクトはdestroyすることで対処していた。
・Bullet Trainには引力が良さそう

####引力を使う時の問題
より離れたものをプレイヤーが取ろうと(手を伸ばそうと)すればするほど、
そのアクションは、取ろうと意図した方向からそれやすくなる。

→遠くのものを取ろうとすると、そのものが遠い程、自分が取ろうと意図したものと、取るアクションがずれやすくなる。
たとえば、テーブルのコーヒーカップをとろうとしたのにその手前のものを取ってしまったりする。
[動画](https://youtu.be/QIexGSksnPQ?t=46m2s)

#####解決策
①目から手に対してのVectorを使う。
指し示す(Pointing)のアクションの代わりに、手を伸ばす(Reaching)のアクションに寄せた。
もし何かを取ろうとして手を伸ばすとき、その物を見て、物と自分の目の間に手を持って来る。
[動画](https://youtu.be/QIexGSksnPQ?t=46m34s)

→つかむアクションは上手く機能しているように見える。
けれども、手が目より下の方に行ったとき、何か考えながら横の方から手を伸ばそうとすると、つかもうとするアクションはまたつかもうと意図した物からずれるようになってしまう。
正面から物をつかもうと手を伸ばすと上手く行くけど、横から手を伸ばそうとすると、上手くいかない。

②目と手の間のVectorと、手が指し示す方向のVectorの中間
ポインティング(手のひらが指し示す)Vectorとリーチング(目と手の間を結んだ方向)のVectorの中間にした。たいてい手を伸ばすときに、目的の方向に手を伸ばした後、さらに少し余分な表現をする余裕がある。一番目的の物に近いあたりで、うろうろと手を動かして探す必要がある時は、手の方向で探すことができる。
[動画](https://youtu.be/QIexGSksnPQ?t=47m24s)

→今回のを実現するにはまだ完璧ではないけれど、十分良かった。アイトラッキングが待ちきれない

####引力を使って握る機能は成功
・拾い上げる機能に関する問題をほとんど解決できた。
・敵に近づいてしまう問題も避けることができた。(近づいて触れても感触がない違和感を避ける為)
・すごく楽しい状況も作れた

##統合
・パズルのピースを解決するところからはじめた
・今度は、ピースを一緒に合わせる作業を始める

・全てのピースが、ゲームプレイを自分の頭で語れるように形作られ始めた
・”Oh shit”な瞬間が生まれた(すげー！って感じかと？)

 ###Oh shitな瞬間
・あの敵を殺して銃をとったら？
・銃を敵に投げつけて、取り戻すことができたら
・２つの銃を両方とも掴んで「2丁拳銃」できたら
・そういうのを全部できて、それから手をクロスさせながら他の奴を倒せたら！

これが最初のBullet Trainになった。