
模块化建筑资产并不是新概念但很多人在做场景时会发现单个模型做得再精致一旦放进大地图就会暴露出复用难、拼接错位、命名混乱、性能吃紧等一系列问题。本文从模块化设计的基础概念讲起用一套可执行的全流程带你拆解“模块化建筑资产”是如何从零做出来的。内容偏实战适合场景建模初学者、想要提升地编效率的开发者以及准备进入数字孪生或游戏场景行业的设计师。1. 模块化建筑资产是什么为什么要掌握1.1 从“一栋楼”到“一套积木”传统的建筑建模方式往往是“一栋楼一个模型”。设计师把墙体、窗户、门、屋顶全部合并成一个完整的网格体然后直接放进场景。这种方式的优点是单次制作简单缺点是场景一旦需要变化比如把一栋楼拉长、增高、换个朝向就需要重新建模或者大量手动修改成本非常高。模块化建筑资产的核心思路是把建筑拆解成一系列标准化部件比如墙板、地板、柱子、屋顶、门框、窗框、楼梯等。每个部件都是一个独立模型通过统一的设计规则进行组合最终像“搭积木”一样拼出不同的建筑形态。用一句话概括模块化资产的目标是用有限的标准件组合出无限的变化同时让每个标准件都可以被重复使用。1.2 模块化资产的应用场景模块化建筑资产的适用场景非常广这里列举几个最常见的类型。游戏场景地编开放世界和沙盒游戏尤其依赖模块化资产因为场景面积大、建筑数量多不可能每个建筑都单独建模。程序化生成配合蓝图或 Houdini 等程序化工具模块化部件可以自动组合成建筑快速生成整条街道甚至城市。建筑可视化方案快速推敲阶段需要频繁修改体块组合模块化模型能大幅缩短修改周期。数字孪生与仿真园区、工厂、仓库等建筑往往外形类似模块化资产很适合批量搭建和后续替换。在这些场景中模块化资产不只是“几个模型”它实际上是一套完整的资源生产规范和工程协作方案。1.3 这套教程你会上手什么为了不让内容过于空泛本地上篇会用一个贯穿始终的案例制作一套“模块化厂房建筑资产”。厂房结构简单、尺寸规整、模块边界清晰非常适合作为入门案例。上篇会重点解决三个问题理解模块化的核心设计与尺寸规则。在三维软件中制作一套完整的可复用模块。完成资产命名、UV 规划和导出准备。贴图绘制、材质制作以及导入游戏引擎后的验证会放在下篇继续展开。如果目前还没有完整的模型制作经验建议先跟着本文走完一遍白模流程再进入贴图与引擎阶段会顺很多。2. 环境准备与工具选择2.1 DCC 建模软件怎么选模块化建筑资产可以在绝大多数 DCCDigital Content Creation数字内容创作软件中完成常见的包括3ds Max老牌硬表面建模工具行业插件生态丰富。Blender免费开源内置大量建模、UV、烘焙工具版本更新快。Maya角色和动画能力突出部分影视流程也会用它做硬表面。Houdini程序化生成优势明显适合大规模自动化产出。对于新手来说推荐从 Blender 入手原因很简单免费、跨平台、教程多且内置的 UV 编辑和硬表面建模工具已经足够完成整套模块化资产流程。文章示例会以 Blender 3.x 版本为参考但核心思路同样适用于 3ds Max 和 Maya真正重要的是设计规则而不是某个软件的操作。如果团队项目已经有固定的 DCC 工具链请以团队的工作流为准。这里不建议为了“统一教程”强行更换软件熟练度才是效率的关键。2.2 工作单位与轴向统一模块化资产最容易出的问题是在不同软件之间转换时尺寸错乱。一根 4 米高的柱子导入引擎后变成 4 厘米这种问题非常常见。制作前先确认三件事建模软件的单位设置。目标引擎的单位设置。坐标轴方向。主流软件和引擎的默认单位如下工具默认单位坐标轴Blender米MetersZ 轴向上3ds Max可以设置为米、厘米、毫米Z 轴向上Maya厘米CentimetersY 轴向上通常需要转换Unreal Engine厘米CentimetersZ 轴向上Unity米MetersZ 轴向上如果你在 Blender 中以“米”为单位建模导出 FBX 后导入 UE需要确认导入设置是否按厘米缩放如果导入 Unity以米为单位则通常是直接对应的。实际操作中最好在项目开始前就定义一张单位转换对照表并在命名或文档中写清楚。建议项目统一使用“米”作为建模单位因为实时引擎中最常见的建筑尺度都是基于米来设计的。2.3 文件结构与命名规范模块化资产一旦多了命名就是工程问题。没有统一的命名规范后续合入场景时会出现同名覆盖、路径混杂、无法批量处理等情况。推荐目录结构如下Assets/ └── ModularFactory/ ├── Meshes/ │ ├── SM_Wall/ │ ├── SM_Column/ │ ├── SM_Floor/ │ └── SM_Roof/ ├── Materials/ │ ├── M_Wall/ │ └── M_Trim/ ├── Textures/ │ ├── T_Wall_BaseColor.png │ ├── T_Wall_Normal.png │ └── T_Wall_Roughness.png ├── Blueprints/ └── Maps/命名规则可以按“类型_模块化项目_部件_尺寸_变体”的格式来写例如SM_ModularWall_2x4_A SM_ModularWall_2x2_B SM_ModularColumn_0.5x4 SM_ModularFloor_4x4_A其中SM表示 Static Mesh静态网格体M表示 Material材质T表示 Texture贴图。不同团队前缀习惯不同但一定要保持统一。2.4 常用插件与辅助工具这些不是必须的但能显著提高效率。UV 展开工具RizomUV、UVPackmaster适合大量资产的 UV 批量优化。硬表面插件Blender 内置的 Hard Ops 插件、3ds Max 的切割工具适合快速制作机械结构。批量处理脚本用 Python 批量重命名、设置轴心点、导出资产。桥接插件UE 和 Blender 之间的 Send to Unreal适合引擎验证。需要注意的是插件版本和软件版本强相关安装前一定确认兼容性否则容易让整个工作流崩溃。3. 模块化设计核心原则3.1 网格对齐与模数模块化的基础是“模数”也就是所有部件共同遵循的标准尺寸。通常从一个小尺寸基数开始比如 1 米然后所有尺寸都是它的整数倍。以一套厂房资产为例常见尺寸如下模块类型常用尺寸设计说明外墙板2m x 4m宽度 2 米高度 4 米厚度 0.2 米立柱0.5m x 0.5m x 4m与墙板高度对齐地板4m x 4m以 4 米网格为一个标准单元屋顶4m x 4m可以做成平顶或坡顶变体有了模数后所有部件都能在统一的网格上对齐。在 Blender 中建议开启“吸附到增量”或“吸附到顶点”保证模块位置精确落在整数值上避免出现 0.001 米的微小错位。在项目初期就写一份简单的尺寸参考表并同步给团队可以避免后期大量返工。3.2 接口与缝隙设计模块化资产拼接时两个模块之间通常会出现“接缝”。设计接缝时要考虑两件事物理上不能穿插。视觉上不能漏光或出现明显黑缝。接口处需要预留一定间隙但又不能太大。常见做法是让接口处稍微重叠或者通过贴图边缘的暗部来模拟缝隙。结构上则要尽量避免两个模块完全严格贴合因为实时渲染中浮点精度会导致闪面。对于墙板模型边缘可以做一个半厘米左右的倒角这样在视觉上能减少硬边的锋利感同时也能让后续法线贴图更自然。3.3 对称与复用模块化资产中的部件应该尽量对称这样允许开发者通过镜像操作重复使用。例如墙板如果左侧有一个窗户右侧是完全相同的窗户那这个墙板可以被左右镜像成两种形态。但如果不小心在墙板角落加了一个不对称的装饰条镜像后就会出现拼接问题。设计时可以把非对称元素独立成单独的小模块而不是并进大墙板里。比如配电箱、消防栓、空调外机都应该独立建模方便单独摆放和复用。3.4 LOD 与碰撞体规划很多人在模型制作完成后的最后一步才开始思考 LODLevel of Detail多级细节和碰撞体这其实有点晚。在实时项目中远处的建筑不需要完整的高模细节所以一套资产通常需要两组网格高模或中模用于近距离观察。低模 LOD用于远距离显示顶点数尽量少。模块化建筑资产中墙板、地板这类大面积部件LOD 优化空间非常大。一个 2m x 4m 的墙板高模可能有几千个三角面LOD1 阶段可以压缩到几百个三角面只要保证轮廓不变形即可。碰撞体则建议使用简单的 Box 或者凸包而不是直接使用高模网格。因为复杂碰撞体会带来明显的物理性能开销。4. 实战制作一套模块化厂房资产上下面进入核心实操流程。我们会用 Blender 3.x 制作一套可以重复拼接的厂房基础模块。整个案例会分成五个阶段建立文档、制作墙板、制作柱体、制作地板和屋顶、统一轴心并验证拼接。4.1 创建项目并设置工作单位打开 Blender 后建议先进入“场景属性”面板把单位系统设置为“米”。如果默认单位已经是米也要确认一下比例是否为 1.000。单位设置路径场景属性 - 单位 - 长度米Meters场景属性 - 单位 - 角度度Degrees接着开启吸附功能。在 3D 视口顶部找到磁铁图标开启“增量吸附”并设置吸附增量值为 0.25 米或 0.1 米。这样移动物体时每次移动都会对齐到网格。为了方便后续操作再新建一个文件夹结构用于存放 Blender 工程文件D:/ModularFactory/ ├── source/ ├── export/ └── textures/source保存源文件export保存 FBX 导出文件textures保存贴图。项目开始前花一分钟建立目录会避免后期文件乱到找不到。4.2 制作外墙板模块墙板是整个模块化厂房最核心的部件。在本案例中墙板的基础尺寸为 2m x 4m x 0.2m。在 Blender 中新建一个 Cube在右侧属性面板中设置尺寸为X 轴2.0 米Y 轴0.2 米Z 轴4.0 米这里要注意的是墙板厚度放在 Y 轴还是 X 轴取决于你希望墙板沿哪个方向拼接。通常我们会让墙板的主要厚度方向放在 Y 轴这样沿 X 轴平行排列时比较直观。接下来进入编辑模式Tab 键对该 Cube 做细节处理。下面是一个简化的墙板结构制作思路选中前后两个大面按快捷键I插入面Inset插入宽度约 0.15 米形成边框结构。选中中央区域的面按快捷键E向内挤出Extrude深度约 0.03 米形成凹陷的墙芯。对边框边缘执行倒角操作选中要倒角的边按Ctrl B调整段数和宽度。这样得到的就是一个带边框凹凸结构的墙板白模。现在只需要做白模不需要把所有砖缝都刻出来砖缝留给后面的贴图去表现。这里有一个关键点模型细节不要全部靠建模也不要全部靠贴图。大结构用建模细节纹理用贴图这是模块化资产性能优化的核心思路。保存文件后把名称改为SM_ModularWall_2x4_A4.3 制作立柱模块立柱的作用是在转角处提供支撑同时也用于墙板之间的连接过渡。典型尺寸为 0.5m x 0.5m x 4m。在 Blender 中新建一个 Cube设置尺寸如下X 轴0.5 米Y 轴0.5 米Z 轴4.0 米立柱的结构可以做得更简单。不需要复杂的切割只要在顶部和底部加一点细节变化即可。思路在上下两个端面插入一个 0.02 米宽的环线再轻微倒角就能模拟柱子顶底的收边。立柱的轴心点需要特别注意。将轴心设置到底部中心也就是世界坐标 (0, 0, 0) 作为柱子的底部中心。这样在场景中摆放时只需要设置一个位置坐标柱子就能精确落到地面上不需要额外做加减法。设置轴心点的方式将 3D 游标移到世界原点Shift S- 游标到世界原点。选中柱子模型。右键 - 设置原点 - 原点到 3D 游标。如果没有这一步导入引擎后每根柱子都要手动对齐地面很容易出现模型悬浮或者陷入地面的问题。4.4 制作地板模块地板模块建议做成 4m x 4m 的规格与四个墙板组合的空间正好匹配。在 Blender 中新建 Cube尺寸设置为X 轴4.0 米Y 轴4.0 米Z 轴0.1 米地板表面通常不需要太复杂的几何细节可以用一个环线和一个倒角来模拟边缘转折。为了后续贴图方便地板的 UV 应该尽量保持整个顶面对应贴图空间的大面积不要让 UV 被切割得太碎。在模块化厂房案例中地板四周可以考虑预留 0.01 米左右的“收口边”这样拼接时地板和地板之间不会出现明显的缝隙闪烁。保存为SM_ModularFloor_4x4_A4.5 制作屋顶与基础件屋顶模块可以做成平顶或者带一点坡度。这里为了演示我们做平屋顶规格与地板一致4m x 4m。屋顶的厚度比地板稍厚可以设为 0.15 米。顶部边缘可以向外延伸 0.1 米形成屋檐。屋檐的延伸可以单独作为一个小模块也可以并入屋顶模块。推荐先并入屋顶模型因为结构简单后续有需要再拆分。除此之外还需要一个基础件地基。地基的规格可以与墙板宽度对应例如 2m x 0.3m x 0.5m用于墙板底部的收边。基础件通常不是承重结构但它能有效遮挡墙板底部与地面之间的接缝视觉上非常重要。4.6 通过吸附验证模块拼接模型做完之后不要急着导出先在 Blender 里做一次拼接测试。操作思路复制地板模块排列成 2x2 的地面。在地板边缘放置第一块墙板。通过临时复制和旋转快速拼出四周围墙。在转角处放置立柱。检查每个模块之间是否有穿插、缝隙、漏光问题。吸附设置建议选择“顶点吸附”这样当墙板边缘靠近地板边缘时它会自动吸附到对应顶点定位准确。测试完成后隐藏测试用的临时物体只保留原始模块资产。# 文件路径D:/ModularFactory/source/factory_modules.blend # 这段是 Blender Python 示例用于批量重命名选中模块 import bpy for obj in bpy.context.selected_objects: if obj.type MESH: obj.name obj.name.replace(Cube, SM_Modular)如果你有大量模块需要整理可以在 Blender 的 Scripting 面板中运行这样的脚本避免手工改几十个名字。5. 从白模到可复用资产UV 规划与导出设置5.1 高模、低模与法线贴图思路模块化建筑资产有两种常见细节处理路线直接用手绘或 PBR 平铺贴图表现细节不烘焙法线模型本身保持较低面数。制作高模烘焙法线贴图到低模上用法线表现细节适合近景需要丰富结构的场景。对厂房这类场景来说路线 1 往往更实用因为墙板的重复度高平铺纹理可以大幅减少贴图数量。如果某些部位需要更强立体感比如腐蚀的金属板、铆钉、螺栓可以在这些局部部件上单独烘焙法线。上篇先不深入烘焙只做 UV 展开和贴图空间规划。5.2 UV 展开与统一纹素密度UV 展开时要注意“纹素密度”概念。纹素密度表示模型表面每米占据多少像素单位通常为 px/m。一个常见的标准是贴图尺寸对应纹素密度2K 贴图约 512 px/m4K 贴图约 1024 px/m意思是如果一个墙板高 4 米在 2K 贴图中它纵向大概占 2048 像素。如果不同模块的纹素密度不一致场景中会出现有的墙面清晰、有的墙面模糊的现象非常影响整体质量。所以每做一张贴图都要先明确它用在多大尺寸的模型表面上。如果不清楚项目的贴图规格可以在模型旁边放一个参考立方体尺寸为 1m x 1m然后通过缩放 UV 来对齐参考。UV 展开时结构相似的模块可以共享一部分 UV 空间。例如左右对称的墙面可以只展开一半另一半通过镜像 UV 来节省空间但这需要后处理软件的支持初学者可以先用标准展开方式。5.3 Trim Sheet 贴图规划模块化资产里一个非常重要的概念是 Trim Sheet修边贴图。它把一段连续的长条纹理比如金属包边、墙脚线、窗框结构集中放在一张贴图里然后多个模块共享这张贴图。Trim Sheet 的优势非常明显不同模块调用同一张贴图节省显存。材质数量减少降低渲染状态切换。建筑细节更容易统一风格。一个简化的 Trim 规划示例Trim 区域U 方向用途0.0 - 0.2墙板底部踢脚0.2 - 0.4墙板中部主金属板0.4 - 0.6屋檐边缘线脚0.6 - 0.8立柱顶部装饰0.8 - 1.0门框收边在实际项目中Trim Sheet 的 U 方向通常是一条长条带V 方向代表不同的材质类型。这样每个模块只需要展开一个矩形 UV 区域指向 Trim Sheet 的对应位置即可。5.4 FBX 导出格式与设置建模完成后资产需要导出到引擎或其他软件中。下面是导出 FBX 时的关键设置缩放单位按目标引擎要求设置UE 用厘米Unity 用米。轴向Blender 导出 FBX 时Forward 和 Up 的默认设置通常需要针对 UE 调整为-Y Forward、Z Up。平滑组尽量保留平滑信息避免导出后出现不自然的分面。嵌入贴图如果还没有贴图可以不勾选如果有可以勾选嵌入但会增加文件大小。导出前最后检查一遍模型名称是否规范。FBX 导入引擎后如果所有模型都叫Cube后续想改会非常痛苦。6. 常见问题与排查思路模块化资产制作中很多问题都是相同的。这里整理了一份高频问题表方便大家快速定位。问题现象常见原因解决思路模块拼接后尺寸对不上单位或模数设置不一致统一所有软件的单位检查网格吸附增量接缝处漏光、闪烁模块之间完全贴合浮点精度导致接口处增加微小重叠或预留收口边吸附后位置仍偏移轴心点不在预期位置重新设置原点并使用顶点吸附验证UV 展开后纹理拉伸UV 孤岛比例不一致检查纹素密度统一缩放 UV 孤岛导入引擎后比例放大 100 倍建模单位与引擎单位不一致UE 通常按厘米导入Blender 按米导出时需要转换模型名称全部为 Cube未养成命名习惯使用批量重命名脚本统一前缀倒角后出现杂乱三角面倒角段数过多或拓扑不合理降低倒角段数清理多余环线另外还有几个容易忽略的小坑镜像复制出的模块法线方向如果没有翻转导入引擎后会出现面片消失或变黑。模块资产中不要混入地面网格、灯光、摄像机导出前一定要清除场景中无关对象。碰撞体不在建模阶段做也可以但最好在资产清单中留一列标注每个部件是否需要碰撞。7. 模块化资产制作的最佳实践7.1 先写资产清单再动手建模动手之前用表格列清楚需要哪些模块。这不是浪费时间而是避免做到一半发现还缺一个转角件。一个最基本的厂房模块清单如下编号部件名称尺寸数量备注01外墙板 2x42m x 4m x 0.2m1基础墙板02墙板带窗2m x 4m x 0.2m1后续制作03立柱 0.5x40.5m x 0.5m x 4m1转角用04地板 4x44m x 4m x 0.1m1地面05屋顶 4x44m x 4m x 0.15m1平屋顶先有清单后续制作会非常顺畅。7.2 保持接口唯一性模块化最怕“好像能接但又接不上”。为了减少这个问题同一个项目里尽量只保留一种接口标准。比如墙板之间的连接统一使用平面对接柱子和墙板之间统一让墙板直接贴住柱子表面而不是做复杂的凹槽。如果需要更多结构变化把变化做成独立模块不要修改基础模块的接口。7.3 学会使用版本管理模型文件不仅包含几何体还包含材质、修改器、插件数据。因为文件格式和引擎工程不一样版本管理最常用的是每天手动保存一个版本号或者用云盘同步。建议文件名这样写factory_modules_v01.blend factory_modules_v02.blend factory_modules_final.blend虽然看起来笨但在实践中比误改后无法恢复要可靠得多。7.4 让资产在项目环境中接受测试模型做得再好最终也要在引擎里接受光照、阴影、碰撞和 LOD 的验证。条件允许的话做完一批模块就导入引擎一次不要等所有资产都做完再集中导入。一次性导入几十个模块如果出现问题往往很难判断是模型问题、导出问题还是引擎设置问题。小批量导入、小规模测试是成本最低的排错方式。8. 总结与学习路线到这里模块化建筑资产的上篇完成了。我们梳理了模块化设计的核心概念明确了单位、模数、命名、接口等基础规范并用一套厂房案例实际建出了墙板、立柱、地板、屋顶等模块完成了拼接验证和 UV 规划。这个过程看起来步骤很多但核心其实只有三件事用统一尺寸建模用统一规则命名用统一标准导出。下一步可以继续优化房间内部结构添加门窗变体、楼梯模块、破损模块等。如果想把资产真正用起来还建议去了解一下 Trim Sheet 的表现思路和程序化摆放方式比如在 UE 中用蓝图 Spline 一键生成整条围栏或墙体。下篇我会重点讲材质贴图制作、模型导入引擎、碰撞体和 LOD 生成流程。如果你正在做模块化资产建议先把这套流程完整跑通一次亲手拼出一个厂房再对比着看下篇的内容理解和上手速度会比单纯看理论快很多。