0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KAGRA:2Dピクセルエンジンから始まって、気づいたらVRM対応のハイブリッド3Dエンジンno話

0
Last updated at Posted at 2026-04-07

2138.png

0.きっかけ:pyxelに憧れて

昔からレトロゲーム風の2Dゲームエンジン「pyxel」に憧れていました。
「Pythonで手軽にピクセルゲームが作れたら楽しいのに」と思い、真似して自作してみたのが、このエンジンの始まりです。

元々2Dから始まりました。少し進めていくと、やはりPythonだと遅すぎるという問題があり、
描写系はRustに移行となりました。

  1. アーキテクチャの決断:PythonとRustのハイブリッド
    Pythonだけでは描画性能が厳しい。
    そこで、ゲームロジックはPython(開発速度)、描画と重い計算はRust(速度) という分割にしました。

· Rust側:wgpu ベースのレンダラー、VRMローダー、FBXパーサー、GPUスキニング
· Python側:ECS、物理、タイルマップ、UI、イベントバス、サンプルゲーム

maturin でPythonからRustを呼び出す形です。
この構成にしてから、3D迷路でも60fps安定するようになりました。

  1. 素材集めの苦労(VRoid StudioとMixamo)

エンジンを作るにあたり、困ったのが「サンプルで使える3Dモデルとモーション」。

· モデル:結局 VRoid Studio で自前でVRMを作るのが一番安定しました。ライセンスも明確で、自由に配布できる。
· モーション:MixamoのFBXが事実上の標準ですが、これが曲者。軸が寝そべった状態(X軸-90度)でベイクされていて、そのままVRMに適用するとキャラが前のめりになります。

この問題の解決に、数日クォータニオンと格闘することになります。

  1. 技術的ハイライト:FBXリターゲットの内部的処理

Mixamo FBXをVRMに正しくリターゲットするために、以下の処理を実装しました。

  1. バインドポーズの分離:外部TポーズFBXを指定できるようにし、アニメーションFBXの最初のフレームが崩れていても影響を受けないようにした。
  2. ワールド空間でのデルタ抽出:各ボーンのワールド回転を計算し、「バインドポーズからの純粋な姿勢変化」を取り出す。
  3. ターゲット(VRM)のバインドポーズに合成:VRMのバインドワールド回転にデルタを乗算し、その後ローカル回転に逆算する。

これで軸のねじれはほぼ解消できました。ただし、歩行モーションではまだ左右に揺れすぎるなどの課題が残っています。

  1. 今後の展望(ロードマップ)

現在は「動く」状態まで来ましたが、まだまだ改善点があります。

· IK(逆運動学):手や足を地面に正確に接地させる。ブレイクダンスのようなモーションには必須。
· FBXの汎用対応:Mixamo以外のFBX(MotionBuilderやMaya出力)も自動判別・補正できるように。
· Webビルド出力:PythonスクリプトからWebAssembly/WebGPUのゲームを書き出せるように。
· エディタ機能:最低限のシーンエディタとアニメーションビューア。

これらが実現すれば、より多くの人に使ってもらえるエンジンになるはずです。

  1. まとめ:試してみてください

リポジトリはこちらです。
👉 https://github.com/EMMA019/KAGRA

クローンしてすぐ動くサンプルとして、3D迷路と2Dアクションゲームを同梱しています。

git clone https://github.com/EMMA019/KAGRA.git
cd KAGRA
python -m venv .venv
.venv\Scripts\activate.bat
pip install maturin
maturin develop
python examples/3Dmaze.py   # または defend_crystal.py

「こんなエンジン欲しかった」という声があれば、ぜひスターやIssueをお待ちしています。
一緒に盛り上げていけると嬉しいです。


0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?