多边形处理

转化隐患

顶点数暴涨

2. 自动三角化导致的“拉丝”或“闪烁”

这种边缘有点类似跑道或复杂轮廓的巨大 N-gon(多边形),如果里面没有任何内部连线,直接扔给 glb 导出器,导出器会自动去连线三角化。

  • 极易产生极其狭长的“畸形三角形”(拉丝)。自动三角化产生的极端狭长三角形,在三维领域被称为 “退化三角形”

  • 如果这个面稍微有一点点不平整(非绝对共面),在 Babylon.js 里移动视角时,会发生严重的画面闪烁(Z-Fighting)或黑斑暗影。根本原因就是在分uv的地方,这种像素周围的黑色背景(Padding 边缘色)会因为插值错误渗透进模型里

修复方法:

又要性能,又要不出现狭长三角形

1.先切割连成“井”

2.然后专业优化

如果模型顶点本身带着类似 GIS / 总图坐标的大数值

这类模型在实时渲染里有两个潜在问题:

  1. 浮点精度下降
    GPU 用 32 位浮点处理顶点。坐标越大,小数精度越差。比如百万级坐标下,很细的边、薄板、贴近的面,可能会出现轻微抖动、闪烁、接缝、Z fighting。

  2. 深度精度更敏感
    如果场景范围、相机远近裁剪面很大,两个很近的表面会更容易深度判断不稳定。

这不是说“模型真实尺寸不能大”。真实尺寸大没问题,比如楼长 100 米、城市 2 公里都可以。问题是“模型离原点特别远”或者“顶点数据里塞了百万级坐标”。

最佳做法是:

  • 单体导出时,尽量把模型移动到局部原点附近。
  • 保留真实坐标可以放在外部元数据里,或者用父节点/场景定位管理。
  • 如果是城市/GIS 场景,要做“相机附近原点重定位”或分块加载,不要所有 mesh 顶点都直接带百万级坐标。
  • Blender 导 GLB 前,如果只是单体展示,建议应用/清理掉这种大坐标偏移,让几何本身在 (0,0,0) 附近。

操作核心 优化面,优化uv,优化光照uv

要先零件专业优化,在合并

对,面数这里要分清“能不能自动减”和“该不该自动减”。

你这个楼的白色外框是大量圆角、长条、重复楼层边框。4.4 万三角形在 PC 上不算大,但移动端如果还加 HDR、阴影、SSAO、透明、草地大贴图、多模型,就会吃紧。目标应该不是盲目 Decimate,而是分层优化。

最推荐方案

  1. 先清理重复和不可见面

    • 每层边框之间、墙体内部、楼板压住的背面,如果永远看不到,直接删。
    • 这是最安全的优化,不改变外观。
    • 对建筑模型非常有效,因为很多面是建模过程留下的内侧面、重叠面、封盖面。
  2. 圆角边框用更低段数重建

    • 你这个白色框的成本主要在圆角和弯曲护栏。
    • 如果 bevel 或曲线分辨率太高,移动端没必要。
    • 比如圆角截面从 16/24 段降到 6/8 段,视觉基本不变,面数能降很多。
    • 这个比 Decimate 更可控。
  3. 重复楼层做实例化

    • 多层白色边框如果形体重复或接近重复,不要每层都是独立 mesh。
    • 在 Blender 里用 linked duplicate / geometry nodes 实例,导出时尽量保留实例。
    • WebGL 里同几何多实例,GPU 成本比多份独立网格低很多。
  4. 按距离做 LOD

    • 近距离用完整模型。
    • 中距离用简化白边。
    • 远距离用烘焙贴图的低模盒体。
    • 对移动端最实际,因为用户多数时候不会贴脸看圆角边框。
  5. 烘焙细节到贴图

    • 楼板格子、细小凹凸、轻微接缝,不要全靠几何。
    • 用 normal map / AO / lightmap 表现。
    • 几何只保留大轮廓。

不太建议直接做的

  • 直接 Decimate 整栋楼:容易破坏圆角、边线、UV、法线,建筑会脏。
  • 自动合并所有东西:会影响材质选择、烘焙、遮挡剔除。
  • 把所有圆角都保留高精度:移动端不值得。

针对你这个模型的具体建议

白色“哑光”外框这类物体,建议手动回 Blender 检查:

  • 圆角 bevel 段数降到 6~8
  • 删除贴在楼板下面、内部、背面的不可见面
  • 相同楼层边框尽量实例化
  • 远景版本可以把多层细边框合并成简化轮廓
  • 灰色楼板的格子细节尽量用贴图,不要用几何

4.4 万三角形如果只有一栋楼还可以,但如果你要加载一片建筑群,移动端目标最好是一栋楼控制在几千到一两万三角形以内,远景 LOD 更低。最现实的路线是:手动删不可见面 + 降 bevel 段数 + LOD

实例化

Billboard广告牌

1.复位

必须要先进行数据复位,如果不复位,灯光在计算距离衰减会严重失真,导致大面积黑死漏光

2.确认打光渲染

找到一个物体,给他确定好打光渲染没问题了。

3.物体打帧,预备好平视摄像机

给这个物体打摄像机,并设定好8帧,给物体Z旋转定好每帧的旋转角度

  • 指针拖到 第 1 帧 旋转 Z 改为 鼠标悬停按 I
  • 指针拖到 第 2 帧 旋转 Z 改为 45° 鼠标悬停按 I
  • 指针拖到 第 3 帧 旋转 Z 改为 90° 鼠标悬停按 I
  • 指针拖到 第 4 帧 旋转 Z 改为 135° 鼠标悬停按 I
  • 指针拖到 第 5 帧 旋转 Z 改为 180° 鼠标悬停按 I
  • 指针拖到 第 6 帧 旋转 Z 改为 225° 鼠标悬停按 I
  • 指针拖到 第 7 帧 旋转 Z 改为 270° 鼠标悬停按 I
  • 指针拖到 第 8 帧 旋转 Z 改为 315° 鼠标悬停按 I 如果是斜向下看45度,那就是摄像机可以(X=60,Y=0,Z=45)

4.渲染输出

只做Sprite Shee雪碧图 256像素就可以,渲染采样调节256

5.实现广告牌逻辑

原理:当视轨相机(Camera)绕着工位转圈时,代码在后台实时计算相机和这个平面的夹角,只要相机偏了 45°,代码就瞬间把贴图切换到对应角度的那一格

还需要的技术:匹配相机俯角烘焙 + 锁定 Y 轴广告牌,

锁定U轴:常规的广告牌是全轴朝向相机。当相机飞到物体头顶时,常规广告牌会跟着抬头,整个片子会“躺”在地上,瞬间露馅。

解决做法是:锁死 X 轴和 Z 轴,只允许平面绕着垂直于地面的 Y 轴旋转

  • 不管相机怎么高低起伏,这个平面永远像一扇旋转门一样,笔直地立在地面上。

  • 当相机在高处左右环绕时,平面绕 Y 轴转动迎合相机,同时由于贴图本身已经自带了俯视角度,二者完美契合。