面数偏高通常不是单一原因:Hi3D 1.0 的最终网格同时受输入图的有效细节和生成侧的面数预算控制。只换输入图而面数几乎不变,说明当前更可能卡在生成侧设置;反过来,换了带大量细碎纹理、镂空、毛发的图面数明显上升,才说明输入侧在推高密度。稳妥的排查顺序是:先用脚本把面数变成可比数字,再固定一张输入图做单变量对照,最后在“减面”和“重生成”之间做选择,而不是凭观感调参数。
先量再调:用 Blender Python 读出顶点数、面数和三角面数作为统一口径,然后固定一张输入图,分别只改输入预处理和只改生成侧设置各跑一组,看哪一侧让面数变化更明显。输入侧影响大就回去控制图的有效细节,生成侧影响大就降面数预算后重生成。已有资产来不及重跑时,用 Decimate 塌陷模式兜底,但要接受 UV 和硬边可能受损。
先用脚本把当前结果的面数量化
“看着面很多”没法比较,也不能判断改动是否有效。把 Hi3D 1.0 导出的网格(通常是 OBJ、FBX 或 GLB)导入 Blender,选中对象后在 Scripting 工作区新建文本,粘贴下面的脚本。网格的三角面数才是渲染开销的真实口径,四边面数量只反映建模结构,两个都要记。
import bpy
def report(obj):
me = obj.data
me.calc_loop_triangles()
print(f"对象={obj.name} 顶点={len(me.vertices)} 面={len(me.polygons)} 三角面={len(me.loop_triangles)}")
objs = bpy.context.selected_objects
if not objs:
print("请先在视图里选中至少一个网格对象")
else:
for o in objs:
if o.type == 'MESH':
report(o)
else:
print(f"跳过非网格对象: {o.name} ({o.type})")
在脚本编辑器的 Run Script 按钮执行,输出不会弹窗,要打开控制台查看:Windows 用 Window 菜单里的 Toggle System Console,macOS 或 Linux 从启动 Blender 的终端里看。把每组结果连同导出文件体积一起贴到一张对照表里,后面所有判断都以这张表为准。若导入时对象带缩放,脚本读到的是原始数据,与视口显示的三角面统计可能不一致,以脚本输出为准。
固定一张输入图,只改预处理再生成
这一节只回答一个问题:输入图的细节是否在推高面数。选一张主体清楚、背景干净的原图作为基准,之后每组只动一个变量,其余保持完全相同,包括生成侧的所有设置和随机种子(如果工具暴露)。每组至少跑一次,条件允许就重复跑两次,观察面数是否稳定。
| 组别 | 裁剪留白 | 去背景 | 降采样 | 需记录字段 |
|---|---|---|---|---|
| A 基准 | 原图不变 | 否 | 否 | 顶点数、面数、三角面数、导出体积、轮廓截图 |
| B1 | 收紧到主体贴边 | 否 | 否 | 同上 |
| B2 | 同 A | 是(透明底或纯色底) | 否 | 同上 |
| B3 | 同 A | 否 | 是(长边缩到较小尺寸) | 同上 |
读法很直接:B1 面数明显下降,说明原图留白多、主体占比小,预处理会改变主体在画面中的占比,进而影响生成密度;B2 下降说明背景被当成几何内容生成了;B3 下降说明输入像素细节在驱动面数。三组都不变或变化很小,就轮到下一节检查生成侧。
固定输入,只改生成侧可调项
把上一节里最稳定的一组输入图固定下来,只改生成侧。不同版本的界面文案可能不同,表里的项名按你在界面上实际看到的填写,用一组保守取值做对照:先跑默认值,再逐项改动,每次只改一项。
| 可调项 | 取值方式 | 预期影响 | 状态 |
|---|---|---|---|
| 目标面数 / 面数预算 | 默认 vs 明确填一个较低数值 | 最直接,通常线性影响最终三角面数 | 需在界面确认是否有此项 |
| 网格精度 / 质量档位 | 默认档 vs 低一档 | 影响重建分辨率与面数 | 需在界面确认档位数量 |
| 是否重网格化 / 抽壳 | 开 vs 关 | 改变拓扑密度和封闭性 | 待验证 |
| 输出格式 | OBJ vs GLB | 一般不改变几何面数,只影响导出与合并 | 待验证 |
| 纹理分辨率 | 默认 vs 降低 | 通常只影响贴图,不影响面数 | 待验证 |
表格里的“待验证”不是省事写法,而是当前无法确认界面是否暴露该项,或该项是否真的作用于几何;这些项要在你自己的版本上逐项点开确认后再补结论。跑完后把每项对应的三角面数填回第一节的对照表,就能看出面数是被面数预算卡住的,还是被精度档位卡住的。
用 Decimate 做减面并保住轮廓
如果资产已经做完,只差面数,重生成代价太高,可以走减面路线。给对象加 Decimate 修改器,两种模式按网格来源选:
- 塌陷(Collapse):按比例或目标面数收缩。适合扫描式、有机曲面、布线不规整的生成网格,减面幅度可以拉得比较大;代价是硬边容易变软、UV 接缝可能被拉歪。
- 反细分(Un-Subdivide):按迭代次数回退细分结构。适合本来就是细分生成、布线规整的网格,轮廓保持更好;但对非细分来源的网格往往减不下去,或者出现明显的块状。
操作顺序建议:先复制一份对象留底,再应用修改器,重新执行第一节脚本读三角面数,然后从生成时相同的相机角度导出一张轮廓截图,与减面前的正视图叠在一起看。轮廓检查重点看三个位置——主体外轮廓、明显的硬转折、镂空边缘。如果塌陷后这三处明显走形,就退回分块处理或改回重生成。
判断哪些资产可以减面、哪些必须重拓扑
自动减面不是万能的,按资产的用途分三类处理更稳妥:
- 静置道具(摆件、背景家具、装饰件):可以大胆减面,轮廓在远景不明显,用塌陷模式压到目标面数通常够用。验证方式是按实际观看距离渲染一帧,确认没有明显变形。
- 可变形物件(要绑骨、要做形变的角色配件、布料类):不建议直接用塌陷减面,减完的布线很难支撑形变,容易在关节处塌陷。这类资产优先重生成并把面数预算调低,或者走重拓扑,风险边界是减面后必须做一次摆姿测试。
- 近景主体(镜头前的产品、角色主体):轮廓和细节都暴露在近景,减面容易在硬边和高光处露馅。建议重生成并控制输入细节,减面只作为临时降级手段,使用前先确认镜头焦段和观看距离。
把这三类的判断写进资产记录里,配上第一节的面数表和减面后的截图,下次遇到同类资产就不必重新试一遍。