Three.js 材质与光照
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 指南,安装规范名 @user_3c6cb52e/threejs-materials-lighting-ryvw 对应的技能。
技能介绍
解决什么问题
three.js 场景里最常见的渲染翻车场景:模型全身纯黑或灰平平毫无立体感。典型原因是给网格用了 MeshStandardMaterial 却没有加任何光源,也没有设置 scene.environment;或者照着五年前的教程调光照强度,结果整个场景暗得像没开灯——r155 之后 three.js 默认使用物理光照模型,旧教程的强度值已经不适用。
另一个高频痛点是阴影不生效:明明加了光,影子死活不出来,或者影子被截断、呈块状、伴随 shadow acne。这些都不是 three.js 的 bug,而是配置开关没有全部打开。
核心能力与工作流
这个技能覆盖从材质选择到光照验证的完整链路:
- 按需求选材质:
MeshStandardMaterial(PBR,受光照和环境反射影响)用于写实场景;MeshPhysicalMaterial支持 clearcoat 和 transmission;MeshBasicMaterial不发光不受光,适合 UI 或调试;MeshNormalMaterial/MeshDepthMaterial用于排障。 - 光照搭建:受光材质必须有光源或环境贴图。推荐
AmbientLight/HemisphereLight做柔和补光,配合DirectionalLight做主光(r155+ 强度建议 1–3)。 - 阴影三开关:
renderer.shadowMap.enabled = true、光源castShadow = true、网格的castShadow/receiveShadow缺一不可,之后还要调好光源的正交相机范围。 - 环境光照(IBL):给
scene.environment赋 equirectangular 或 PMREM 处理后的 HDR 贴图,PBR 材质自动拾取反射,无需额外代码。 - 真实光照验证:确认高光随主光移动、影子位置正确、反射合理。
适用边界
- 渲染器/相机/循环的搭建属于
threejs-scene-setup,加载 GLTF 模型属于threejs-gltf-loading——这个技能专注材质与光照本身。 - 自定义
ShaderMaterial/GLSL 不在此范围内,可参考shader-programming。 - 附件
references/materials-lights-table.md提供材质速查表、光源参数/单位、透明度与 alphaTest 顺序,以及不用 HDR 文件通过PMREMGenerator/RoomEnvironment生成环境光的路线。
使用场景
- Three.js场景里模型全身纯黑或灰平无立体感,需要排查是缺光源、缺环境贴图还是材质选错。
- 加了DirectionalLight但阴影死活不出来,需要确认三个开关是否全部打开并调好阴影相机范围。
- 照着旧教程设置光照强度结果场景太暗,需要按r155+物理光照标准调整参数或补充环境光。
- PBR材质想要真实的环境反射,需要给scene.environment挂载HDR贴图或通过PMREM生成环境光。
适合人员
- 前端工程师,正在用three.js开发Web 3D可视化项目,遇到模型渲染发黑或平淡需要排查材质与光照配置。
- Three.js初学者,照着教程搭场景但结果总是太暗或没有阴影,需要理解r155+光照变化和阴影三开关机制。
- 技术美术,负责优化游戏或三维产品的PBR材质表现,需要环境光照和阴影的正确配置方法来提升画面真实感。
- 3D Web开发者,在产品页面嵌入3D模型展示,需要材质看起来真实而不是塑料感。