# 导入导出Virtools文档

!!! warning "这是实验性内容"
    原生导入导出Virtools文档是BBP插件的试验性内容，它可能存在许多问题，请参阅[报告问题](./report-bugs.md)章节来了解更多。当遇到问题时，请及时汇报。BBP插件的作者不对因BBP插件问题导致的任何后果负责。

## 导入Virtools文档

点击`File - Import - Virtools File`可以导入Virtools文档。导入支持CMO，VMO，NMO文件。点击后会弹出文件打开界面，并在侧边栏展示导入设置。首先你需要选择导入的Virtools文档，然后在侧边栏配置导入设置，配置完导入设置后即可点击导入开始导入，并等待Blender下方提示导入完成即可。

### 冲突解决选项

Conflict Options（冲突解决选项）章节指示了当导入器遇到物体名称重复的情况时，该如何处理。分为4个等级，分别针对Object（物体），Mesh（网格），Material（材质），Texture（贴图）。处理方式则有2种：Rename（重命名）和Use Current（使用当前）。选择重命名后，当遇到重复名称时，将会自动为其添加名称后缀使其名称唯一化。而选择使用当前，则会忽略从文件中导入此项，转而使用Blender文档中已经存在的同名的项目。

!!! info "与Virtools冲突解决的不同"
    相比较于在Virtools的冲突解决对话框，BBP插件提供的冲突解决选项不支持替换功能，同时其粒度也不支持精细到单个实例，只能针对一整个类型进行设定。因此你无法单独为每一个冲突的实例设置不同的冲突解决方案。但目前这种设置已经能满足绝大对数的使用场景了。

冲突解决选项章节里的选项的默认值是通常导入时会选择的解决方案。当然针对特殊导入情况需要特殊设置，例如正在从外部导入一个从原版中导出的机关模型，则可能连材质选项都可以选择使用当前，而无需复制一份。正确使用冲突解决选项是制图经验所给予的，本手册不会对此进行教学。

### Virtools参数

众所周知，Virtools使用基于系统的多字节字符编码来处理文档，因而很容易出现所谓乱码问题。Blender本身不会出现乱码问题，然而如果我们不能以正确的编码读取Virtools文档，则当Virtools文档被导入Blender时，其中存储的字符仍然可能会呈现乱码状态。Virtools Params（Virtools参数）章节的Encodings（编码）属性用于指定读取Virtools文档的编码。可以指定多个编码，多个编码之间用`;`（分号）分隔。下面列出一些常用的编码：

* 1252（Windows下）：Ballance所用的西欧编码
* 936（Windows下）：中文Windows系统默认编码
* CP1252（非Windows下）：Ballance所用的西欧编码
* CP936（非Windows下）：中文默认编码

编码属性非常重要，如果设置了错误的编码，导入Blender的各类物体的名称会出现不可认知的情况

!!! warning "编码是一个平台相关的设定"
    根据BBP的Virtools文档导入模块使用的底层库LibCmo的实现，编码属性是一个平台相关的设定。在Windows下，这里需要填写的是[Windows代码页](https://learn.microsoft.com/en-us/windows/win32/intl/code-page-identifiers)数字。而在其它操作系统下，LibCmo使用iconv进行字符编码解码，因此需要使用合法的[iconv编码标识符](https://www.gnu.org/software/libiconv/)。

## 导出Virtools文档

点击`File - Export - Virtools File`可以导出Virtools文档。点击后会弹出文件打开界面，并在侧边栏展示导出设置。首先你需要选择导出的Virtools文档的位置，然后在侧边栏配置导出设置，配置完导出设置后即可点击导出开始导出，并等待Blender下方提示导出完成即可。

### 导出目标

Export Target（导出目标）章节用于决定你需要将哪写物体导出到Virtools文档中。你可以选择导出一个集合或一个物体，并在下面选择对应的集合或物体。需要注意的是，选择集合的时候，会将内部集合中的物体也一起导出，即支持嵌套集合的导出。

### Virtools参数

Virtools Params（Virtools参数）章节与导入Virtools文档中的类似。Encodings（编码）属性决定了导出Virtools文档时所用的编码。

Global Texture Save Option（全局贴图保存选项）决定了那些设置了Use Global（使用全局设定）的贴图的真实保存方式。通常而言，设置为Raw Data（原始数据）则可以100%保证保存的Virtools文档可以包含正确贴图，但是其体积也可能会变大，设置为External（外部数据）则可以尽可能减少文件大小，但可能会出现导出的文档找不到贴图文件的问题。我们建议你在进行材质设置时就对每个材质单独指定应该如何保存，而不是依赖全局选项来设置。这个选项是给那些依赖全局贴图保存选项的旧地图的再编辑来使用的。还需要注意的是，尽管这个选项里有Use Global选项，但请 **不要** 选择，否则会导致错误，因为显然你不能让一个全局选项再去使用全局选项的设置。

Use Compress（使用压缩）属性指定保存的文档是否压缩存储。压缩可以显著减少文档体积，且在现代计算机平台上，压缩所造成的性能损失几乎可以忽略不计。当选择使用压缩后，一个额外的Compress Level（压缩等级）属性将会显示，用于指定压缩的级别，数值越高，压缩率越大，文件越小。

