2023/01/07
テーマ: 活動まとめ / 東京タクシー3D / 2023 / すべて
東京タクシー3D の開発振り返りです。
ちょっとずつ改良してます。
これまでは unity asset store で買ったローポリキャラクタとその付属アニメーションを使っていましたが、どうしても他のモデルも使いたくなってきたのでアニメーションをどうにかする必要がありました。
Mixamo にモデルをアップロードして、そのモデルに mixamo 標準の skeleton を対応付ける auto rig 機能があってそれも試したけどどうも不安定。
blender addon で ReNim というリターゲティングツールを見つけたので試してみたらこれが大ハマリ。
異なる skeleton 間の対応付けをして、片方向けのアニメーションからもう片方向けのアニメーションを生成できるというやつ。
これを使って、以下のようなワークフローが実現できたのでこれに落ち着きました。
Mixamo からいい感じのを見つけてきて各 skeleton に転写。スリラーがあって嬉しかった(笑)
ReNim のワークフローができたので、さっそくいろんなキャラを追加。
VRoid Studio でポチポチキャラを作ってエクスポート、blender で読み込んで調整。
キャラごとに bone 構成が微妙に違うけど skeleton としては vroid 共通の 1 つを使いたいので、skeleton にない bone は存在する所まで祖先 bone を辿って設定する blender script を作りました。
他にも armature modifier の追従先 object を一括設定ツール、アニメーション一括転写ツール、skeleton にない bone が mesh に設定されていないかの検証ツールを blender script として書いて使いました。
100 体くらいの既存のモブキャラは FBX → gltf → 独自フォーマットというフローでしたが、FBX から blender に手動インポートして blender → gltf → 独自フォーマットというフローにしました。
これまた skeleton を共通にするためにいろいろ調整。
キラキラリーンみたいな心地よい感じの音に変更。
なんか収集要素が欲しいなと思ったので追加。
確率密度関数を定義、シミュレートしたりして、楽しく収集できる感じを目指しました。
やっぱ明るい感じがいいなと思ったので ambient 比率を高くしました。
半透明の角丸緑にしてテクノロジ感を強くしました。
細い道の近くの目的地も大幅に追加。
道路グラフとマップレベル壁の関係で原理的に到達できないところは目的地としないようにしました。
GCD が発火しないことがあり、その場合プレイヤーが移動してもビルのロードが行われなくなってしまっていたので回避。
道路グラフは full と大きな道だけ含む part を使っていましたが full だけでいけそうだということで part を廃止。
点群に対するクエリを効率的に処理するために QuadTree クラスを作成、グラフの辺上の点集合と目的地データに対して適用しました。
QuadTree の分割状況を可視化したりして結構興味深かったです。
客の待機地点集合は別で定義していましたが、これをグラフの辺上の点集合で表すようにして客の待機地点集合は廃止。ストレージとメモリを3MBほど削減できました。
Veymon が高速走行でスリップする問題を修正するために長いコースを作りました。
全車種乗り心地を確認。
タイヤの軸が高すぎてシャーシが地面と擦れていたようなので調整。
客の目的地設定の際に実際に道路グラフを辿って到達できるかを確認するようにしましたが、それだと異なる連結成分には到達できないので道路グラフが連結となるように小さい連結成分は削除しました。
実際の所小さい連結成分は運転可能エリアの端で道路が切断されることで出来ていたものだけなので削除しても問題なし。
細い道だったら抽選をやり直す方式で狙った確率になるように調整。
車ごとに見える大きさや角度がバラバラでまとめサイト用のスクショの crop が面倒だったので。
ツイートがない場合、twitter アイコンの描画先とアカウントエントリの対応がずれていました。
ちゃんとしたストック情報を用意したほうがいいなと思ったので。
ヘルプもこっちに一本化。