2019.04.04
VRでストライク判定の訓練ができるか試してみる
こんにちは。F.S.です。
ここ最近 HoloLens 2 や Nintendo Switch VR Kit の発表で xR の話題が増えてきたように思えます。
その影響で今回は久々に xR を何か身近なところに使えないかと考えてみました。結果、また野球ネタです。あまり多くの人には役に立ちそうにないですが・・・
考えたこと
近年スポーツ界ではビデオ判定が進んでいますが、野球のストライク/ボール判定は難しいという話も聞きます。ストライクゾーンはバッターによって高さが変わるというのもありますが、決まったルールはあれど審判や状況によって判断が変わるかなり曖昧なものです。
少年野球では重要な公式戦でなければコーチ(筆者のような普通のお父さんだったりする)が審判をやるので、何か判定の助けになることができるといいなと思ったのが今回の話です。
最初はARでストライクゾーンを空間に可視化できたら判定の助けになりそうだなと思いましたが、ヘッドマウントが必要でモバイルだと難しいので諦めました。代わりにVRでストライク判定の訓練をするなら簡単にできそうなので、使い物になるかどうか試してみようと思いました。
また、バッター目線にすればバッターとしてのストライク判断の練習にも使えるかもしれません。
できたもの
できあがりはこんな感じです。
カメラは右バッターを想定したスロットボジション(キャッチャーとバッターの間)に置いています。フィールドサイズは少年野球仕様です。
ソースはGlitchに載せてます。VRゴーグルをお持ちでお時間に余裕のある方は試してみてください。
https://glitch.com/~sideways-fox
(ブログ公開当時のソースから更新されている可能性があります)
A-Frameで軽く実装しようと考えていたのですが、結構JSのコード量が多くなってしまいました。
物理演算のために aframe-physics-system を使って投球とストライクゾーンの当たり判定をやろうとしたのですが、いくつか問題があり使うのをやめました。
- 判定が微妙で、当たり判定をすり抜ける場合もある
- 時速80kmの場合、60fpsでも1フレームの移動距離が37cm(ホームベースの幅約38cmとほぼ一緒)と大きい
- ゲームであればまだ良いが、バーチャルシミュレーターとしては問題
- aframe-physics-system のREADMEに記載があるように、コアライブラリの CANNON.js で完全な判定をサポートしていない
- 当たり判定のためのストライクゾーンに球が当たると跳ね返ってしまう
- 回避方法がわからず・・・
- 物理法則によるのでいろいろ融通がきかない
で、結局自前で下記の実装をすることになったのがコード量が多くなってしまった要因です。
- 投球の放物線っぽい軌道と減速の計算
- 投球とストライクゾーンの当たり判定
- ホームベースの5辺に沿った5つの垂直面と投球軌跡の交点を算出
- 垂直面に沿ったストライクゾーンに相当する矩形と球の接触判定
ついでに60fpsでもある程度投球の軌道が追えるように、軌跡が残像っぽく残るようにしています。
今のところ妥協点もあります。
- ベース上を完全に通過する前にバウンドしたケースを無視
- コーナーすれすれの判定を厳密にしていない
(球を四角とした単純計算になっていて、最長14mmの誤差)
ただ、これらはどちらもやれば容易にできることです。
感想
なんとなく雰囲気はあるかなぁと思いますが、フレームレートがもっと上がらないとちょっと厳しいですかねぇ。
また、審判講習では頭を動かさずに視線だけで投球を追うように教わったのですが、視野角の問題で見切れてしまいそうになります。
カメラのポジショニングが大事ですね。(逆にせっかくの3DoFが台無しではないかと・・)
参考
- A-Frame
https://aframe.io/ - Physics for A-Frame VR
https://github.com/donmccurdy/aframe-physics-system - 平面と線分の交点を求める方法(ゲームプログラミング技術集)
http://www.sousakuba.com/Programming/gs_plane_line_intersect.html - ポリゴンの法線ベクトルを求める(ゲームプログラミング技術集)
http://www.sousakuba.com/Programming/gs_polygon_normal.html
次世代システム研究室では、アプリケーション開発や設計を行うリードエンジニアを募集しています。アプリケーション開発者の方、次世代システム研究室にご興味を持って頂ける方がいらっしゃいましたら、ぜひ 募集職種一覧 からご応募をお願いします。
グループ研究開発本部の最新情報をTwitterで配信中です。ぜひフォローください。
Follow @GMO_RD