Definition: Parameter
Parameter 类是配置的入口。它并不直接包含所有配置字段的定义,而是将它们组织在不同的接口中。
为了便于理解,我们将参数分为两大类:
| Category | Description | Link |
|---|---|---|
| Material & Appearance | 控制“长什么样”。包括材质、颜色、楼层显示、阴影、点云样式等。 | Material Params |
| 3DTile & Performance | 控制“怎么加载”。包括 LOD (细节层级)、显存配额、网络并发、SSE 阈值等。 | 3DTile Params |
获取参数值不使用 get() 方法,而是直接访问属性。
Parameter 实例上设置的值。如果未设置,返回 undefined。// 方式 A: 直接访问 (获取当前层级配置)
const currentVal = parameter.maxMemoryUsage;
// 方式 B: 计算最终值 (包含继承逻辑)
// 1. 基础用法:仅继承默认值
const finalVal = parameter.resolveValue().maxMemoryUsage;
// 2. 进阶用法:指定继承源 (例如 ViewLayer 继承自 Model)
const inheritedVal = viewLayerParam.resolveValue(parentParameter).maxMemoryUsage;
Parameter 实例提供了以下核心方法来管理配置:
class Parameter {
/**
* 设置配置项
* @param key 参数名 (如 'opacity', 'maxMemoryUsage')
* @param value 参数值
*/
set(key: string, value: any): void;
/**
* 重置配置项(移除当前层级的设置,恢复继承上游的值)
* @param keys 要重置的参数名列表
*/
reset(...keys: string[]): void;
/**
* 获取经过继承计算后的最终值(每次调用创建新对象)
* @param upstream 上游 Parameter 对象列表(通常由引擎自动传入)
*/
resolveValue(...upstream: Parameter[]): ResolvedParameterValue;
/**
* 获取经过继承计算后的最终值(复用 target 对象,避免重复创建)
* 适用于高频调用场景(如逐帧更新),可显著减少 GC 压力。
* @param target 用于写入结果的已有对象,其属性会被重置为默认值后重新赋值
* @param upstream 上游 Parameter 对象列表
*/
static resolveValueTo(
target: Partial<ResolvedParameterValue>,
...upstream: Partial<ParameterValue>[]
): ResolvedParameterValue;
}
resolveValue()内部已委托给resolveValueTo({}, ...),两者计算逻辑一致,区别仅在于是否复用对象。
ResolvedParameterValue 通过 versionNumber: number 标识当前配置的版本。引擎内部使用整数哈希(而非字符串拼接)计算版本号,用于高效的脏检查。
interface ResolvedParameterValue extends ParameterValue {
/** 整数哈希,输入参数变化时值会改变,用于脏检查 */
versionNumber: number;
}
Parameter 遵循 “就近原则” (Override) 的继承逻辑。
.gltf 文件或数据块。graph TD
Scene[ModelScene.parameter] -->|Inherit| Model[Model.parameter]
Model -->|Inherit| Layer1[ViewLayer.parameter]
Model -->|Inherit| Layer2[ViewLayer.parameter]
Global Configuration (全局设置): 若需修改所有模型的默认表现(如统一调暗亮度、统一设置显存上限),请直接配置
five.modelScene.parameter。它是继承链的根节点,其设置会向下传递给所有 Model 和 ViewLayer。Why modelScene? (生命周期优势):
Model实例是跟随 Work 加载生命周期的(需five.load(work)后才能访问,且切换 Work 会销毁重建)。 相比之下,ModelScene是常驻对象。因此,使用modelScene进行配置更安全且持久,既无需等待 Work 加载完成,也无需担心切换 Work 导致配置丢失。
// 1. 设置全局最大显存 (影响所有模型)
five.modelScene.parameter.set('maxMemoryUsage', 512);
// 2. 设置全局半透明
five.modelScene.parameter.set('opacity', 0.5);
// 场景中大部分模型不产生阴影
five.modelScene.parameter.set('castShadow', false);
// 但让特定的“主角”模型产生阴影
const heroModel = five.models[0];
heroModel.parameter.set('castShadow', true);
// 假设之前设置了 opacity
five.modelScene.parameter.set('opacity', 0.5);
// ... 一段时间后 ...
// 移除该设置,恢复默认值 (或继承值)
five.modelScene.parameter.reset('opacity');
// 获取当前对象上的配置(如果未设置,则为 undefined)
const ownOpacity = five.modelScene.parameter.opacity;
// 获取最终生效的配置(计算继承链后的值)
const finalOpacity = five.modelScene.parameter.resolveValue().opacity;
tags: [配置, 参数, 继承, 覆盖, 全局配置, 局部配置, parameter, config, hierarchy, api, set, reset, modelScene]