Javascript 为什么使用贴图时扩展的THREE.MeshStandardMaterial无法显示阴影?
我需要一种Three.js材质,它可以让我在接收聚光灯光源的阴影时,将一种纹理交叉淡入另一种纹理Javascript 为什么使用贴图时扩展的THREE.MeshStandardMaterial无法显示阴影?,javascript,three.js,glsl,Javascript,Three.js,Glsl,我需要一种Three.js材质,它可以让我在接收聚光灯光源的阴影时,将一种纹理交叉淡入另一种纹理 const plane = new THREE.Mesh( new THREE.PlaneGeometry(200, 200, 1, 1), new TextureFadeMaterial({ t: 0.5, map: texture1, mapDest: texture2, }) ); plane.receiveShadow
const plane = new THREE.Mesh(
new THREE.PlaneGeometry(200, 200, 1, 1),
new TextureFadeMaterial({
t: 0.5,
map: texture1,
mapDest: texture2,
})
);
plane.receiveShadow = true;
所以我继续“扩展”了THREE.MeshStandardMaterial,添加了制服mapDest
(第二种纹理)和t
(数字0..1)。我修改了map\u片段
块,根据t的值将map
和mapDest
混合在一起
问题是,当我让它渲染纹理时,阴影就消失了。事实上,只要我把vec4 texelColor=texture2D(map,vUv)除了map_片段
块(出现在负责阴影的代码之前),阴影消失了(非常奇怪,因为texelColor
从未在这个测试用例中使用)
我想知道这是为什么
我通过将修改后的map_片段
块移动到片段着色器的末尾(在执行灯光/阴影代码之后)使其工作
以下是最终的TextureFadeMaterial代码:
(见第156ff和187ff行)
如果您感兴趣,以下是未包装的MeshStandardMaterial片段着色器代码: