Open3

Androidアプリに3Dモデルを描画する方法を模索する

dattdatt

前提要件

  • Kotlinで書かれたAndroidネイティブアプリを想定
  • Jetpack ComposeやAndroidViewから3DモデルのバイナリかURLを渡すだけで描画できるのが理想
  • モデル形式はGLTFを想定
dattdatt

使えそうなライブラリやSDKたち

Unity as a Library

https://docs.unity3d.com/2019.3/Documentation/Manual/UnityasaLibrary.html
フルスクリーンレンダリングにしか対応していないみたいなので今回は除外

Google Filament

https://github.com/google/filament
公式のサンプルでAndroidアプリケーションに組み込んでいるやつがあった

Rajawali

https://github.com/Rajawali/Rajawali
最近はメンテが滞ってそう...? 結構昔からあるAndroid向け3Dエンジン

libGDX

https://github.com/libgdx/libgdx
javaで組まれたゲーム開発フレームワーク

dattdatt

Google Filamentを使ってみる

https://github.com/google/filament

普通にクローンして、プロジェクトルートのandroidディレクトリをAndroid Studioで開く
今回は、samples.sample-gltf-viewer をエミュレータで実行してみる

ビルドできない

普通にAndroid Studioの実行ボタンを押したらビルドは始まるけど失敗する

ninja: error: '/Users/datt/WORKSPACE/github.com/google/filament/out/android-release/filament/lib/arm64-v8a/libfilament.a', needed by '../../../../build/intermediates/cxx/Debug/1n1v5r36/obj/arm64-v8a/libfilament-jni.so', missing and no known rule to make it

out/android-release にファイルがないと怒られてるみたい
BUILDING.md に書いてあるとおり、outにfilamentをビルドしていく

# 予め cmake, clang, ninja をインストールしておく
# filamentのリポジトリルートで実行

$ ./build.sh -p android release

その後にAndroidStudioからビルド&実行したらビルドできた

↓ エミュレータで実行した時のスクショ
なかなか綺麗だけど、重そう