模块化建筑资产不是简单地把一面墙复制十次而是一整套从建模、拆 UV、对齐网格到引擎验证的工程规范。这次我们来看一套完整的模块化建筑资产制作全流程重点解决资产拼接不严、尺寸不统一、贴图密度不一致、进引擎后接缝明显这些实际生产问题。这篇教程覆盖的是全流程的上半部分核心内容包括模块化设计规范、基础模块建模、拓扑清理、UV 展开、批量导出和场景验证。下半部分再讲贴图细化、引擎内组装、LOD 制作与自动化检查扩展开。教程适合三类读者做游戏场景资产的初级美术准备进入次时代场景流程的学员以及想规范项目资产管线、减少返工的独立开发者或小团队。不需要你已经很熟练但最好能掌握一款 DCC 软件的基本视图操作比如旋转、缩放、挤出、加循环边这些基础功能。下文会用通用叙述方式讲解操作路径以常见软件界面为例如果你用的工具不同按同样的逻辑去找对应命令即可。1. 核心能力速览能力项说明资产类型模块化建筑场景资产墙体、柱、梁、门框、窗框、屋顶、地面核心目标用少量基础模块拼接出大量建筑组合保证接缝一致、比例统一核心流程规划 - 尺寸规范 - 建模 - 拓扑清理 - UV 拆分 - 贴图规范 - 场景组装验证关键指标网格对齐、单位统一、命名规范、纹理密度一致、接线点位置统一适用软件常见 3D 软件Blender / 3ds Max / Maya均可引擎端支持 UE / Unity技术门槛中等需要掌握建模基础、UV 基础、法线概念是否需要编程非必需但使用 Python 脚本可显著提升批量处理效率资产复用性高一套模块可组合出多种建筑变体本篇覆盖流程上篇规划、建模、拓扑、UV、批量处理、场景验证下篇预告贴图细化、引擎内组装、LOD 与自动化检查2. 模块化设计的核心逻辑模块化建筑资产的核心不是模型本身而是模型背后的尺寸系统和拼接规则。很多初学者做模块化容易犯一个错误先按感觉建了一个好看的墙面结果放到另一个模块旁边时尺寸对不上、窗洞位置不一致、转角模块无法衔接最后只能重新做。所以所有模块化制作都必须从规则开始而不是从建模开始。模块化设计要解决三个核心问题第一拼接点一致。所有模块的衔接点必须落在同一个网格精度上常见做法是使用 100cm 或 50cm 的整数基础单位让每个模块的长、宽、高都是这个基础单位的整数倍。这样任意两个模块拼接时不会出现半格错位。第二接口位置统一。门、窗、走廊、柱子、墙体这些模块之间接口的位置必须遵循同一套参考线。例如规定墙体高度统一为 400cm门窗洞口中心线永远是 200cm 或者按 100cm 倍数递增。这样门框模块和墙体模块才能通用。第三贴图密度一致。模块化资产拼在一起时如果一面墙的纹理密度是每 1m 对应 1024px另一面墙是每 2m 对应 1024px场景里一眼就能看出不协调。因此必须提前定好全局纹理密度标准。这三个问题解决了后续建模和导出才真正有意义。2.1 传统建模与模块化建模的差异传统游戏场景建模通常是“单体雕刻”一整栋楼的模型就是一个连续网格建完直接摆进场景好处是细节可以做到位坏处是一旦需要修改建筑布局就要重新调整整体网格。模块化建模则相反它把建筑拆成可重复使用的零件。一栋楼可以拆成墙板、柱子、门窗组件、屋顶组件、地板组件。制作时先做出一套完整的基础库然后在场景里像搭积木一样组合。这样做有几个明显优势修改布局成本低。换一面墙、加一个窗户、调整房间大小都只是替换单个模块不用重新做整栋楼。资源复用率高。一套资产可以在多个建筑里复用节省建模和贴图时间。内存和包体更友好。重复模块可以被引擎实例化减少重复网格数据。2.2 适合模块化的建筑类型模块化并不是所有建筑类型的最优解。适合模块化的建筑通常具备以下特征外形规整平面多为矩形或简单 L 形。重复度高楼层结构相似。需要大量变体类似街区、住宅、厂房、仓库。需要程序化摆放或随机生成。不适合模块化的类型包括异形地标建筑、大量曲线曲面体块、需要无缝雕刻的独体结构。这类建筑更适合传统建模或雕刻流程。做项目之前先判断对象是否适合模块化能省掉很多返工时间。3. 全流程阶段与产出物模块化建筑资产全流程可以拆成七个阶段。每个阶段有明确的输入、操作和产出物避免“边做边乱”的状态。阶段核心任务产出物一、规划确定尺寸系统、网格精度、模块划分方案模块清单、尺寸规范文档、拼接参考图二、基础建模制作墙体、柱、梁、门窗框、屋顶、地面等基础模块基础模块模型文件三、拓扑清理清理重叠面、错误法线、多余边线、穿模结构干净的基础模块模型四、UV 展开按纹理密度规范拆分 UV尽量使用直投影UV 布局文件五、贴图制作制作基础材质、墙面纹理、边角磨损材质贴图文件六、批量处理与导出统一命名、清理场景、批量导出 FBX/OBJ引擎可识别的资产文件七、场景验证在引擎中组装检查接缝、比例、碰撞、LOD可运行场景示例本篇教程完成前五个阶段中的规划、建模、拓扑、UV以及第六阶段的批量处理思路重点放在让读者能自己走通模块库的创建和导出验证部分。4. 前期准备尺寸规范、参考资料与目录结构模块化建筑资产制作的前期准备比动手建模更重要。这个环节直接决定后续所有模块能否顺利拼接。4.1 确认引擎与计量单位进入建模之前先确认资产最终要进入哪个引擎随后在 DCC 软件中统一设置单位。如果目标是虚幻引擎建议使用厘米作为单位静态网格体导入时勾选“厘米”选项。如果目标是 Unity建议使用米作为单位在导入设置中保持缩放系数正确。统一单位是一个不能省的步骤。一个项目里如果同时出现厘米和米的模型导入引擎后会出现巨大尺寸偏差排查起来非常麻烦。4.2 确定网格对齐精度网格对齐精度决定所有模块的拼接位置精度。常见选择有两种100cm 整数倍适合建筑类资产尺寸好计算拼接直观。50cm 半格精度适合需要更细调节的室内资产但也更容易出现对齐失误。建议场景资产尽量使用 100cm 为基准只有门窗、柜体等小型细节模块才使用 50cm 或更低精度。制作每个模块时把所有顶点吸附到网格的整数坐标上不要让模块边缘出现 0.5cm 这种小数偏移。小数偏移在单模块上看不出来一旦批量复制拼接错误会不断累积。4.3 制定模块划分清单开始建模前先做一张模块清单表格。这张表不用写得很复杂但要明确每个模块的用途、尺寸和接口位置。一个基础建筑模块库至少应该包含以下内容模块类型示例尺寸说明直墙模块400cm x 400cm x 20cm基础墙体可继续拆分为带窗、带门转角模块400cm x 400cm x 20cm90 度转角墙两个方向都有接口窗体模块200cm x 200cm x 20cm标准化窗洞可替换不同窗户样式门洞模块200cm x 300cm x 20cm标准化门洞预留门框安装位置立柱模块40cm x 400cm x 40cm承重柱与墙体模块边缘对齐屋面模块400cm x 400cm x 20cm平面屋顶板注意排水坡向可在贴图阶段处理地面模块400cm x 400cm x 20cm基础地面板与墙体底部接口对齐这张清单就是前期规划的落地产物。后续所有建模操作都围绕这份清单执行不要在制作过程中随意加模块避免资产库膨胀。4.4 整理目录结构模块化资产最容易出现的一个问题就是文件命名混乱。一个资产库如果在早期没有目录规范后期导入引擎、修改资源时只能一个一个点开查看。建议目录结构如下Assets/ |-- ModularBuilding/ |-- Meshes/ |-- Wall/ |-- Column/ |-- Door/ |-- Window/ |-- Roof/ |-- Floor/ |-- Textures/ |-- Wall/ |-- Column/ |-- Common/ |-- Materials/ |-- Blueprints/ |-- AssemblyDemo/所有模型文件的命名统一采用“模块类别_模块名称_尺寸_版本”格式例如“Wall_Straight_400x400_V01”。不要使用“新建模型”“最终版”“修复版”这类命名后期会彻底找不到资产。5. 基础模块建模实操进入建模环节。下面以一个基础墙体模块和立柱模块为例展示模块化资产的标准建模流程。5.1 墙体模块建模第一步先确定尺寸。以 400cm x 400cm x 20cm 的直墙为例在软件中创建平面或立方体将顶点尺寸精确调整到这个数值。第二步把墙体切换到线框模式确认四个端点都吸附在整数网格上。这一步非常关键有小数坐标的墙体逐一修正。第三步开始制作墙体的厚度。把平面挤出 20cm然后在侧面加循环边让墙体有窗台和顶部收口的层次。如果是简单墙体也可以直接使用立方体但建议保留顶部和底部边线方便后续拼接时做细节。第四步清理多余结构。墙体模块不需要太多内部结构更不需要给每个面都添加细分。面数越少引擎加载压力越小。墙体模块的最终形态应该是一个带厚度的长方体边缘线材整齐无多余三角面左右两侧边缘与相邻模块的衔接面完全重合。5.2 窗洞与门洞模块窗洞和门洞模块是墙体模块的变体。在基础墙体上切割出洞口先用顶点吸附功能把洞口边缘精确对齐到 50cm 或 100cm 的网格倍率。使用切割工具或循环边工具生成窗洞轮廓。删除洞口内部的面保留四周厚度。在洞口边缘添加一圈边线作为后续窗框、门框模块的安装参考。制作窗洞模块时要给洞口的宽度和高度设置一个固定标准。比如规定所有窗洞宽 200cm、高 150cm、窗台高 100cm那么后续所有窗户模块都按照这个尺寸制作。这样就能保证窗户模块可以装进所有窗洞不用每面墙单独适配。5.3 立柱模块建模立柱模块常见于建筑转角、门廊和楼体支撑位置。制作时从立方体开始调整尺寸为 40cm x 400cm x 40cm然后根据实际设计添加装饰线脚。立柱模块需要注意顶部和底部的接口位置。如果墙体高度是 400cm那么立柱整体高度也应该精确控制在 400cm顶部和底部不能多出 1cm 的余量。否则拼接时会出现柱子比墙高一截的问题。5.4 公共接口设计要点模块化资产彼此之间的接口是最容易出问题的地方。建立一套统一的接口方案可以极大降低后续拼接成本所有模块的拼接面必须是平面避免凹凸交错结构。拼接面的边缘线要重合。两个相邻模块的侧边必须使用完全一致的坐标范围。避免在拼接面边缘留出小斜面或导角否则拼接时会出现明显的三角缝隙。当需要嵌套结构时把嵌套部分设计成独立模块不要和主模块挤在一起。把接口当成一个固定零件来设计。每个模块在拼接面上的轮廓必须与其他模块的对应面完全匹配。不要出现“这里差一点靠缩放硬拉过去”的情况。缩放工具是模块化资产制作中的最大隐患它会在不知不觉中破坏坐标精度。6. 模型拓扑与布线清理模块化资产不需要像角色模型一样追求细密的四边形拓扑但也必须满足几个基础要求不能有重叠面、不能有多余的孤立点、不能在需要拼接的位置出现不必要的三角面。6.1 清理重叠面重叠面通常出现在模型复制和布尔切割之后。两个完全重合的面会造成渲染闪烁而且在光照下图面上有奇怪的黑斑。检查方式是进入 X-Ray 模式或透视模式旋转视角观察模型内部。如果发现重叠面直接删除其中一个保留完整闭合的体积结构。6.2 清理多余边线有些建模操作会产生完全没必要存在的边线例如在平面中间出现的孤立边、重复的循环边、没有实际造型作用的分割线。多余边线会增加面数也会在后续做 LOD 时带来不必要的麻烦。在清理边线时重点是保证模型视觉轮廓完整而不是追求面数越低越好。6.3 检查法线方向所有模块的外表面法线必须朝外。如果某个面显示为黑面或者半透明说明法线反转了需要选中该面并重新计算法线方向。在导出 FBX 前对整个模型执行一次“统一法线方向”操作。法线方向的检查很容易被忽略但它直接影响引擎中的光照效果。拼好的建筑里如果有一面墙的法线反了光射到墙面上会出现暗部错误很难看也很难排查。6.4 检查坐标归零与组合轴心每个模块在导出前都要把原点位置设置到合适的位置。建议把模块的原点放到左下角或底部中心这样在引擎中摆放时可以通过数值精确控制位置而不需要手动拖动。操作方式选中整个网格。在建模软件中执行“原点到几何中心”或“原点到 3D 游标”。如果模块用于拼接地板把原点设置到模块底部中点比较合适。如果模块用于墙体拼接把原点设置到底部左侧角点更有利于对齐。原点位置没有绝对标准但必须和团队内其他人统一。随意设置原点的结果就是同一个模块不同人导出的位置差异很大无法直接进行拼接。7. UV 展开与贴图规范模块化建筑资产的 UV 展开重点不是把 UV 展开得好看而是贴图密度统一。7.1 理解纹理密度纹理密度英文常用 Texel Density指贴图中每个像素对应模型表面多少厘米。如果一面墙 400cm 用了一张 1024px 的贴图和另一面墙 200cm 也用一张 1024px 贴图拼接在一起时前者的纹理细节会更模糊。模块化资产制作中统一纹理密度的标准做法是确定一个全局值比如 2048px 对应 400cm。所有墙面模块按这个密度进行 UV 展开。同尺寸模块可以共用 UV 布局和贴图。实际操作中可以在建模软件里安装 Texel Density 检查插件或者在 UV 编辑器里用参考网格肉眼对比各模块的 UV 密度是否一致。7.2 UV 展开的基本思路对于建筑模块UV 展开不需要像角色模型那样追求低拉伸重点是把每个面展开成接近真实比例的矩形。以墙体模块为例前后面展开为一个大矩形对应墙面贴图。顶底面单独展开可以使用与墙面不同的通用材质。左右拼接面展开为一个窄条不需要给精细贴图但要避免大面积 UV 重叠。展开后检查 UV 是否重叠。重叠的 UV 会导致贴图错乱。必要时要将 UV 岛拆开确保每个面都有独立的 UV 空间。7.3 贴图通道规划如果模块需要制作复杂材质比如墙面、屋顶瓦片、地面砖建议规划好贴图通道BaseColor基础颜色贴图。Normal法线贴图表现表面凹凸。Roughness粗糙度贴图控制高光。Metallic金属度贴图建筑资产大多为 0。AO环境光遮蔽贴图用于增强接触阴影。模块化建筑资产的贴图通道不需要特别多一套 2K 贴图通常就够用。更大的贴图只会在贴图数量增多时明显拖慢引擎加载速度且视觉提升有限。7.4 共用贴图思路模块化资产的优势之一是可以共用贴图。所有墙面模块使用同一套 BaseColor 和 Normal这样整个建筑场景只需要很少的贴图资源。操作上把所有墙面的 UV 展开到同一张贴图布局中。使用平铺类贴图让墙体纹理可以无缝平铺。在贴图里用遮罩或顶点色区分不同墙面模块的变化。这样做的结果是一个建筑街区可能只使用 2-3 套材质贴图但墙面的观感依然丰富。这也是模块化资产用于大型场景时的核心优势。8. 模块化脚本与批量处理当模块库的数量增加到几十个甚至上百个时手动操作会变成最大的瓶颈。这里给出两个常用的 Python 脚本示例用于批量重命名和批量导出。脚本语言以 Blender Python API 为例如果你使用其他 DCC 软件按同样的逻辑替换 API 即可。8.1 批量清理命名示例模块导出前统一前缀和后缀可以避免引擎中资源类别混乱。import bpy # 为选中对象添加前缀统一命名规范 prefix SM_ModularWall_ for obj in bpy.context.selected_objects: if obj.type MESH: obj.name prefix obj.name obj.data.name prefix obj.data.name print(重命名完成)脚本执行前先在场景中选中所有需要清理的模块然后运行脚本。执行后检查命名是否符合规范。8.2 批量导出 FBX 示例导出是模块化资产流程中比较耗时的一步。按目录批量导出可以避免手动逐个选择的繁琐操作。import bpy import os # 设置导出目录按项目实际情况修改 export_dir D:/Project/ModularBuilding/Exports/ if not os.path.exists(export_dir): os.makedirs(export_dir) # 遍历场景中的所有网格对象按名称导出为 FBX for obj in bpy.data.objects: if obj.type MESH: # 选中当前对象 bpy.ops.object.select_all(actionDESELECT) obj.select_set(True) bpy.context.view_layer.objects.active obj # 构造导出文件名 export_path os.path.join(export_dir, obj.name .fbx) # 导出 FBX缩放保持 1.0 bpy.ops.export_scene.fbx( filepathexport_path, use_selectionTrue, apply_scale_optionsFBX_SCALE_ALL, axis_forward-Z, axis_upY ) print(批量导出完成)注意这里的脚本是通用模板实际使用时需要根据你使用的软件版本调整导出参数。导出完成后随机打开几个 FBX 文件确认模型尺寸、坐标轴、材质引用是否正确。8.3 自动化检查方向批量检查是减少返工的有效方式。可以写一个小工具或脚本自动检查以下内容模型原点是否在预期位置。是否有顶点坐标出现非整数偏移。面数是否超过目标范围。是否包含多余的材质通道。UV 密度是否在允许区间。这些检查并不是必须做成一整套系统哪怕只是每周写几个临时脚本也会比纯手工检查高效很多。9. 模块组装与场景验证资产做完并导出后需要回到引擎中做一次完整的组装验证。这一步能发现大量纯建模阶段看不到的问题。9.1 搭建最小验证场景建立一个空白场景导入本次制作的墙体、柱子、门窗框、地面和屋顶模块。按规划文档把模块拼接成一间 800cm x 800cm 的房间。重点观察以下内容模块之间是否有明显缝隙。转角处是否符合预期。门窗框是否能恰好卡入洞口。墙面材质是否统一。模块高度是否一致。如果所有模块都能正常拼装说明基础尺寸和接口标准有效。9.2 验证替换能力模块化资产的核心价值是可替换性。在验证场景中尝试以下操作把直墙模块替换成带窗洞模块。把普通窗户模块替换成另一种样式。把立柱模块替换成带装饰线脚的立柱。调整地板模块数量从 400cm 扩到 800cm检查拼接是否依然准确。替换过程中如果新模块与周围模块出现高度的 1cm 偏差或者宽度偏差回到 DCC 软件中修正不要通过缩放新模块来硬凑。9.3 验证光照表现在引擎中加入平行光检查模块接缝处的阴影和 AO 表现。如果接缝处出现暗线或漏光排查原因是两个模块没有完全贴合还是法线方向异常。把光照角度调成低角度接近日落效果观察墙面细节。低角度光会放大模型表面不平整的问题比如接缝、微小的反向法线、UV 拉伸。这是验证模型细节是否合格的有效手段。9.4 碰撞体与物理表现如果资产用于游戏场景需要为模块添加碰撞体。常见做法是使用简化盒体碰撞复杂度低、性能好。对于墙体模块直接添加盒体碰撞尺寸与墙体一致即可。对于窗洞、门洞模块碰撞体要保留洞口轮廓让玩家能通过而不是被一整面墙挡住。在引擎中测试玩家角色是否能正确通过门洞是否会被墙体边缘卡住。碰撞体细节建议在完成模块验证后统一处理提前处理会增加修改成本。10. 常见问题与排查方法模块化建筑资产制作中很多问题在流程初期就能规避。下面列出高频问题及排查思路。问题现象可能原因排查方式解决方案两个模块拼接后有 0.1cm-1cm 缝隙顶点坐标未吸附到整数网格检查模块边缘顶点坐标将边缘顶点重新吸附到网格模块之间大小不一致建模时使用了缩放工具对比建模数据和实际缩放值应用缩放恢复实际尺寸贴图密度不一致每个模块单独展开 UV没有统一规格用纹理密度工具对比各模块重新按全局标准展开 UV墙面法线显示黑色法线方向反转检查模型面朝向统一法线方向后导出窗洞模块无法正确安装在墙体中洞口尺寸与窗体尺寸不一致对比窗体尺寸和洞口尺寸统一门洞/窗洞标准尺寸导入引擎后模块位置偏移原点位置或轴心未统一检查导入设置和原点位置统一设置原点调整导入坐标轴模块拼接后光照出现明显接缝模块之间存在微小的重叠或间隙调整光照角度观察修复模块边界确保完全贴合批量导出后文件缺失脚本路径错误或对象未选中检查导出路径和选择状态调整脚本确保路径和对象选择正确这些问题的共同特点是早期不检查后期很难发现是哪个模块出了问题。建议每天结束制作前花 10 分钟检查当天制作的模块是否满足坐标、命名、UV 密度三项基本规范。11. 规范落地与团队协作建议模块化建筑资产不是一个人的工作习惯问题它需要整个团队遵循同一套规范。建议把制作规范写成一个简短的文档内容包括单位约定厘米还是米。网格精度50cm 还是 100cm。尺寸标准墙体高度、门窗洞口尺寸。命名规则前缀、模块名、尺寸、版本。UV 密度2048px 对应多少厘米。导出设置FBX 坐标轴、缩放、平滑组。原点规则原点放模块底部中心还是左下角。文档不需要很长但每个人开工前都读一遍。团队里只要有一个模块没按规范做整个资产库的拼接就会出问题。文档保存在项目共享盘或代码仓库中方便随时查阅。从工程化角度看模块化资产库的好坏最终取决于规范执行是否一致而不是单模块的面数或贴图精细度。12. 总结与下一步模块化建筑资产制作的核心流程可以概括为一句话先定尺寸再建模然后清理拓扑、统一 UV 密度最后批量导出并回到引擎验证。每一步看起来都不难难的是每一步都遵守同一套规范。本次教程重点完成了流程前期的内容模块划分、尺寸规范、基础建模、拓扑清理、UV 展开、批量导出和场景验证。如果你严格按这套流程做完一个 800cm 见方的房间你会明显感觉到模块化资产在替换和复用上比传统单体建模高效得多。最容易踩的坑有三个第一前期不做模块清单直接建模导致模块划分不完整第二建模时使用缩放工具导致模块实际尺寸和显示尺寸不一致第三UV 展开时没有统一纹理密度导致拼接后墙面观感不统一。下篇教程可以继续深入这些方向墙面贴图细节制作、法线贴图烘焙、引擎内模块拼接蓝图、LOD 生成与性能优化、以及模块化自动化检查工具。如果你按本文走通了模块库的基础流程下篇直接在此基础上做贴图和引擎适配会顺畅很多。建议先把基础模块库建起来再进入下一步。