ThreeJS点光源导致GLB模型纹理显示异常问题咨询
你的问题大概率是模型烘焙/导出环节的材质/UV问题,和光源无关——毕竟普通MeshStandardMaterial立方体显示正常,说明ThreeJS的渲染环境是没问题的。结合Blender烘焙阴影的背景,以下是常见原因和解决办法:
UV重叠或烘焙通道错误
Blender烘焙阴影时,通常需要单独的第二UV集(Lightmap UV),如果这个UV集存在重叠、拉伸,或者导出时没包含这个UV通道,ThreeJS采样纹理就会出现破碎。
解决:打开Blender的UV编辑器,切换到烘焙用的UV集,检查是否有面重叠;导出GLB时,在导出选项里勾选UVs,确保所有UV集都被导出。烘焙纹理的材质关联错误
你可能在Blender里完成烘焙后,没把烘焙贴图正确关联到材质的对应通道(比如把阴影烘焙图连到了Base Color而非Lightmap/Emissive),或者导出时没带上纹理文件。
解决:在Blender材质编辑器里,确认烘焙的阴影贴图正确连接到Principled BSDF的对应输入(比如用Lightmap节点,或者作为Emissive Map);导出GLB时勾选Export Textures和Export Materials,避免纹理丢失。GLB材质兼容性问题
ThreeJS的GLTFLoader对Blender某些特殊烘焙设置的支持有限,比如用Cycles烘焙后直接导出未转换的材质,或者烘焙贴图的格式/色彩空间设置错误。
解决:导出前把Blender材质转为Principled BSDF,确保烘焙贴图的色彩空间设为Non-Color(阴影贴图不需要色彩校正);导出后可以用ThreeJS的GLTFLoader加载时,打印材质的属性,确认lightMap或emissiveMap是否正确赋值。纹理采样模式不匹配
Blender里纹理的重复模式(Repeat/Clamp)如果和ThreeJS里的设置冲突,也会导致纹理破碎。比如Blender里设为Repeat但UV超出0-1范围,ThreeJS默认可能是Clamp,就会出现拉伸错误。
解决:在Blender里把烘焙纹理的采样模式设为Clamp;加载模型后,在ThreeJS里设置材质的wrapS和wrapT为THREE.ClampToEdgeWrapping。法线错误(次要可能性)
虽然立方体显示正常,但如果模型本身法线翻转或计算错误,也可能影响纹理渲染。
解决:在Blender里选中模型,执行Mesh > Normals > Recalculate Outside,导出时勾选Export Normals。
内容的提问来源于stack exchange,提问作者LCAYSS

