AI生成的建筑或道具替换白模后,常见问题不只是"模型放歪了":原本露在屋顶上方的地标被挡住,角色悬在地面上,相机路径偏离街道,甚至整批资产都按相同比例缩小。
先别逐个挪相机,也不要靠手工拖动把模型"摆回去"。更稳妥的顺序是:冻结白模基线 → 核对单位 → 定义锚点 → 检查枢轴与父节点 → 复核约束和可见边界 → 在目标端回读。
替换的本质不是把新模型拖到旧位置,而是让新旧资产遵守同一套空间规则。可以把这些规则理解成一份"替换契约":资产使用什么单位、从哪里定位、朝向哪边、挂在哪个父节点下,以及替换后必须通过哪些镜头和运行检查。

图注:白模与视觉场景对照适合说明资产深化阶段;截图不能证明新旧模型采用相同单位、枢轴、相机或替换规则,画面字幕也不构成功能验证。
先查替换基准,不要先挪相机
以雪地街区为例:白模阶段,相机沿街推进,远处的球形地标始终露在屋顶上方。换成精模后,只要楼体增高、屋檐加厚,或者定位点从地面角点变成几何中心,原构图就可能失效。
这类问题至少分成三层:
- 空间错位:模型的大小、落点或朝向发生变化;
- 引用失效:相机约束、路径、挂点仍指向旧对象或错误节点;
- 构图失效:资产位置没有错,但新轮廓挡住了原本需要看见的内容。
三者不能靠同一种修复解决。模型落点错了,应查单位、锚点和变换;相机真的移动了,应沿层级和约束追踪;相机没动但画面被挡,则要重新评估精模轮廓与镜头余量。
本文是一套排查流程,不代表配图中的项目已经完成这些测试。AI生成资产只是起点,空间关系、编辑能力与目标端结果仍需用真实文件核验。
第一步:冻结白模基线,明确替换范围
先保存已经通过评审的白模场景,不要在原文件上直接覆盖。至少保留:
- 白模场景和版本号;
- 已确认的相机与关键帧;
- 角色走位、路径和挂点;
- 对象ID及层级;
- 关键尺寸、世界变换和包围范围;
- 本轮替换清单。
接着明确替换范围:是单栋建筑、整组街区,还是只替换外观壳层?如果本轮只是升级外观,就不应顺带改变道路中心线、角色落点或相机路径。
建议为对象分配稳定的asset_id,不要只依赖可能重复、改名或重新生成的对象名称。记录世界位置、旋转、缩放和关键锚点,例如入口中心、地面基线、道路接缝和地标观察点。
再制作A/B副本:
- A保留白模;
- B仅执行资产替换;
- 两者使用相同相机、画幅、时间点和后处理设置。
先挑一栋正常建筑和一栋已有异常的建筑试换。把"入口不动、地面齐平、指定帧仍能看到球形地标"写成检查条件,比"看起来差不多"更容易复查。
误差阈值由项目自行约定。道路接缝允许偏差多少、地标至少保留多少可见面积,都应结合用途制定,不要套用跨项目的固定数字。
第二步:核对单位,不要被Scale等于1误导
检查顺序建议是:导入单位 → 局部缩放 → 父级缩放 → 世界尺寸。
属性栏显示Scale = 1,并不能证明模型大小正确。单位换算可能已经写进网格,也可能由导入器或父节点承担。一个模型在DCC中按厘米制作,另一个按米解释,即使两边缩放值都为1,世界尺寸仍可能相差百倍。
至少比较两个相互独立的尺寸,例如门宽与楼高:
- 两者都按相同比例偏差:优先怀疑单位或整体缩放;
- 门宽正确、楼高错误:检查几何比例或非均匀缩放;
- 单栋建筑正确、整组街区错误:继续追查父节点、导入设置或批量脚本;
- 源软件正确、目标端错误:检查导出单位、轴向和导入转换。
不要只用一次整体缩放掩盖局部比例错误。整体缩放只能统一放大或缩小,不能同时修正错误的楼层高度、屋檐厚度和入口宽度。
记录时应同时保存单位名称、量测结果和量测位置。"单位正确"不如"以米为单位,门宽和楼高分别与白模基线对照"更有诊断价值。
第三步:用锚点定位,不强求所有原点一样
可以把模型替换类比成安装家具:决定能否装对的,不是家具几何中心在哪里,而是安装孔、落地面和朝向是否匹配。
几个容易混淆的概念需要分开:
- 对象原点:对象局部坐标的参考位置;
- 枢轴:旋转、缩放等操作使用的中心,具体实现随软件而异;
- 局部坐标:相对对象自身或父节点的变换;
- 世界坐标:对象在整个场景中的最终位置;
- 锚点:项目人为约定、用于替换和校验的业务定位点。
建筑可以使用入口中心和地面基线,道具可以使用安装面与连接轴。只对齐一个点,只能确定位置,无法唯一确定旋转;需要稳定姿态时,还要记录朝向向量,或使用两个以上不共线的参考点。
典型错误是:白模以地面角点作为原点,精模以几何中心作为原点。直接复制位置后,精模就会下沉或侧移。
解决方法不只有"重新设原点":
- 在源资产中统一原点和朝向;
- 为精模增加明确的补偿节点;
- 在替换脚本中保存锚点映射;
- 用稳定ID连接白模与精模版本。
重点是规则明确、能够重复执行。没有必要为了表面整齐,强求所有资产的对象原点完全相同;但同类资产应采用一致或可计算的锚点规则。
第四步:沿父节点检查变换继承
如果单位和锚点都正确,下一步从资产向上检查整条父级链:
- 父节点是否带缩放或旋转;
- 是否存在镜像产生的负缩放;
- 轴向转换是否由中间分组节点承担;
- 新旧资产是否挂在同一个父节点下;
- 父级非均匀缩放是否与子级旋转叠加;
- 实例、约束和动画是否仍引用正确节点。
子对象的缩放为1,仍可能继承父级的放大、镜像甚至剪切。只比较属性栏中的局部数字,并不能证明世界结果一致。应比较替换前后的世界矩阵、锚点世界坐标和包围尺寸。
"应用全部变换"也不是通用修复。它可能改变修改器计算、骨骼绑定、动画、实例关系或导出结果。正确做法是在副本中测试:
- 保持父节点不变,仅替换几何;
- 检查落点和朝向;
- 再单独测试新层级或变换整理;
- 保存、关闭并重新打开;
- 导出后重新导入复核。
测试既要覆盖正常样本,也要包含一个已知异常样本。若资产带动画、绑定或实例,还应播放代表动作,不能仅凭静态截图判断批量规则安全。
第五步:复核约束、碰撞和可见边界
建筑定位通过,不代表原镜头仍然通过。精模比白模多出的屋檐、线缆、招牌和栏杆,都可能改变构图。
先判断相机到底有没有移动:
- 相机世界变换不变,但画面被挡:检查精模轮廓、近景遮挡和构图余量;
- 相机世界变换也发生变化:检查父节点、路径、跟踪约束和目标对象;
- 相机参数不变但画幅不同:检查分辨率、宽高比、焦距、传感器或FOV定义;
- 只在目标引擎中不同:继续检查相机导入与坐标转换。
删除旧对象后再创建同名对象,不一定能保留约束引用。逐项确认相机跟踪目标、路径、角色挂点和事件脚本是否仍指向正确的稳定ID。
同时检查运行相关数据:
- 碰撞代理是否仍贴合新轮廓;
- 地面高度变化后,角色是否悬空或陷入表面;
- 几何改变是否要求重新生成导航数据;
- 包围范围(Bounds)是否覆盖完整资产;
- 剔除、LOD和触发区域是否仍然合理。
不要无条件全量重做碰撞或导航。先确认几何变化是否真的影响对应区域,再按目标引擎的规则更新。
材质透明、雾效或曝光也可能让地标"看不见",但它们属于显示问题。应先确认几何遮挡和相机关系,再进入材质排查,避免把不同层的问题混在一起。
第六步:在三个位置回读结果
用同一份白模基线,在三个位置比较结果:
- 源DCC场景;
- 导出后重新导入的独立空场景;
- 目标Unity、Unreal或网页环境。
每处都检查相同的锚点、世界尺寸、相机画面和代表时间点。不要拿已经手动补偿过的目标场景反过来当标准。
如果源场景正确、独立重导入后错误,优先查导出单位、轴向、层级和变换求值。如果前两处正确、只有目标引擎错误,再查导入器、相机模型、父级关系和运行脚本。
相机也不能只抄一个焦距数字。不同软件之间还应核对:
- 成像面或传感器尺寸;
- 画幅比例;
- FOV是水平、垂直还是对角定义;
- 相机裁切范围;
- 坐标轴与旋转约定。
记录"第一个出现差异的环节",通常比只保存最终错误截图更有价值。
只有少数资产偏移,可以在明确原因后局部修正;若大批资产同方向、同比例出错,应回查单位、轴向、导出设置或替换脚本,不要逐个手工拖动补偿。
需要继续整理对象原点、层级或局部网格时,可进入模型编辑工作台评估后续处理。该入口不等于能够自动修正全部空间基准,所需编辑和导出能力仍要用真实文件验证。
用两套验收判断:定位通过,不等于镜头通过
为了避免"模型没偏,但镜头还是坏了"的争议,建议把验收拆成两组。
1. 空间定位验收
- 单位和世界尺寸符合基线;
- 锚点和朝向匹配;
- 父节点与世界矩阵符合替换规则;
- 道路、地面和建筑接缝在允许误差内;
- 导出回读后没有新增偏移。
2. 镜头与运行验收
- 指定帧仍能看见关键地标;
- 新轮廓没有意外遮住角色或目标;
- 相机、路径和约束引用正确;
- 角色落点、碰撞和导航符合本轮范围;
- 目标端画幅和相机参数与基线一致。
空间定位通过,只说明资产放在了约定位置;镜头通过,才说明替换后的视觉关系仍满足原任务。如果精模轮廓真实发生变化,镜头可能需要重新评审,但应把它记录为设计变化,而不是悄悄挪相机掩盖差异。
留下替换记录,再做批量升级
用一份简洁的替换表保存规则和结果:
| 字段 | 示例或记录要求 |
|---|---|
blockout_version |
snow_blockout_v03 |
asset_id |
building_07,关联精模版本v02 |
unit_state |
单位、门宽和楼高的基线对照 |
anchor_points |
入口中心、地面基线、朝向或第二参考点 |
parent_state |
父ID、世界矩阵、负缩放状态 |
constraint_state |
相机、路径、挂点等引用结果 |
camera_result |
相机ID、检查帧、地标可见情况 |
reimport_result |
独立重导入与目标端结果 |
review_state |
待测、退回或通过,并附版本和负责人 |
批量升级前,先让一个正常样本和一个异常样本通过完整流程。脚本或批处理还应具备幂等性:同一任务重复执行时,不能重复叠加补偿变换,也不能覆盖已经通过的版本。
状态不明时,暂停当前资产,不要猜测上一次是否成功后再次提交。通过记录和失败记录都要保留,尤其写清失败原因、修改位置和复核版本。下一轮换精模时,团队才能复用规则,而不是重新猜测每栋建筑为什么偏移。
四个容易误判的问题
1. 新旧模型的对象原点必须完全一样吗?
不必。可以通过明确的锚点映射实现稳定替换,但同类资产的规则应一致、可计算、可验证。只对齐一个点时,还需补充朝向或第二参考点。
2. 应用变换能一次解决单位和缩放吗?
不能保证。它可能改变修改器、绑定、动画和实例关系。先在副本中测试,再通过保存、重开和导出回读确认结果。
3. 建筑位置正确,相机为什么仍然被挡?
因为精模的外轮廓和可见边界变了。定位正确只证明模型落点符合规则,不证明原构图仍然成立。
4. 批量替换怎样避免覆盖和重复偏移?
使用稳定asset_id、版本清单和独立输出目录;写入前检查已有状态。替换脚本还要保证重复运行不会再次叠加缩放、位移或补偿节点。
收藏清单:小样通过,再批量替换
- 冻结白模、相机、路径和版本基线。
- 明确替换范围,不顺带改动无关对象。
- 用两个独立尺寸核对单位与几何比例。
- 记录锚点、朝向和必要的第二参考点。
- 沿父节点检查缩放、旋转、负缩放和实例关系。
- 分开检查相机是否移动与新轮廓是否遮挡。
- 核对约束、挂点、碰撞、导航和Bounds。
- 在源DCC、独立重导入场景和目标端三处回读。
- 分别完成空间定位验收与镜头运行验收。
- 正常和异常小样都通过后,再扩大批次。
白模换精模的目标,不是让模型在某一张截图里"看着回到原位",而是让替换规则能够复现、回读和批量执行。
你的问题是整体比例不对、对象落点变化,还是原本通过的镜头突然被新轮廓遮挡?