3 个版本

0.1.2 2022年11月7日
0.1.1 2022年11月7日
0.1.0 2022年8月30日

#63 in 数据格式


用于 mdanceio

MIT 许可证

200KB
5K SLoC

MDanceIO

Build Status NPM NPM Crate Maven

mdanceio 是一个跨平台的 MMD(MikuMikuDance) 兼容实现。它通过 WebGPU 在 wasm 上针对浏览器。用 Rust 重写 nanoem

此项目仍处于初始开发阶段。

动机

我创建这个项目主要是为了学习 Rust 和 WebGPU。我希望能够在浏览器中提供 MikuMikuDance 的实现,以及未来的云渲染和 AR/VR。

mdanceio 作为crate,在特定的 SurfaceTextureViewCanvas 上提供 MMD 渲染服务。或者它可以直接返回一个 BytesArray。

基于 mdanceio 的另一个 项目 提供基本的 MMD 远程渲染服务,通过 WebRTC。

入门

如何获取支持的模型和动作

您可以从社区分享角色模型的 模之屋(PlayBox) 获取模型和动作。

项目构建可能存在错误和不完整。您可以使用以下测试并通过的模型和动作来入门。

此 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

您还需要支持 WebGPUGoogle 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