关于 threejs-lighting
Three.js Lighting 是用于在 Three.js 场景中选择灯光、配置阴影和添加基于图像照明的技能。它帮助开发者为 PBR 材质调整照明,同时权衡视觉效果与渲染成本。
主要功能
- 01按场景需求选择灯光
- 02配置阴影贴图与范围
- 03设置基于环境的照明
- 04诊断常见照明瑕疵
- 05评估照明质量成本
适用场景
- 01用太阳光照亮户外场景
- 02构建带环境反射的产品场景
- 03修复阴影痤疮或过曝
- 04为目标硬件调整阴影质量
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ akillness/ jeo-skills --skill threejs-lighting安装后在 Claude Code 中输入/threejs-lighting确认已加载。
附带文件SKILL.toonevals/evals.json
详细介绍
Three.js 光照
此技能用于选择光源、配置阴影行为和基于图像的照明。将 PBR 表面设置交给 threejs-materials,将 HDR/环境资源设置交给
threejs-textures,将屏幕空间效果交给 threejs-postprocessing。
何时使用此技能
- 通过具有物理意义的直接光照和环境光照来照亮场景
- 配置方向光、点光或聚光灯阴影,同时避免质量开销失控
- 为 PBR 反射和漫射照明设置 HDR 环境
- 排查光照过黑、过平、过曝、容易产生阴影瑕疵或性能开销过大的问题
说明
步骤 1:从材质和曝光的实际情况入手
- 确认网格使用了会对光照产生响应的材质,例如
MeshStandardMaterial;不受光照影响的MeshBasicMaterial无法体现光照变化。 - 在使用任意光照值进行补偿之前,先确定渲染器的颜色和色调设置。
- 判断场景需要直接光照、基于图像的照明,还是两者兼有。单个环境光会掩盖形状;应谨慎使用,将其作为补光,而不是万能修复手段。
步骤 2:选择最精简的光源模型
| 视觉需求 | 默认选项 |
|---|---|
| 类似太阳/月亮的方向光源 | DirectionalLight |
| 局部灯泡或小型发光体 | PointLight |
| 带衰减的光锥/投影灯 | SpotLight |
| 柔和的天空/地面补光 | HemisphereLight |
| 大型摄影棚面光源 | RectAreaLight |
| PBR 反射和环境响应 | 环境贴图/IBL |
const key = new THREE.DirectionalLight(0xffffff, 3);
key.position.set(4, 6, 3);
key.castShadow = true;
scene.add(key);
scene.add(new THREE.HemisphereLight(0xcfe8ff, 0x223344, 1));
设置期间使用辅助对象,投入生产视图前将其移除或设置为受控启用。
步骤 3:有意设置阴影
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
mesh.castShadow = true;
mesh.receiveShadow = true;
key.shadow.mapSize.set(1024, 1024);
key.shadow.camera.near = 0.5;
key.shadow.camera.far = 30;
将阴影相机/视锥体缩紧到真实的投射物和接收物范围。只有在目标硬件上完成性能分析后,才增加贴图尺寸、投射阴影的光源数量或更新频率。排查阴影痤疮/悬浮现象时,应检查几何体比例、偏移和法线偏移,而不是盲目增大数值,直到瑕疵反转。
步骤 4:在 PBR 需要时添加基于图像的照明
通过适用于所安装 Three.js 版本的加载器/PMREM 流程加载并预处理 HDR/等距柱状资源。设置 scene.environment 以影响材质响应;如果还需要显示环境,则单独设置 scene.background。
步骤 5:验证视觉效果和预算
- 对比关闭/开启阴影、仅使用直接光照以及仅使用 IBL 时的材质响应。
- 测试阴影边缘、移动的投射物以及靠近光源阴影边界的物体。
- 在提升质量等级之前,先使用真实场景密度在目标设备上进行性能分析。
- 确认拆卸时通过纹理加载所有者释放由该功能拥有的环境/渲染资源。
示例
小型产品展示
使用主方向光/面光源、低强度补光和环境贴图。不要用许多带阴影的点光源模拟摄影棚中的每一次反弹;PBR 环境光照通常更稳定、开销也更低。
户外场景
使用一个方向光模拟太阳,加入天空/地面半球光,并将阴影相机限制在可视游戏/视图区域内,仅在需要时跟随该区域。
最佳实践
- 根据材质响应布光,而不只是为了让截图更亮。
- 根据视觉需求,尽可能缩小阴影投射物/接收物范围和阴影视锥体。
- 对 PBR 使用环境贴图,而不是叠加多盏环境光。
- 先在渲染器级别调整色调映射/曝光,再避免扭曲每盏灯的设置。
- 将每次提高阴影质量都视为需要衡量的性能权衡。
参考资料
评论
支持 Markdown