うさぎ開発まとめ(2023/8)

この記事は現在鋭意開発中のシングルプレイヤー専用VRエクスペリエンス「真夜中の雪うさぎ」の最近のようすを書いた記事です。先月の記事はこちら

今月は宇宙を漂ってたわりにはお休みもあったのでわりとがんばった。アンコウはダメ。

先月に引き続き(と言いつつ裏ではちょくちょく書いてたけど)Mivlyの実装を続けています。先月の記事を読むと一か月で少なくとも足と腕のプロトタイプは実装できてるらしい。

実装の詳細もほんとはすごく書きたいけど、まじめに書くと論文みたいになっちゃうので、完成後にやります。


ロコモーション

「のゆき」で使用しているゲームエンジンであるUnityにはAI Navigation(旧NavMesh)という超便利機能群があり、ちゃんと使えばほぼノーコードで追従するキャラクターを実装できます。

が、そんなちゃちな実装では当然「恋」は生まれないので、NavMeshをさらにいろいろ魔改造してマジっぽいロコモーション(移動)を実装しています。具体的に言うと、回転・直進を交互に行ってさらにルームスケール移動まであるという動きはVRロコモーション特有のもので、わざわざそれを再現する感じにしています。

このロコモーションは下位にある視覚からの情報をもとに移動を行っていて、一年以上前に書いたコードをベースにしています。しかし、当時はなんと新京都の開発前でNavMeshの概念を知らなかったがために、八分木ベースからNavMeshベースの実装(隣接疎行列1+セル内分割)に組みなおしました。ありがとう、新京都。そっちも要素を追加したいけどマジで時間が足りない2


手の動き

プロジェクト内でgestureモデルと呼んでいるやつです3

少なくとも執筆時点ではジェスチャー(動画内の🤚とか👍とか)はプレイヤーとゆのーちゃんで対称になるように実装していて、つまりゆのーちゃんが認識できるジェスチャー群とゆのーちゃんが出せるジェスチャー群は完全に同じです4

ただし、この動画時点では上位レイヤーが未完成であるがゆえにジェスチャーの入出力を純粋にハードコードしていて、プレイヤーの右手をまねる(動画一つ目の左手)、手のひらを差し出されたら乗せる(同右手)、何個かの協調的なジェスチャーをする(動画二つ目)をやっています。

で、こっちがハードコードしていないやつです。途中でチラッと見ているやつがこれの「プログラム」で、なんとC++で記述していて5、なんか複雑な経路を経てゆのーちゃんに読ませています。

これ、原理上は「真夜中の雪うさぎSDK」を配布すれば好きな「プログラム」をプレイヤーに書いてもらうこともできるんだけど、できるようにしといたほうがいいんだろうか……?


おまけ

PVのほうの作業も進めたいけど(ゆのーちゃんのボーカルがハチャメチャにかわいいので)、脳は一つしかないし腕は二本しかないのじゃ……


  1. 普通に数キロ四方のマップとかも実装予定なので、密で持っておくとメモリと計算時間がヤバい。
  2. そういえば新京都のナビシステムの実装方法をどこにも書いていなかったと思うのでここにメモしておくと、単にNavMeshPath.cornersをLineRendererに流し込んでるだけです。例の廊下については、ベイク済みのNavMeshに仮想のアンカーを置いて経路を計算したあと、タイル的にそれらを複製して動的生成される廊下上の経路を計算しています。それはそう。
  3. 現時点ではモデルとビューを全部ひっくるめて書くとaesthetic, invite, context, emotion, gesture, hand-pose, head-pose, locomotion, movement, potential, program, sight, attentionがある。
  4. 👎とかも教えてはいるけど、ゆのーちゃんが自分からそれをするかというのはまた別の話。
  5. 構造が取り出せればいいので言語はべつに何でもよい。