用途:解决 three.js 场景中表面渲染发黑或发平的问题,指导选择材质、布置灯光、开启阴影以及设置环境贴图反射(IBL)。适用于代码中出现 MeshStandardMaterial、DirectionalLight 等,或设置 renderer.shadowMap.enabled、scene.environment 的场景。渲染器/相机/循环请参考 threejs-scene-setup,模型加载参考 threejs-gltf-loading,自定义 GLSL 属独立主题。
主要能力:按需求选材质——MeshStandardMaterial(PBR,含 roughness、metalness,响应灯光与 IBL)用于写实;MeshPhysicalMaterial 用于清漆/透射;MeshBasicMaterial(不受光)用于 UI/平面;MeshNormalMaterial/MeshDepthMaterial 用于调试。受光材质需光源或 scene.environment,常用 AmbientLight/HemisphereLight 补光加 DirectionalLight 主光。自 r155 起光照为物理正确,强度高于旧教程(主光约 1–3)。阴影需三处开关:renderer.shadowMap.enabled、灯光 castShadow、网格 castShadow/receiveShadow,并调整阴影相机范围。环境贴图可赋给 scene.environment,PBR 材质自动采用。
使用方式:示例包括 PBR 材质配三灯、无光材质(颜色贴图需设 colorSpace = THREE.SRGBColorSpace)、阴影三开关与正交阴影相机拟合、PBR 贴图(颜色贴图 sRGB,法线/粗糙度保持线性)、HDR 环境光照(HDRLoader,r180 前为 RGBELoader)及 ACESFilmicToneMapping。
限制与常见问题:网格全黑多为受光材质缺光源或环境贴图;场景过暗多为沿用旧强度;阴影不出现是漏了三个开关之一;阴影被裁切或块状需收紧正交视锥并提高 mapSize;阴影痤疮/悬浮可调 shadow.bias 与 normalBias;颜色发白需正确设置贴图色彩空间;PointLight 阴影性能开销大(渲染 6 次),优先用单个投影 DirectionalLight。更多材质对照与灯光参数见 references/materials-lights-table.md。