模块化建筑最容易产生一种误判:墙体、楼板和屋顶在建模软件里看起来能拼在一起,就以为它们已经可以进入项目。实际导入 Unity 或 Unreal 后,问题才集中出现——每层逐渐偏移、转角漏缝、楼板重叠,或者模块旋转 90° 后接口无法重合。
这通常不是某一块墙体“做歪了”,而是整套模块没有统一基础单位、网格步长、枢轴、局部坐标轴和连接器规则。AI 生成 3D 模型或多人协作制作的资产尤其容易出现这种情况:外观看起来相似,不代表装配标准一致。
先给结论:不要先靠手动移动补缝,也不要为了省事把全部模块合成一个大模型。更稳妥的顺序是:
- 统一基础单位与网格步长;
- 统一枢轴位置与局部坐标轴;
- 清理缩放、父级和导出变换;
- 为连接器定义类型与方向;
- 分开检查视觉、碰撞和功能接缝;
- 用固定拼装图完成导出回读。
本文使用一个最小案例:3 种墙体、2 种楼板、2 种转角和1种屋顶,搭建一座 3×3、两层的小建筑。先把这套案例拼稳,再扩展复杂城市,问题会更容易定位。
图注:画面展示了城镇从草图、局部建筑到完整场景的概念过程,适合说明模块逐步组成环境的思路;但静态海报不能证明资产具有统一尺寸、正确枢轴、可用连接器、连续碰撞或运行时建造功能。
先定义模块化建筑的“拼装契约”
模块化建筑可以理解为一组遵守同一套尺寸和连接规则的零件。墙体、窗户、楼板和屋顶并不是单独完成就结束了,它们还要在不同位置、不同旋转角度和不同层数下保持一致。
这套共同规则可以称为“拼装契约”,至少应包含:
- 基础单位与网格步长;
- 墙体长度、墙厚和层高;
- 门窗开口的宽度、高度与离地尺寸;
- 楼板厚度和连接边界;
- 枢轴位置与局部坐标轴;
- 连接器类型、朝向与允许连接对象;
- 视觉、碰撞和功能边界;
- 单个接口与连续拼装的允许误差。
没有这份契约,团队只能依赖“看起来差不多”。模块化资产真正需要的是可测量、可重复、可回读。
第一步:统一基础单位与网格步长
现象:单个模块正常,连续复制后逐渐错位
假设三块同类墙体的长度分别是 3.98 米、4 米和 4.02 米。单独摆放时差异并不明显,连续复制 10 次后,误差就会累积成明显的楼层偏移。
网格步长是模块移动和吸附时使用的最小距离。墙体长度、层高、楼板厚度和门窗开口最好是基础网格的整数倍。装饰线脚、雨棚和外立面造型可以适当越界,但连接面不能随意变化。
还要检查厘米与米的换算。模型可能在源软件中按厘米制作,进入引擎后又按米解释;有时软件会自动缩放,让外观看似正常,但枢轴和连接器位置已经发生偏差。
建议先建立一张规范表
- 基础网格:例如 0.25 米或 0.5 米;
- 标准层高:例如 3 米;
- 标准墙厚:例如 0.2 米;
- 墙体长度:基础网格的整数倍;
- 门窗开口:统一宽度、高度与离地尺寸;
- 允许误差:按项目最小拼装单位明确规定。
随后检查每个模块的包围盒尺寸。包围盒可以理解为包住模型的最小规则范围,适合快速发现同类墙体、楼板和屋顶的尺寸是否一致。
第二步:统一枢轴位置与局部坐标轴
现象:平移能对齐,旋转 90° 后接口错开
枢轴是模型移动、旋转和缩放时使用的参考点。如果一块墙体的枢轴位于左下角,另一块位于模型中心,即使尺寸相同,吸附与旋转结果也不会一致。
常见问题包括:
- 同类墙体使用了不同枢轴位置;
- 模块的前轴、上轴定义不一致;
- 枢轴仍留在建模场景原点,距离模型很远;
- 镜像模块长期依赖负缩放;
- 楼板、墙体和屋顶没有各自明确的枢轴规范。
用简单立方体先验证规则
不要一开始就拿复杂建筑排查。先用一个简单立方体测试:
- 平移到相邻网格后,边界是否重合;
- 绕枢轴旋转 90° 后,连接面是否仍在正确位置;
- 复制到第二层后,顶部与底部是否对齐;
- 导出并重新导入后,枢轴与局部轴是否改变。
如果简单立方体也会偏移,问题在变换规范,不在建筑细节。可统一规定墙体枢轴位于左下角连接点、楼板位于指定角点或中心、屋顶位于底部中心,并写入资产制作说明。
第三步:清理缩放、父级与导出变换
现象:源文件尺寸正确,导出后却变大、变小或枢轴漂移
模型在制作过程中可能经历多次缩放、镜像、父子级嵌套和场景移动。视图里的大小正确,不代表本地变换已经干净。
重点检查:
- 是否存在未应用的非均匀缩放;
- 模块是否挂在多层父对象下;
- 导出容器是否额外带有旋转或缩放;
- 镜像模块是否保留负缩放;
- 导出和导入阶段是否重复执行单位换算。
非均匀缩放是指三个方向使用了不同缩放值。它可能暂时不影响外观,却会影响旋转、碰撞、法线、连接器和程序化放置。
推荐处理流程
- 在 DCC 软件中应用模块缩放与旋转;
- 清理不必要的父级和场景偏移;
- 为左右版本输出明确资产,减少对负缩放的依赖;
- 导出后重新导入干净场景;
- 对比尺寸、枢轴、局部轴和连接器位置。
DCC 是 Blender、Maya 等数字内容制作软件的统称。排查时不能只看原始场景,因为很多偏差是在导出或引擎导入阶段产生的。
第四步:连接器与吸附方向必须成对定义
现象:接口位置相同,吸附后方向却相反
连接器不是一个单纯的坐标点。它还应描述“这是什么接口、朝向哪里、可以和谁连接”。
建议每个连接器至少记录:
connector_id:唯一编号;- 类型:外墙、内墙、楼板、门框、屋顶等;
- 位置:相对于模块枢轴的坐标;
- 朝向:接口法线或前进方向;
- 允许连接的另一端类型;
- 是否允许旋转、翻转与重复占用。
如果吸附系统只比较距离,不比较类型和方向,就可能出现门框吸到屋顶、外墙背对背连接等情况。
让失败原因可见
- 绿色:类型与方向匹配,可以吸附;
- 黄色:位置接近,但方向或尺寸不一致;
- 红色:接口类型不允许连接;
- 灰色:接口已被占用或模块层级错误。
吸附成功后,应保存连接双方的编号,而不是只保存最终坐标。这样在替换、拆除和定位问题时,才能知道是哪两个接口建立了关系。
第五步:视觉、碰撞与功能接缝分开检查
画面无缝,不代表角色一定能顺利通过;碰撞连续,也不代表导航和光照正常。模块化建筑至少存在三类边界:
- 视觉边界:是否出现缝隙、重叠面、闪烁或漏光;
- 碰撞边界:角色、车辆和物理物体能否稳定通过;
- 功能边界:导航、光照烘焙、遮挡和交互是否连续。
常见现象可以这样判断:
- 墙面闪烁:优先检查重叠面或近共面;
- 转角漏光:检查视觉边界和光照贴图边界;
- 角色卡在门槛:检查碰撞凸边与高度变化;
- 导航断开:检查可行走区域是否真正连续;
- 楼板穿插:检查视觉、碰撞和光照对象是否重复。
调试时应分别显示渲染网格、碰撞体、导航区域和光照边界,重点查看转角、楼梯口、门槛和楼板边缘。
不要为了挡住视觉缝隙而简单放大碰撞体,也不要让模块大面积重叠。这样可能暂时隐藏漏光,却会引入角色卡顿、物理穿透和替换困难。
第六步:用固定拼装图完成导出回读
建立一座 3×3、两层的固定测试建筑,至少包含:
- 直墙;
- 内转角与外转角;
- 门窗模块;
- 两层楼板;
- 屋顶模块;
- 一个需要旋转 90° 后连接的模块。
分别在三个阶段截图和测量:
- DCC 软件中的原始拼装结果;
- 导出后重新回读的文件;
- Unity 或 Unreal 中的最终结果。
对比总尺寸、接口位置、楼层高度与转角边界。除了查看单个模块,还应连续复制 10 个同类模块,观察误差是否随数量累积。
如果项目面向移动端或低配置设备,还要检查静态合批、碰撞简化、光照烘焙和纹理压缩后,边界是否仍然正确。
最终验收不只是“能不能拼上”,还要确认:能否稳定复制、旋转和替换;碰撞、导航与光照是否连续;累计误差是否在允许范围内;目标设备上是否仍保持一致。
AI生成建筑资产进入项目后,还需人工检查什么?
AI 生成 3D 模型适合快速完成建筑概念、风格探索和初始模块,但不能默认生成结果已经符合模块化生产标准。
进入项目后,至少还要检查:
- 墙体、楼板和屋顶的实际尺寸;
- 连接面的平整度与边界;
- 枢轴与局部坐标轴;
- UV、材质槽和纹理分辨率;
- 碰撞体、导航和光照边界;
- 面数、材质数量与目标设备性能;
- 导入引擎后的复制、旋转、替换和运行结果。
如果建筑需要角色进入,还应特别检查门洞高度、楼梯坡度、碰撞厚度和导航连续性。画面完成度较高的建筑模块,也不一定已经适合实际交互。
在资产流转阶段,可以使用 DCC 导出衔接 作为文件传递入口。但跨软件传递只能衔接工作流,不能自动统一网格、枢轴、连接器和碰撞规则。
可直接收藏的六步验收卡
尺寸与网格
- 基础单位明确,厘米和米没有混用;
- 墙体、楼板、层高和开口尺寸符合网格规则;
- 同类模块包围盒尺寸一致;
- 连接面误差在允许范围内。
枢轴与变换
- 同类模块使用相同枢轴位置;
- 局部坐标轴方向一致;
- 缩放与旋转已经应用;
- 父级偏移、负缩放和导出容器变换已清理。
连接器与吸附
- 每个连接器都有唯一编号;
- 类型、位置、方向和连接对象明确;
- 冲突、占用和方向错误都有可见反馈;
- 连接关系已保存,可供替换和追踪。
接缝与回读
- 转角、楼板边缘和门槛没有视觉缝隙或重叠面;
- 碰撞不会卡住角色;
- 导航、光照与遮挡边界连续;
- 已完成 3×3、两层固定拼装测试;
- DCC、回读文件和目标引擎的测量结果一致;
- 连续复制 10 个模块后没有明显累计偏移;
- 最低目标设备上的边界仍然正确。
模块化建筑拼装错位,通常不是靠最后几次手动微调就能解决的。真正需要统一的是整套资产规则:基础单位、网格步长、枢轴、局部坐标轴、缩放、连接器、碰撞和导出回读。
排查时,先用简单立方体验证变换规范,再用 3×3、两层固定建筑验证完整拼装。先判断问题属于尺寸误差、枢轴偏移、导出变换、连接器方向,还是碰撞和光照边界,不要把不同层次的问题混在一起处理。
你的模块化建筑更常遇到哪种问题:楼层累计偏移、转角漏缝,还是碰撞接缝卡角色?