如何在Three.js与Blender中提升白色模型的洁白度?
模型增白调整方案
针对你想让白色模型达到更洁白的效果,结合当前Blender和网页端的表现,给出以下可行调整方案:
1. 强制覆盖模型材质,提升白色纯度
加载GLTF模型后,遍历所有网格材质,直接设置纯白基础色+适度自发光,让模型本身的白色更饱和:
loader.load( modelUrl, function (gltf) { globalGltf = gltf.scene // 遍历所有网格对象,调整材质 globalGltf.traverse((obj) => { if (obj.isMesh) { // 设置基础色为纯白 obj.material.color.set('#ffffff'); // 添加自发光增强亮度,强度按需调整 obj.material.emissive.set('#ffffff'); obj.material.emissiveIntensity = 0.3; // 若为PBR材质,提高粗糙度让白色更均匀,避免局部过暗 if (obj.material.isMeshStandardMaterial) { obj.material.roughness = 0.8; } } }); globalGltf.scale.set(6, 15, 6) globalGltf.rotation.set(0, -0.2, 0) scene.add(globalGltf) }, undefined, function (error) { console.error(error) } )
2. 优化光照组合,避免暗部偏灰
当前SpotLight强度过高(7500)易导致曝光不均,改用环境光+方向光的柔和组合,保证整体亮度均匀:
// 移除原SpotLight,替换为以下光照 // 环境光:照亮暗部,保证基础亮度 const ambientLight = new THREE.AmbientLight('#ffffff', 0.8); scene.add(ambientLight); // 主方向光:提供立体感,强度适中 const directionalLight = new THREE.DirectionalLight('#ffffff', 1.5); directionalLight.position.set(7.5, 5.5, 2.5); // 可选:开启阴影增强真实感 directionalLight.castShadow = true; directionalLight.shadow.mapSize.set(2048, 2048); scene.add(directionalLight);
3. 开启色调映射,提升整体亮度
Three.js默认色调映射会压制亮部,开启ACES色调映射并调整曝光度,让白色更通透:
const renderer = new THREE.WebGLRenderer({ canvas: canvas.value, alpha: true, antialias: true }); // 启用ACES色调映射 renderer.toneMapping = THREE.ACESFilmicToneMapping; renderer.toneMappingExposure = 1.2; // 数值越大越亮,按需微调 renderer.setPixelRatio(window.devicePixelRatio) renderer.setSize(350, 250) parentElement.appendChild(renderer.domElement)
4. 修正窗口Resize逻辑错误
当前Resize时会强制修改渲染尺寸为窗口大小,覆盖了初始设置的350x250,导致显示异常,修改为:
function onWindowResize() { // 保持渲染尺寸固定,仅更新相机比例 camera.aspect = 350 / 250; camera.updateProjectionMatrix(); // 不要修改renderer.setSize,避免破坏初始布局 }
额外Blender导出提示
确保Blender导出GLB时,已将材质的基础色设为纯白,按需开启自发光,并勾选「导出材质」选项,避免Three.js加载后材质参数偏差。
内容的提问来源于stack exchange,提问作者Robert Juszczyński
相关产品推荐
相关产品推荐

