Appearance
渲染质量与统计
viewer.quality 管渲染质量(抗锯齿 / 环境光遮蔽 / 色调映射 / IBL 环境 / 质量档),viewer.stats 是只读统计视图(加载侧 + 渲染侧)。质量参数既可在 Viewer.create() 构造期经 ViewerOptions.quality 给初值,也可运行时逐项调整;统计随时拉取,适合做调试 HUD 或性能面板。
下面的 demo 是 LOD 诊断页,右上统计面板实时展示各网格的细节层级分布与加载状态:
核心 API
ts
// 构造期:硬件 MSAA(构造后不可变)+ 质量初值
const viewer = await Viewer.create(canvas, {
antialias: true, // 硬件 MSAA
quality: { tier: "auto", toneMapping: "aces" },
});
// 运行时质量调整
viewer.quality.setAntialias(true); // SMAA 后处理(运行时可变)
viewer.quality.setAmbientOcclusion({ enabled: true }); // GTAO 默认关,须显式开
viewer.quality.setToneMapping("linear"); // 色彩精确模式
viewer.quality.setTier("high"); // 锁定质量档(关闭自适应)
// 统计:加载侧 + 渲染侧
const { chunks, bytes, decode } = viewer.stats.getLoader();
const { fps, frameMs, drawCalls, triangles } = viewer.stats.getRender();行为要点
- 两个 antialias 不是一回事:
ViewerOptions.antialias是硬件 MSAA,传给 WebGL renderer,构造后不可变(默认 true);quality.antialias/viewer.quality.setAntialias()是 SMAA 后处理,运行时可开关(默认 true)。两者独立叠加。 - 环境光遮蔽(GTAO)默认关:GTAO 是每帧开销最大的 pass,需要时经
setAmbientOcclusion({ enabled: true, radius?, intensity? })显式开启;显式关闭后,自适应调档不会再替你打开它。 - 色调映射与曝光:
setToneMapping(mode, exposure?),"aces"(默认,filmic 压缩)适合视觉呈现;"linear"/"none"为色彩精确模式(关闭 filmic 压缩),适合需要还原材质标称色的场景。默认曝光 0.7。 - IBL 环境:
setEnvironment(url)加载.hdrequirect HDRI 替换内置程序化环境(返回加载 Promise);setEnvironmentIntensity(x)调环境光强度(默认 0.5)。 - 质量档:
setTier("auto" | "high" | "balanced" | "performance"),默认"auto"按帧时 EMA 自适应升降档;设显式档即锁定并关闭自适应。 stats.getLoader():加载侧统计——chunk 进度(total / loaded / loading / failed)、累计下载字节、几何解码耗时 p50 / p95(ms);未加载模型时各项为 0。stats.getRender()语义:fps/frameMs来自真实帧计时;drawCalls/triangles是 WebGL renderer 上一帧的提交计数——即本帧实际画了多少,受 LOD 与节点可见性影响,不是场景三角形总量。被动监听可订阅render事件(约每秒一次心跳,带 fps / frameMs)。- LOD:引擎按视距自动选择网格细节层级,切换经
lod-changed事件可观测。
相关 API
- 概览:viewer.quality / viewer.stats — 质量与统计两个域的设计意图与典型用法。
RenderQualityManager— 质量调整完整签名。QualityOptions/ViewerOptions— 构造期质量初值与各项默认。StatsView/LoaderStats/RenderStats— 统计字段定义。- 事件系统 —
render/lod-changed事件参考。