- MMD (PMD/PMX/VMD/VPD) を再生できるライブラリ
- Viewer (MMD/OBJ)
- saba_viewer
- Example
- simple_mmd_viewer_glfw (OpenGL 4.1)
- simple_mmd_viewer_dx11 (DirectX 11)
- simple_mmd_viewer_vulkan (Vulkan 1.0.65)
- 透明ウィンドウ (GLFW 3.3.2 以上、Windows)
このコミットから内部の uv が反転しました。
- Window
- Visual Studio 2019
- Visual Studio 2017
- Visual Studio 2015 Update 3
- Linux
- Mac
- OBJ
- PMD
- PMX
- VMD
- VPD
- x ファイル (MMD拡張)
ビルドには CMake を使用します。 事前にインストールしてください。
external ディレクトリに必要なライブラリはまとまっていますが、以下のライブラリは事前に用意してください。
- OpenGL
- Bullet Physics
- GLFW
msys/cmake
は使用しないでください。
mingw64/mingw-w64-x86_64-cmake
を使用するようにしてください。
https://gitlab.kitware.com/cmake/cmake/-/issues/21649
mingw64 の環境は以下のように用意してください。
pacman -S base-devel mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-cmake
pacman -S mingw-w64-x86_64-ninja
pacman -S mingw-w64-x86_64-mesa
Bullet Physics をビルドする際、以下の設定を参考にしてください。
cmake -G "Visual Studio 14 2015 Win64" ^
-D CMAKE_INSTALL_PREFIX=<bullet のインストールディレクトリ> ^
-D INSTALL_LIBS=ON ^
-D USE_MSVC_RUNTIME_LIBRARY_DLL=On ^
-D BUILD_CPU_DEMOS=Off ^
-D BUILD_OPENGL3_DEMOS=Off ^
-D BUILD_BULLET2_DEMOS=Off ^
-D BUILD_UNIT_TESTS=Off ^
..
cmake --build . --config Debug --target ALL_BUILD
cmake --build . --config Debug --target INSTALL
cmake --build . --config Release --target ALL_BUILD
cmake --build . --config Release --target INSTALL
-G "Visual Studio 14 2015 Win64"
の部分は、環境により適宜変更してください。
brew install bullet
Ubuntu:
apt-get install libbullet-dev
Arch linux:
pacman -S bullet
pacman -S mingw-w64-x86_64-bullet
以下からダウンロードしてください。
brew install glfw
Ubuntu:
apt-get install libglfw3-dev
Arch linux:
pacman -S glfw
pacman -S mingw-w64-x86_64-glfw
git clone https://github.com/benikabocha/saba.git
cd saba
mkdir build
cd build
cmake -G "Visual Studio 14 2015 Win64" ^
-D SABA_BULLET_ROOT=<bullet のインストールディレクトリ> ^
-D SABA_GLFW_ROOT=<GLFW のインストールディレクトリ> ^
..
作成された *.sln ファイルを開き、ビルドしてください。
"saba_viewer" プロジェクトがアプリケーションとなります。
mkdir build
cd build
cmake ..
make -j4
./saba_viewer
動作が重い場合は、以下をお試しください。
cmake -DCMAKE_BUILD_TYPE=RELEASE ..
make -j4
mkdir build
cd build
cmake ..
ninja
./saba_viewer
GLFW をビルドする場合はサブモジュールの更新を行ってください。
git clone https://github.com/benikabocha/saba.git
cd saba
git submodule init
git submodule update
mkdir build
cd build
cmake -D SABA_FORCE_GLFW_BUILD ..
起動時のカレントディレクトリに"init.json"または、"init.lua"ファイルを配置することにより初期化時の設定を行うことができます。
"init.json" 、 "initlua" は、 UTF-8 で記述してください。
{
"MSAAEnable": true,
"MSAACount": 8,
"Commands":[
{
"Cmd":"open",
"Args":["test.pmx"]
},
{
"Cmd":"open",
"Args":["test.vmd"]
}
]
}
MSAA を有効にします。
MSAA のサンプリング数を設定します。 MSAAEnable が true の場合のみ有効です。
起動時に実行するコマンドを設定します。
MSAA = {
Enable = true,
Count = 8
}
InitCamera = {
Center = {x = 0, y = 10, z = 0},
Eye = {x = 0, y = 10, z = 50},
NearClip = 1.0,
FarClip = 2000.0,
Radius = 100
}
InitScene = {
UnitScale = 10
}
Commands = {
{
Cmd = "open",
Args = {"test.pmx"},
},
{
Cmd = "open",
Args = {"test.vmd"},
},
{
Cmd = "play"
},
}
MSAA を有効にします。
MSAA のサンプリング数を設定します。 MSAAEnable が true の場合のみ有効です。
シーン初期化時のカメラ中心位置を設定します。
シーン初期化時のカメラ視点位置を設定します。
シーン初期化時のニアクリップを設定します。
シーン初期化時のファークリップを設定します。
シーン初期化時のズーム可能半径を設定します。
シーン初期化時のグリッドサイズを設定します。
起動時に実行するコマンドを設定します。
"init.lua" ではスクリプトを実行することもできます。
プログラムに渡されるコマンドライン引数はArgs
で取得できます。
ModelIndex = 1
print(Args[1])
Commands = {
{
Cmd = "open",
Args = {Models[ModelIndex]},
},
{
Cmd = "open",
Args = {"test.vmd"},
},
{
Cmd = "play"
},
}
起動すると、以下の画面が表示されます。
見たいモデルをドラッグアンドドロップしてください。 MMD の場合は、モデル (PMD、PMX) を読み込んだ後、アニメーション (VMD) を読み込ませると、アニメーションできます。
マウスをドラッグすることにより、カメラを操作できます。 トラックパッド等を使用時は、キーボードのキーを組み合わせて動作させることもできます。
- 左ボタン (z + 左ボタン): 回転
- 右ボタン (c + 左ボタン): 遠近
- 中ボタン (x + 左ボタン): 移動
saba_viewer で使用できるコマンドです。
open <file path>
ファイルを開きます。 動作はドラックアンドドロップと変わりません。
対応ファイル:
- PMD
- PMX
- VMD (事前に PMD または PMX を開いてください)
- OBJ
モデルファイルの場合、開いたモデルは選択状態となります。
モデル名は model_001
のように、 model_
後に読み込み順のIDが降られます。
select <model name>
モデルを選択します。
clear [-all]
モデルをクリアします。
引数無しで呼び出した際、選択中のモデルをクリアします。
-all
を指定した際、すべてのモデルをクリアします。
play
アニメーションを再生します。
stop
アニメーションを停止します。
translate x y z
選択中のモデルを移動します。
rotate x y z
選択中のモデルを回転します。
scale x y z
選択中のモデルをスケールします。
refreshCustomCommand
カスタムコマンドをリフレッシュします。 再起動せずにカスタムコマンドを更新できます。
enableUI [false]
UIの表示、非表示を設定します。 キーで表示を切り替えることもできます。
clearAnimation [-all]
選択モデルのアニメーションをクリアします。 -all を指定すると、全モデルのアニメーションをクリアします。
clearSceneAnimation
カメラアニメーション等のシーンにかかわるアニメーションをクリアします。
Lua でカスタムコマンドを作成することができます。 カレントディレクトリに "command.lua" を配置し、起動すると Lua で作成したカスタムコマンドが使用できます。
例えば、以下のようなモデル、アニメーションのロードのスクリプトを作成し、ロードの操作をマクロとして登録することができます。
"command.lua" は、 UTF-8 で記述してください。
function OpenModel(files)
return function ()
ExecuteCommand("clear", "-all")
for i, filename in ipairs(files) do
ExecuteCommand("open", filename)
end
end
end
function OpenAnim(files, isPlay)
return function ()
ExecuteCommand("clearAnimation", "-all")
ExecuteCommand("clearSceneAnimation")
for i, filename in ipairs(files) do
ExecuteCommand("open", filename)
end
if isPlay then
ExecuteCommand("play")
end
end
end
-- Register Model Load Command
RegisterCommand("", OpenModel({"Model1_Path"}), "01_Model/Menu1")
RegisterCommand("", OpenModel({"Model2_Path"}), "01_Model/Menu2")
-- Register Animation Load Command
anims = {
"ModelAnim_Path",
"CameraAnim_Path",
}
RegisterCommand("", OpenAnim(anims, true), "02_Anim/Anim1")
"command.lua" で使用できるコマンドは以下になります。
RegisterCommand(commandName, commandFunc, menuName)
-- コマンドを登録します。
-- commandName : コマンド名
-- 空文字列の場合、コマンド名は自動的に作成されます。
-- commandFunc : コマンド関数
-- menuName : メニュー名
-- カスタムコマンドをメニューに追加する際の名前です。
-- 空の場合はメニューに追加されません
-- `/` で階層を追加することができます。
ExecuteCommand(command, args)
-- コマンドを実行します。
-- command : 実行するコマンド
--- args : コマンドに渡す引数
--- 文字列または、テーブルです。
- sanko-shoko.net (AR Example) http://www.sanko-shoko.net/note.php?id=sbtj