㉑ 自作エンジン Garnet の説明
https://gyazo.com/7448d7b79d4ab7b235020f0256b98d4e
ソースコード
https://github.com/HaruoOgawa/Garnet
説明
概要
GarnetはC++製の自作ゲームエンジンで、Graphics APIはOpenGL・Vulkan・WebGPUに対応しています。また、アニメーションシステムや物理エンジン・ネットワーク通信にも対応しており、メガデモ・ジェネラティブアート・バーチャルなどのコンテンツを作ることができます。
使用ツール
Visual Studio 2022
Emscripten
C++とWebGPU NativeのコードをWebAssemblyに変換してWebブラウザ上で動かすのに使用しています
⑭ 【自作エンジン Garnet】 Animation System の動作確認環境はGarnetをWebAssemblyにした環境を使っています
最新のGarnetでは動かなくなっているので調整が必要です
使用言語
C++
GLSL
機能要件一覧
対応Graphics API
OpenGL
Vulkan
WebGPU(最新のGarnetでは動かなくなっているので要調整)
アニメーション
スキンメッシュアニメーション
ヒューマノイドアニメーション
モーフィング
ブレンドシェイプ
CCDIK
揺れもの(bullet駆動)
簡易リターゲット
物理エンジンのbullet対応
ネットワーク
UDP通信
DMX受信
NDI受信
対応3Dフォーマット
glTF
FBX
一部対応
PMX
アニメーションしてVMDもロード可能
ImGUI対応
Garnetエディタに使われています
自前のTimeline機能とエディタ
グラフィック
デファードレンダリング対応
カスタムシェーダー
カスタムポストプロセス
標準の組み込みグラフィック機能
PBR
シャドウマップ
ブルーム
FXAA
Garnetプロジェクトの作成方法
Visual Studio環境の準備
Visual Studio 2022をインストールします
インストール時に必ず「Desktop development with C++」にチェックを入れます
https://gyazo.com/edd05588079ca6c1944aca06c821120b
Garnetをクローン
git clone https://github.com/HaruoOgawa/Garnet.git
そのまま同じディレクトリでGarnetLauncherを使い、Garnetプロジェクトを作成します。
Garnet\GarnetLauncher\GarnetLauncher.exe -i Garnet\Garnet\Garnet.vcxproj -p TestProj
-i にはGarnet.vcxprojまでのパス、-pには任意のプロジェクト名を指定
GarnetLauncherの実行に成功すると指定したプロジェクト名のフォルダが生成されます
https://aps.autodesk.com/developer/overview/fbx-sdk からWindows VS2022用のFBX SDKのインストーラーを取得しインストールします
その後、Garnet\Garnet\Src\Library\FBXSDKに2020.3.7フォルダの中身をコピーします
https://gyazo.com/388f6c1e5c8b1c30e0fa5dd6ee80fda4
GarnetLauncherで生成されたプロジェクトフォルダの中にある「プロジェクト名.sln」をVisual Studioで開きます
ソリューション構成を「DebugGLFW」にします
https://gyazo.com/0c0a1f748f777cf47739e827ef5b6cc1
F5でビルドとデバッグを開始します
ビルドが完了するとGarnetが自動で立ち上がります
Garnetプロジェクトの概要
Garnetプロジェクトはソースコード(VS Project)がエンジン層とアプリケーション層の2層に分かれており、コンテンツを作るときはアプリケーション層にコードを書きます。
https://gyazo.com/f13af3889ef51cfd21e7a79a19054b67
Src/App/ScriptAppのコードはいわばアプリケーション層の中心でここに配置するクラスはアプリケーションクラスと呼びます
例. https://github.com/HaruoOgawa/VirtualLive-2025-02-Garnet/tree/master/Src/App/ScriptApp
アプリケーションクラスはCApp抽象クラスを継承しており、これをmain.cppのCAppRunnerに渡すことでどのアプリを起動するか選択します
https://github.com/HaruoOgawa/VirtualLive-2025-02-Garnet/blob/master/Src/Main/main.cpp#L12
ユーザーはアプリケーションクラスの中でカメラ設定・オブジェクトロード・レンダリングパイプラインに関するコードを書いてコンテンツを作ります
ロードはLoadWorkerクラスが担ってくれるのでUpdate仮想関数から飛んでくるpLoadWorkerに丸投げすることができます
ワールドはアプリケーションクラスに直書きで3Dモデルを配置することもできますが、JSONファイルにあらかじめ記述することもできます。この場合、Initialize仮想関数の先頭でJSONファイルのロードを必ずリクエストしておきます(一番最初にロードしたいため)
JSONロード: https://github.com/HaruoOgawa/VirtualLive-2025-02-Garnet/blob/master/Src/App/ScriptApp/CLiveApp.cpp#L100
JSONの例: https://github.com/HaruoOgawa/VirtualLive-2025-02-Garnet/blob/master/Resources/User/Scene/sample.json