MikuMikuDayoは、サンドマン氏が開発したPMXファイル用のレンダラです
MITライセンスのオープンソースで公開されています
https://github.com/pennennennennennenem/MikuMikuDayo
本サイトで公開するMikuMikuDayoは、サンドマン氏の制作物(バージョンβ1)をもとに𝕔𝕒𝕥𝕟𝕚𝕡が、ひとまずキャラクター1体が踊るダンス動画を作れるように改修を加えたものです
(𝕔𝕒𝕥𝕟𝕚𝕡が改修を加えたMikuMikuDayoもMITライセンスのオープンソースです)
(2025/02/16 追記) サンドマン氏がMikuMikuDayoバージョンβ2をリリースし、本家のMikuMikuDayoで動画が作れるようになりました
なのでMikuMikuDayoで動画を制作したい方は、サンドマン氏が公開しているMikuMikuDayoを使用することをお勧めします
キャラクターのほかにステージを一つ読み込むことができ、それぞれにVMDファイルによるモーションを読み込むことができます(VPDには対応していません)
カメラモーションの読み込みにも対応しています(照明の読み込みには対応していません)
AVIファイルへの出力ができます(透過AVIには対応していません。したいなぁ)
このツールでの作例は以下の動画を見ていただけますと幸いです
http://nico.ms/sm43900055
以下、サンドマン氏のReadMeを引用しつつツールの説明等を記載していきます
なんかこれじゃない PMXファイル用のアニメーション出力レンダラです
ベースであるサンドマン氏の”なんかこれじゃないPMXファイル用レンダラ”は、sdPBRなどのシェーダを作るにあたって新しいレンダリング手法を試す時に、お手本が無いと結果が正しいのかどうかわからないので、そのお手本を作るためのモノとして作られました
本サイトでリリースするMikuMikuDayoは、キャラクター1体をダンスさせるぐらいの動画であれば作って遊べますが、できることは動画を作ることだけで振り付けを作ることはできませんので、DanceではなくてDayoです
そういうことでよろしくです
エクスプローラ上でx64\release\MikuMikuDayo.exe
をダブルクリック!
マウスやテンキーでの操作については画面に表示される通りなのでメニューについて
File
メニューでスカイボックス,モデル,モーション,カメラの読み込みが出来ます。モデルはPMX2.0形式のみ対応しています(PMDやXは不可)。読み込んだモデルやモーションなどの情報をまとめてプロジェクトファイルに保存や読込みが出来ます。
View
メニューdenoise
でIntel OIDNを使用したデノイズのON/OFFが出来ますspectral rendering
で分光を考慮したレンダリングをON/OFFできます以下の3種類からシェーダを選択できます
preview shader
材質の違いやカメラの設定をほとんど考慮しない軽いシェーダですpathtracing shader
片方向パストレースによる割合軽量ですが十分な表現力の有るシェーダですbidirectional pathtracing shader
双方向パストレースによる重いけれどコースティクスなど複雑な表現のできるシェーダですまた、各種設定や情報を確認するウィンドウを表示できます
view workspace
メインウィンドウ内に以下の設定ができる小窓を表示しますjson
ファイルの読み込みenvironment setting
色調調整やテロップに表示される内容を確認できるサブウインドウを表示します。動画出力中はメインウィンドウがボーダレスウィンドウになりますので、このサブウィンドウで動画出力の進捗状況を確認できますMotion
メニューStart
モーションの再生を開始しますStop
モーションの再生を停止しますJump to
指定のフレームにジャンプしますMotion loop
モーションの最後で最初にループするか停止するかを指定できますReset
0フレームにジャンプしてモーションをリセットし、カメラのユーザーの操作や物理演算もリセットしますEffect
メニューdof
ボケの有効無効を切り替えますautofocus
有効にするとカメラのピント位置を画面中央にあるオブジェクトに自動的に合わせますbloom
明るいところから光があふれる表現の有効無効を切り替えます(簡易的な実装なのであまり品質は良くないです)fxaa
アンチエイリアスの有効無効を切り替えますfog
遠方のフォグの有効無効を切り替えますuser compute shader
カメラや照明の位置をプログラムで記述できます。hlsl/Plugin01_CS.hlslを参照くださいuser pixel shader
hlsl/Plugin02_PS.hlslに記述されているピクセルシェーダーを実行します(サンプルはモノトーンにするコードになっています)view depth
Rayシェーダで測った深度マップを画面に表示しますCapture
メニューSave as PNG
PNGファイルに画像として出力しますSave as AVI
AVIファイルに動画として出力します。圧縮コーデックを指定することができますSet window size
ウィンドウサイズを指定するサブウィンドウを開きますVMDファイルに格納されているボーン名・モーフ名を示す文字列はANSIでエンコードされているため、VMDファイル内にボーン名として格納されているバイト列と表示される文字列との対応は環境により異なる可能性があります。これに対応できるよう、VMDファイルが作成された際に使われていたコードページが何であるかをconfig.json
内のvmd_codepage
で指定できるようになっています
デフォルトでは日本語(Shift-JIS)を示すコードページ932が指定されていますが、もし他国語版モデル専用のモーションが正しく扱えない場合は、config.json
内のvmd_codepage
を変更すると解消できるかもしれません
現状ではいずれにしてもPMXファイルでのボーン名・モーフ名と完全一致した場合のみ正しく認識する実装になっているので、ANSIエンコードされた状態で15バイトを超えるボーン名・モーフ名を指すキーフレームは扱えませんのでご注意ください
PMXファイルに含まれる物体の材質名に応じて金属や肌などの質感を切り替えています。ですから、モデルをコピーしたうえでPMXeditorで材質名の変更を適宜行う必要があるでしょう
config.json
をいじると材質名に含まれるキーワードと材質の対応付けを変えられますが、エラーチェックは雑なので正しく読み込めるjsonファイルでないとどんなエラーが出るか分かりませんから、バックアップを取ってからいじって下さい
デフォルトのconfig.json
では以下のような設定になっていますので、PMXファイルをいじる場合の参考にしてください
肌
が含まれる場合、表面下散乱を考慮した、赤色がよく伸びる材質になります金
が含まれる場合、よく研磨された金属的な材質になりますガラス
または氷
が含まれる場合、透過・屈折を考慮した材質になります。また、現実の材料以上に派手に分光を起こします髪
が含まれる場合、凹凸感があり、異方性反射によるハイライトの付いた材質になります白目
が含まれる場合、弱い発光要素を持ちます灯
が含まれる場合、発光要素が大きく加算され、光源として使えるようになりますビーム
が含まれる場合、指向性の強い強力な光源とみなされますbidirectional pathtracing shader
以外ではあまり良く扱えませんjsonオブジェクトは以下の構成になっています
default_material
特に指定のない場合のキャラクターのマテリアルパラメータを指定しますdefault_material_stage
特に指定のない場合のステージのマテリアルパラメータを指定しますmaterial
マテリアルプリセットの定義rule
PMXモデルの材質名に含まれるキーワードに対して、マテリアルプリセットのどれを使うかという対応付け例 “default_material”: { “IOR”:[1.5,0], “roughness”:[0.5,0.5] },
使用できるマテリアルパラメータ名とパラメータの記述法は以下の通りです
大文字・小文字は区別されます
正しく認識できないマテリアルパラメータ名を指定してもエラーは出ずに認識されないだけになるため、正確に書いて下さい
subsurface
のみ対応しており、以下のような意味になりますMikuMikuDayoではレイトレーシングを使っており、主要な光源はSkyboxとなります。各材質がまったく発光しない設定で室内ステージを読み込むと、Skyboxからの光がステージに遮断され、内側は真っ暗になってしまいます(現実で考えれば、閉め切った部屋の電気を消せば真っ暗になりますよね)。なので、それぞれの材質に”light”による小さい発光要素を付け足すことでひとまず真っ暗にならないようにすることができます(0.1~0.3ぐらいがいい感じになると思います)。
“name”の後にマテリアル名を文字列で指定する必要があります。あとはdefault_materialと同様のオブジェクトを配列で指定します
例 [ { “keyword”:[“金”,”メタル”,”metal”], “material”:”metal” }, … ]
“keyword”配列に指定されたキーワードのどれか一つを材質名に持つ場合、”material”に指定されたマテリアルが適用されます
マテリアルをGUIで設定できるようにしたいですが、予定は未定ですので、config.json
で指定することに慣れておくと良いかもしれません。設定したjson
ファイルはWorkspace内のLoad Json file..
ボタンで読み込むことでレンダリングに反映させることができます(json
ファイルを更新したらリアルタイムにDayoに反映するぐらいはしたいなぁと思いますが、予定は未定です)
src
ディレクトリとlib
ディレクトリにソースコードが入っています
MikuMikuDayoアプリケーション本体のソースはsrc
ディレクトリのdayo.cppとdayoWorkspace.cppファイルです
lib
ディレクトリにはアプリケーション本体から使われる様々なSW部品が入っています
全く整理されてないので無理して自分でビルドしなくてもいいです
シェーダのソースコードはMikuMikuDayo\hlsl
に入っています
VisualStudio2022でのビルドを念頭にしています
Nvidia CUDA Toolkitのインストールが別途必要ですが、それ以外のソースコードはこのリポジトリに全て入っていますので、ソリューションファイルをVisualStudioで開き、ビルドを行えば本体のEXEは生成されます(その他必要なDLLのバイナリは、リリースパッケージより取得してください)。
なお、使用している各オープンソースソフトウェアのリポジトリ等は以下のリンクを参照ください。
DirectX TexはNuGetでインストールするのが簡単です
SimpleMath.cpp, SimleMath.h, d3dx12.hについてはDirectX12Tkから3つのファイルをコピーしてプロジェクトのソースファイルに入れればOKです
BulletPhysicsは付属のcmakeのオプションだとDirectXTex等と一緒に使えないライブラリが出力されるのでPMXLoader.ixxの先頭付近に書いてある方法を使ってビルドしています。
OIDNについては、上記リンクよりダウンロードしたoidn-2.2.2.x64.windows.zipを展開し、oidn.hppにインクルードパスを通し、OpenImageDenoise.libにライブラリパスを通せばOKです
OpenCVについては、上記リンクよりダウンロードし、opencv.hppにインクルードパスを通し、opencv_world490.libとopencv_world490d.libにライブラリパスを通せばOKです
Nvidia CUDA Toolkitは、OpenCVを含めたMikuMikuDayoをビルドする際に必要です。CUDA_PATH
の環境変数にCUDA Toolkitのインストール先のパスがセットされている必要があります
MITライセンスで公開されたソフトウェアです
このソフトウェアを使用して作った画像についてはこのソフトウェアの作者は何ら権利も義務も持ちませんから、各自の責任で使って下さい
sample
フォルダに添付されているskybox用HDRI lebombo_2k.hdr
は、polyhaven.comにて公開されている物を利用させていただきました
PMXLoaderの物理演算対応にあたってはbenikabocha氏sabaを参考にさせていただきました
本サイトで公開するMikuMikuDayoはサンドマン様の制作物をもとに制作させていただきました
誠にありがとうございます
ひこうきしか有りませんが、ダヨーさんはどこですか
ひこうきにはすず式ミクダヨーさんが丁度よく載せられるようになっていますから、PMXEditor等を使って載せてあげたらいいと思います
ひこうきモデルの作者はサンドマン氏で、CC0ライセンスで公開されています
動かないんですけど
DXR対応ビデオカードが無いと動かせないんですけど
DXR対応ビデオカードのはずなんですけど
そんなら動くはずなんですけど、ヨソでテストはしてないんですけど
exeファイルと同じディレクトリにyrz.logというファイルが出来ているのでメモ帳で読んだらなんかヒントになる事が書いてあるかもしれません
MMD関連ソフトですか?
それは間違いないと考えています
MMD互換ソフトですか?
ミクさんとミクダヨーさんの関係に似ていないこともないと思います
MMDですか?
MikuMikuDayoです
略す時はMMDayoと書いて下さい
Dayoはそれ以上略せないんダヨー