HTML5本身不提供3D建模与灯光功能,实际依赖WebGL及Three.js实现;Three.js需配置AmbientLight、DirectionalLight、PointLight/SpotLight三类光源,缺一不可,且阴影需显式开启并逐对象授权。
HTML5 本身不提供建模或灯光功能——它只是容器。真正负责 3D 渲染、模型加载和灯光控制的是 WebGL(底层)或其封装库,最常用的是 Three.js。所谓“HTML5 建模灯光”,实际是用 Three.js 在 HTML 页面中创建 3D 场景并配置光源。
没有光源,MeshStandardMaterial 或 MeshPhysicalMaterial 这类基于物理的材质会完全变黑;仅靠 MeshBasicMaterial 能显示颜色,但无明暗、无立体感。
AmbientLight:全局环境光,只影响亮度基底,不投射阴影、无方向。适合补光,避免纯黑死角,但加太多会“洗掉”体积感DirectionalLight:类似太阳光,平行光,方向明确,能投射阴影,是塑造形体主结构的核心光源PointLight 或 SpotLight:点光源/聚光灯,用于局部强调(如模型顶部高光、边缘补光),增强空间纵深模型看起来“平”“灰”“发飘”,往往不是模型问题,而是光源配置失当:
AmbientLight 或强度太低(建议从 0.2 起调)renderer.shadowMap.enabled = true,且设 renderer.shadowMap.type = THREE.PCFSoftShadowMap
DirectionalLight 角度太正(如直接照正面),应偏移 20°–45°,并搭配一个较弱的反向 PointLight(强度约主光 1/3)做
辅光MeshStandardMaterial 但没开 metalness / roughness,或光源强度不足(intensity 至少 1.5 起)即使加了 DirectionalLight,默认也不产生阴影——Three.js 要求显式开启且逐对象授权:
立即学习“前端免费学习笔记(深入)”;
renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap;
directionalLight.castShadow = true;
mesh.receiveShadow = true;;需要投射阴影的模型(如人物、道具):
mesh.castShadow = true;
漏掉任意一步,阴影就失效。尤其注意:相机视锥(light.shadow.camera)默认范围很小,模型超出就会“丢影”,需手动扩大:light.shadow.camera.left/right/top/bottom 或用 light.shadow.camera.fit() 自适应。
在手机上开阴影、多光源、PBR 材质极易掉帧。真实项目中建议:
castShadow,改用烘焙阴影贴图或 CSS 模拟投影LightProbe 替代部分 AmbientLight 提升 PBR 真实感且更轻量SpotLight 的 penumbra 和 decay 参数对性能敏感,移动端慎用高值打光不是堆光源数量,而是控制方向、衰减、强度比。一个调准的 DirectionalLight 加一盏柔和辅光,远比五盏乱照的灯更显立体——这点在 Three.js 里比在 Blender 里更需要手调验证。