101 lines
4.0 KiB
Markdown
101 lines
4.0 KiB
Markdown
# 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
|
|
```
|