我有以下场景:
如您所见,我为定向光源激活了阴影。问题是当我使用顶点着色器(使用)更改树顶顶点时material.onBeforeCompile,阴影不会自动更新
所以在尝试解决这个问题时,我了解到由于光源使用深度材质来计算阴影贴图,我还应该更新网格的深度材质......
这就是问题所在。一旦我设置mesh.customDepthMaterial = new THREE.MeshDepthMaterial();,阴影甚至在我改变顶点着色器之前就消失了。
我不知道这是否有帮助,但是当我将网格的材质设置为 时new THREE.MeshDepthMaterial(),没有该onBeforeCompile功能,场景中的所有网格都显示为黑色
编辑:添加代码
这是代码的链接:codepen
搜索 function createObject,其中有一段:
let mesh = new THREE.Mesh(geom, material);
// mesh.customDepthMaterial = new THREE.MeshDepthMaterial();
// mesh.customDepthMaterial.onBeforeCompile = (shader) =>
// {
// }
场景中创建的所有网格都经过此函数。如果取消注释第一行注释,来自太阳的阴影会消失,但来自指针的阴影仍然存在。
