学习进度
0/9 已勾只保存在这台浏览器;勾满 9 项即视为本题完成。
先把题目说成人话
“一键生成”不是把模型面数乘以一个百分比。按钮背后要完成两项工作:为远处观察生成几份越来越便宜、仍然像原物体的可见模型;再为玩家身体和射线生成一份独立、稳定的物理边界。
按画面占比切换不同复杂度的可见模型叫细节层级(LOD);决定角色、子弹和物体在哪里发生接触的不可见边界叫碰撞体(Collider)。本题需要正面讲清减面算法怎样工作、引擎(Unity)怎样接收多级模型,以及为什么碰撞不能直接复用最粗的视觉模型。
这是虚构教学故事,不是个人项目经历。
场景:先让问题变得看得见
工具处理一扇带门洞的石门。石门表面雕着花纹,源模型约有十二万个三角形。美术选中它并点击“生成 LOD 与碰撞体”,工具先把源模型复制到工作区,原文件保持不动;镜头、角色胶囊和穿行路线也固定下来,供所有生成结果使用。
(右脑)画面:石门切换成线框模式,表面像铁丝网一样布满三角形。工具先选中平坦石墙中央的一条短边,把边两端的两个点捏成一个点(边折叠,Edge Collapse);附近几个小三角形随即消失,墙面却几乎没有变化。它又把同样的动作移到门框转角:两个点刚要合拢,方正的门框已经预演出一个缺口,于是这次合并被拒绝。工具不断比较“捏掉哪条边最不容易改变原来的样子”(二次误差度量,QEM),平坦处优先变简单,外轮廓、门洞、贴图接缝和主要断角则被保护(特征保护,Feature Preservation)。每到一个阶段,工具就保存一份模型。相机退远以后,小裂纹依次消失,门的轮廓和通道仍然成立;是否还能继续减面,要看变化在屏幕上是否已经被人看见(屏幕空间误差,Screen-Space Error),不能只盯着剩余百分比。
(左脑)对表:每个三角面先提供一份“偏离这个平面要付出多少代价”的误差账本。顶点累加邻接面的账本;准备把边两端合成新点时,工具求新位置对两端账本造成的总误差,并优先折叠代价最低的候选边。经典 QEM 只认识几何距离,不认识“门洞必须能走”,所以轮廓、开放边界、UV seam、硬边、材质边界和蒙皮信息需要另外加权或锁定。几何误差还要结合距离、FOV、缩放、观察方向和分辨率换成屏幕结果;目标面数只能辅助停止,不能单独证明 LOD 合格。
小明:先形成一个完整猜测
小明让工具在剩余三角形达到固定比例时停止,并保存 LOD1、LOD2、LOD3。随后他把最简单的 LOD3 直接挂成 MeshCollider,认为“面越少,碰撞也越便宜”。
玩家从远处跑向石门。可见模型看起来仍然正确,角色却撞上了一堵看不见的墙。打开碰撞显示后,一块远看无关紧要的大三角形正横跨门洞。视觉误差允许它存在,玩法规则却不允许。这个失败证明:减面器可以回答“远看还像不像”,不能自动回答“玩家还能不能按原规则行动”。
小红:把猜测放回现实检查
小红保留刚才生成视觉 LOD 的路线,另开一条碰撞路线。石门两侧立柱和顶部横梁分别用简单盒子围住,几个形状共同组成门框(组合碰撞体,Compound Collider),中间通道始终留空。若静态环境确实需要贴合复杂凹面,也可以准备干净的低模非凸 MeshCollider;运动物体则优先使用简单形状、组合碰撞或凸形代理。
生成以后,角色胶囊实际从门洞来回穿行,射线分别穿过洞口和命中石柱(物理回归测试,Physics Regression)。碰撞体不跟随视觉 LOD 切换,避免玩家在相机换档时突然撞上新的边界。
我:用检查结果修正模型
我把“一键”定义成一条编辑器资产管线,而不是一种神奇算法:读取资产类型与规则 → 复制工作 Mesh → 运行 QEM → 保存各级 Mesh → 创建 Renderer → 写入 Unity 的 LODGroup → 独立生成 Collider 子对象 → 运行画面与物理检查 → 输出报告。Unity 的 LODGroup 负责按相对屏幕高度切换已经准备好的 Renderer;减面本身由工具接入的算法、DCC 批处理或批准的网格简化库完成。
工具只输出候选结果。英雄资产、细长武器、门洞、可攀爬边缘和复杂蒙皮进入人工复核;规则稳定的背景石块才允许自动通过。报告分别记录三角形、轮廓和 UV/蒙皮误差,以及 Collider 数量、穿行和射线结果。视觉 LOD 主要影响远处物体的顶点处理与网格数据成本,碰撞复杂度主要影响物理 CPU 与烘焙成本;增加更多 LOD 也会增加资源与检查工作,拆出过多小 Collider 同样会增加物理管理成本。两本账不能合并成一句“性能更好”。
(右脑)画面修正:工具最后输出两套彼此独立的结果。给相机看的石门从近到远逐级减少裂纹和小石块,由细节层级组(LODGroup)负责换档;给玩家身体碰到的石门由几块简单外壳围出门框,通道始终不变。镜头退远时,画面越来越便宜;角色反复穿门时,物理世界从未偷偷换成另一扇门。一个按钮可以生成两份草稿,但仍要亲眼看一遍、亲自走一遍。
(左脑)严格对表:视觉链为每个面建立平面误差,为顶点累加 Quadric,为候选边求折叠位置与代价;依次拒绝翻面、退化、非流形和受保护特征,再折叠最低代价边并更新邻域。到达各级面数且屏幕误差仍合格时保存 Mesh,同时正确插值 UV、法线、切线、颜色和蒙皮权重。Collider 链按静态/动态与玩法语义选择 primitive、compound、convex 或低模静态非凸代理,并将门洞、台阶和抓取点设为不可破坏约束。最终同时验收切档画面、极端动画、玩法路径、接触行为及目标场景的渲染与物理耗时。
老师解惑
- QEM 边折叠:用误差二次型估计“把一条边缩成一个点”会偏离原表面多少,然后反复选择最低代价候选。
- 屏幕空间误差:同样的几何偏差,近处明显、远处不明显;它比单一三角形比例更接近 LOD 的视觉目标。
- 保护约束:轮廓、开放边界、UV seam、硬边、材质边界和蒙皮信息需要提高代价或禁止折叠。
- LODGroup:管理已经生成好的各级 Renderer 及切换阈值,不负责替模型减面。
- 碰撞类型:简单与组合碰撞通常最便宜;动态复杂物体优先凸形或组合代理,非凸 MeshCollider 主要留给需要精确凹面的静态环境。
工具分工
- QEM 网格简化器:按几何误差与保护约束生成各级视觉 LOD。
- Unity 编辑器工具或 DCC 批处理:保存生成 Mesh、建立命名和重复生成规则。
- Primitive fitting / Convex decomposition:根据资产类型独立生成物理代理。
- Unity
LODGroup与 Physics Debugger:分别检查画面换档和碰撞形状。 - 自动穿行与射线测试:验证门洞、地面和命中区域等玩法约束。
记忆钩子
一键 LOD 是反复折叠最低误差的边;Collider 另走一条路线,因为看起来像不等于玩起来对。
这是教学场景,不是目标项目的真实捕获或个人经历。
下一步:验证这条因果
源 Mesh 怎样产生独立的 LOD 与 Collider 候选,再经过误差门禁得到通过、阻断或人工复核。
教学边界:QEM / edge collapse 与碰撞误差都是网页教学抽象;真实 Mesh 重建、Physics 查询、发布和回滚必须在 Unity Editor 与目标设备验收。