MetaFusion/docs/dnacalib.md

101 lines
4.0 KiB
Markdown
Raw Normal View History

2025-01-06 23:33:41 +08:00
# DNACalib
这个库用于对 DNA 文件进行修改。
它使用 C++ 编写,并且也有 Python 包装器。[SWIG](https://www.swig.org/) 库用于生成 Python 的绑定。DNACalib 可以在命令行或 Maya 中使用。
提供了 Windows 和 Linux 的二进制文件。**如果您使用不同的架构和/或平台,您必须自行构建 DNACalib。**
## DNACalib 文件夹结构
- [`DNACalib`](/dnacalib/DNACalib) - 包含 DNACalib 及其依赖项的 C++ 源代码。其中有一个用于读写 DNA 文件的库,以及一些其他实用库。
- [`PyDNACalib`](/dnacalib/PyDNACalib) - 包含用于生成 DNACalib Python 包装器的源代码。
- [`PyDNA`](/dnacalib/PyDNA) - 包含用于生成 DNA 库 Python 包装器的源代码,该库位于包含 C++ 源代码的 DNACalib 文件夹下。
- [`SPyUS`](/dnacalib/SPyUS) - 包含 PyDNACalib 和 PyDNA 都使用的一些通用 SWIG 接口文件。
- [`CMakeModulesExtra`](/dnacalib/CMakeModulesExtra) - 包含在整个项目中使用的一些通用 CMake 函数,包括 C++ 和 Python 包装器。
## 使用
例如,要更改中性关节的旋转值,使用
[`SetNeutralJointRotationsCommand`](/dnacalib/DNACalib/include/dnacalib/commands/SetNeutralJointRotationsCommand.h)。
下面是一个示例,它读取 DNA,将所有中性关节的旋转值更改为 `{1, 2, 3}`,并用这些新值覆写 DNA 文件。
```
// 创建 DNA 读取器
auto inOutStream = dnac::makeScoped<dnac::FileStream>("example.dna",
dnac::FileStream::AccessMode::ReadWrite,
dnac::FileStream::OpenMode::Binary);
auto reader = dnac::makeScoped<dnac::BinaryStreamReader>(inOutStream.get());
reader->read();
// 检查读取 DNA 文件时是否发生错误
if (!dnac::Status::isOk()) {
// 处理读取器错误
}
// 创建 DNACalib 读取器以编辑 DNA
auto dnaReader = dnac::makeScoped<dnac::DNACalibDNAReader>(reader.get());
std::vector<dnac::Vector3> rotations{dnaReader->getJointCount(), {1.0f, 2.0f, 3.0f}};
// 创建命令实例
dnac::SetNeutralJointRotationsCommand cmd{dnac::ConstArrayView<dnac::Vector3>{rotations}};
// 执行命令
cmd.run(dnaReader.get());
// 写入 DNA 文件
auto writer = dnac::makeScoped<dnac::BinaryStreamWriter>(inOutStream.get());
writer->setFrom(dnaReader.get());
writer->write();
// 检查写入 DNA 文件时是否发生错误
if (!dnac::Status::isOk()) {
// 处理写入器错误
}
```
## 示例
### C++
C++ 库使用示例可以在[此处](/dnacalib/DNACalib/examples)找到。
这些包括:
- [链接多个命令](/dnacalib/DNACalib/examples/CommandSequence.cpp)
- [重命名变形](/dnacalib/DNACalib/examples/SingleCommand.cpp)
### Python
从 Python 使用库的示例在[此处](/examples)。
这些包括:
- [展示几个命令](/examples/dnacalib_demo.py)
- [重命名关节](/examples/dnacalib_rename_joint_demo.py)
- [从头开始创建一个小型 DNA](/examples/dna_demo.py)
- [通过提取特定 LOD 从现有 DNA 创建新 DNA](/examples/dnacalib_lod_demo.py)
- [读取二进制 DNA 并以人类可读格式写入](/examples/dna_binary_to_json_demo.py)
- [删除关节](/examples/dnacalib_remove_joint.py)
- [清除变形数据](/examples/dnacalib_clear_blend_shapes.py)
- [从中性网格中减去值](/examples/dnacalib_neutral_mesh_subtract.py)
## 构建
提供了 64 位 Windows 和 Linux 的[预构建二进制文件](/lib)。
如果您使用不同的架构和/或平台,您必须构建 DNACalib。
先决条件:
- [CMake](https://cmake.org/download/) 至少 3.14 版本
- [SWIG](https://www.swig.org/download.html) 至少 4.0.0 版本
- [Python](https://www.python.org/downloads/) 要指定要使用的 python3 的确切版本,请设置 CMake 变量
`PYTHON3_EXACT_VERSION`。例如,要在 Maya 2022 中使用该库,请使用 3.7 版本。对于 Maya 2023,使用 3.9 版本。
使用 CMake 生成构建所需的构建脚本,例如通过从
[`MetaHuman-DNA-Calibration/dnacalib/`](/dnacalib) 目录执行以下命令:
```
mkdir build
cd build
cmake ..
```
然后,要开始构建过程:
```
cmake --build
```