<pc-scene>
<pc-scene> 定义应用渲染的场景,包括实体层级根,以及作用于全部内容的雾、曝光、高斯泼溅、光照和重力。
用法
- 必须直接位于
<pc-app>下。
属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
exposure | Number(数字) | "1" | 整体亮度倍率。通过底层 scene.physicalUnits 启用物理光照单位后忽略 |
fog | Enum(枚举) | "none" | 雾类型:"none" | "linear" | "exp" | "exp2" |
fog-color | Color(颜色) | "0 0 0" | 空格分隔 RGB、十六进制或颜色名称 |
fog-density | Number(数字) | "0" | 指数雾密度 |
fog-end | Number(数字) | "1000" | 线性雾结束距离 |
fog-start | Number(数字) | "1" | 线性雾起始距离 |
gsplat-dither | Enum(枚举) | "bluenoise" | 随机渲染覆盖率抖动:"bayer2" | "bayer4" | "bayer8" | "bayer16" | "bluenoise" | "ignnoise"。仅启用 gsplat-stochastic 时生效,时间抗锯齿下蓝噪声效果最佳 |
gsplat-splat-budget | Number(数字) | "1000000" | 全场景高斯点预算,在流式资源间分配,按预算模式使用。0 或更小表示无预算,详见细节层级 |
gsplat-splat-budget-mode | Enum(枚举) | "target" | "target" | "limit"。target 无论距离都提高细节直至用满,limit 按各 <pc-gsplat> 距离决定,只为满足预算而降低,详见细节层级 |
gsplat-stochastic | Boolean(布尔) | "false" | WebGPU 随机 Alpha 渲染:不排序,使用抖动覆盖率和深度写入。省排序但带噪声,需时间抗锯齿平滑。依赖深度,保持 <pc-app> 的 depth-buffer 启用,WebGL 忽略 |
gsplat-use-fog | Boolean(布尔) | "true" | 是否应用场景雾 |
gsplat-use-tonemap | Boolean(布尔) | "true" | 是否应用摄像机色调映射与场景曝光。false 保留存储颜色,适合已可直接显示的捕获;雾仍生效 |
gravity | Vector3 | "0 -9.81 0" | 刚体重力 X Y Z |
lighting-max-lights | Number(数字) | "255" | 每帧聚簇灯光上限,引擎限制在 1 到设备上限之间,最多 65535,超出灯光被忽略。超过 255 会使灯光网格内存翻倍 |
应用启动或向运行中应用插入 pc-scene 时,设置都会在脚本 initialize() 前应用,因此脚本从一开始就读取到正确值。应用和物理时间缩放位于 <pc-app>。
事件
场景是所有实体祖先,因此实体指针事件会冒泡到它,可在此统一委托处理,通过 event.target 查命中实体:
document.querySelector('pc-scene').addEventListener('click', (event) => {
console.log(`Clicked ${event.target.getAttribute('name')}`);
});
场景监听器也计入事件分发条件,实体自身无需监听。按下和释放位于不同顶层实体时,click 目标为最近共同祖先 pc-scene。指针整体进入或离开场景实体时还触发 pointerenter/pointerleave,可用于统一切换光标。
示例
方块逐渐隐入线性雾。可修改 fog-color,使其匹配摄像机 clear-color,或将 fog 改为 exp、fog-density 为 0.15:
<pc-app>
<pc-scene fog="linear" fog-color="#4a5568" fog-start="2" fog-end="10">
<pc-entity name="camera" position="0 1.5 4" rotation="-10 0 0">
<pc-camera clear-color="#4a5568"></pc-camera>
</pc-entity>
<pc-entity name="light" rotation="45 30 0">
<pc-light></pc-light>
</pc-entity>
<pc-entity name="box-1" position="-1 0.5 0">
<pc-render type="box"></pc-render>
</pc-entity>
<pc-entity name="box-2" position="0 0.5 -3">
<pc-render type="box"></pc-render>
</pc-entity>
<pc-entity name="box-3" position="1 0.5 -6">
<pc-render type="box"></pc-render>
</pc-entity>
<pc-entity name="box-4" position="2 0.5 -9">
<pc-render type="box"></pc-render>
</pc-entity>
<pc-entity name="ground" position="0 -0.5 -4" scale="10 1 20">
<pc-render type="box"></pc-render>
</pc-entity>
</pc-scene>
</pc-app>
JavaScript 接口
可以通过 SceneElement API创建和操作元素。
scene 是底层 Scene,用于配置雾、曝光和天空。所属应用创建前为 null,页面代码应先等待就绪。
另请参阅
<pc-app>:应用和时间缩放。<pc-sky>:天空盒与基于图像的光照。<pc-camera>:曝光后的色调映射。<pc-rigid-body>:受重力影响的刚体。