3 个版本
0.1.2 | 2022年11月7日 |
---|---|
0.1.1 | 2022年11月7日 |
0.1.0 | 2022年8月30日 |
#63 in 数据格式
用于 mdanceio
200KB
5K SLoC
MDanceIO
mdanceio
是一个跨平台的 MMD(MikuMikuDance) 兼容实现。它通过 WebGPU 在 wasm 上针对浏览器。用 Rust 重写 nanoem。
此项目仍处于初始开发阶段。
动机
我创建这个项目主要是为了学习 Rust 和 WebGPU。我希望能够在浏览器中提供 MikuMikuDance 的实现,以及未来的云渲染和 AR/VR。
mdanceio
作为crate,在特定的 Surface
、TextureView
或 Canvas
上提供 MMD 渲染服务。或者它可以直接返回一个 BytesArray。
基于 mdanceio
的另一个 项目 提供基本的 MMD 远程渲染服务,通过 WebRTC。
入门
如何获取支持的模型和动作
您可以从社区分享角色模型的 模之屋(PlayBox) 获取模型和动作。
项目构建可能存在错误和不完整。您可以使用以下测试并通过的模型和动作来入门。
- 模型: 【原神】砂糖Sucrose
- ◆模型提供:miHoYo
- ◆模型改造:观海
- 动作: 神里凌华传说任务舞蹈
- 动作:Lct火红枣
此 README 中的示例 GIF 使用了上述模型和动作。
示例
示例将在本地窗口中播放具有特定动作的模型。
cargo run --package mdanceio --example winit_app -- --model <Model Path> --motion <Motion Path>
您还可以将其构建为可执行文件。
cargo build --package mdanceio --example winit_app --release
您还可以在 Actions 中获取可执行文件。
WebGPU 示例
您可以通过 这里 访问示例(需要启用 #enable-unsafe-webgpu
的 Chrome Canary)。
WebGL 示例
您可以通过 这里 使用 WebGL 访问示例。
先决条件
安装 wasm-pack,一个 Rust 到 wasm 的工作流工具。
运行示例需要 nodejs
。
您还需要支持 WebGPU
的 Google Chrome Canary 浏览器,并启用功能标志 #enable-unsafe-webgpu
。
构建 wasm 包
wasm-pack build mdanceio --out-dir ../target/pkg
构建需要环境变量:RUSTFLAGS=--cfg=web_sys_unstable_apis
运行 Web 示例
cd mdance-demo
npm install
npm run start
您还可以在 Actions 中获取预构建的 Web 包。
远程渲染
我在这里有一个如何使用 mdanceio 作为渲染服务的示例项目 链接。
该服务使用 WebRTC 与浏览器通信。
您可以按照其指南来试用它。
目标平台支持
平台 | 支持 |
---|---|
Windows | ✅ |
Linux | 🆗 |
MacOS | 🆗 |
浏览器(WebGPU) | ✅ |
浏览器(WebGL) | 🆗 |
Android | 🛠️ |
OpenXR | 🛠️ |
✅ = 首选支持 🆗 = 尽力支持 🛠️ = 不支持,但计划中
文件格式支持
模型格式
格式 | 支持 |
---|---|
PMX | ✅ |
PMD | ❌ |
运动格式
格式 | 支持 |
---|---|
VMD | ✅ |
NMD | ❌ |
未来计划
- 核心功能尚未完成。我们将在未来涵盖所有 MikuMikuDance 功能。
- 我对在 AR/VR 环境中支持
mdanceio
感兴趣。我们将提取 AR 使用的 SDK 并提供示例。 - 提供支持云渲染的架构。
- 提供对 MME 或类似技术的支持。
依赖项
~3MB
~118K SLoC