#model #format #data #assets #run-time #type #v-tuber

orphism

用于与某些格式交互的库,这些格式有时用于VTuber模型资产

3个版本 (破坏性更新)

0.3.0 2023年11月28日
0.2.0 2023年11月17日
0.1.0 2023年11月15日

#1866解析器实现

每月21次 下载
用于 orphist

MIT 许可证

185KB
5K SLoC

orphism 最新版本

概述

作为一名VTuber,你的模型可能附带了一堆位于 runtime 目录下的文件。orphism 是一个Rust编程语言的库,它允许你加载和解释这些文件,前提是你的程序是用Rust编写的。

从那时起,你要做什么取决于你自己。

这不是什么?

  • 没有UI,这是一个用于构建其他东西的库。
  • 它不提供创建、编辑模型的方式,除了数据序列化和反序列化。
    • 如果你需要这些,格式供应商的官方编辑器提供了这些功能。
  • 它不提供对这些资产的非Rust接口。
    • 如果你需要这些,格式供应商的官方SDK提供了这些功能。

尽管可能使用这个库构建一些或全部这些功能,但它们都明确不包括在本项目的范围之内。

那么它是什么?

  • 它提供了一系列数据类型,用于读取、验证和分析这些文件。
  • 它为在顶部构建其他(更有趣)的东西提供了一个基础。
  • 它不受格式供应商的EULA和许可要求的限制,因为它不与他们的SDK或任何其他受许可的工作共享或包含任何代码。

这个存在的原因是什么?

  1. 作为对VTubing社区及其每天所做的一切表示感谢的象征。

  2. 为其他Rustaceans在VTubing空间中构建酷东西打开一条道路。

我如何获得这个神奇的工具?

在你的项目目录中运行以下Cargo命令(假设你已经安装了 cargo-edit

cargo add orphism

或者将以下行添加到你的 Cargo.toml(在 [dependencies] 数组中)

orphism = "^ 0.2"

我如何使用它?

一个最小的程序可能看起来像这样

use orphism::Runtime;
use orphism::moc3::Model;
use std::path::PathBuf;

fn main() {
  let runtime = Runtime::new_from_runtime_path(PathBuf::from("./path/to/model/runtime")).expect("failed to load runtime directory");
  let moc3 = runtime.load_model().expect("failed to load model").data;
  let model = Model::read(moc3).expect("failed to parse model");
}

核心数据类型

orphism 主要围绕两种数据类型展开。

运行时

orphism 中的 Runtime 结构体表示包含您运行时模型资产的 runtime/ 目录。这基本上是磁盘上的状态,以及从该状态加载的机制。

大多数运行时包含一个模型以及与此模型相关的其他文件,orphism 将尝试检测这一点。如果在给定的运行时目录中检测到多个模型,它将返回一个错误,指示问题所在,以及它尝试从中加载的路径。

对于这些情况,有一个 Runtime::new_from_model_path 函数,允许您通过针对特定的模型文件来消除歧义。

一旦您有了 Runtime,您就可以调用它的 .load_model() 方法来加载 Model

模型

orphism 中的 Model 结构体表示加载和解析后文件的包含内容。这基本上是内存中的状态,以及访问和使用数据的机制。

项目 Crates

orphism 由几个相关的 Crates 组成。顶层 Crates 是这个,它重新导出所有其他子 Crates(除了 orphist),同时提供统一的错误处理。

如果您不需要全部内容,每个支持的数据格式都有一个单独的 Crates,因此您可以只加载您想要执行的操作所需的所需内容。

还有一个主要用于测试和验证的命令行界面。

这是如何制作的?

  • 仔细地,没有使用或引用格式供应商的任何代码或库。
  • ImHex 中来自 MOC3ingbird Exploit (CVE-2023-27566) 的突出显示模式对于理解此格式至关重要。
  • 关于未记录的 JSON 格式的发现过程在此描述:这里
  • 关于未记录的二进制格式的发现过程在此描述:这里

许可证

orphism 可在 MIT 许可证下使用。有关完整文本,请参阅 LICENSE.txt

虽然许可证很短,但它仍然是用律师的语言写的。如果您更喜欢更接地气的话,请考虑以下内容

  • tl;drLegal 在这里提供了一个简单的视觉总结:这里
  • FOSSA 在这里提供了一个更深入的概述:这里

依赖项

~6–16MB
~221K SLoC