# 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("example.dna", dnac::FileStream::AccessMode::ReadWrite, dnac::FileStream::OpenMode::Binary); auto reader = dnac::makeScoped(inOutStream.get()); reader->read(); // 检查读取 DNA 文件时是否发生错误 if (!dnac::Status::isOk()) { // 处理读取器错误 } // 创建 DNACalib 读取器以编辑 DNA auto dnaReader = dnac::makeScoped(reader.get()); std::vector rotations{dnaReader->getJointCount(), {1.0f, 2.0f, 3.0f}}; // 创建命令实例 dnac::SetNeutralJointRotationsCommand cmd{dnac::ConstArrayView{rotations}}; // 执行命令 cmd.run(dnaReader.get()); // 写入 DNA 文件 auto writer = dnac::makeScoped(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 ```