1

我有以下场景:

在此处输入图像描述

如您所见,我为定向光源激活了阴影。问题是当我使用顶点着色器(使用)更改树顶顶点时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) =>
// {

// }

场景中创建的所有网格都经过此函数。如果取消注释第一行注释,来自太阳的阴影会消失,但来自指针的阴影仍然存在。

4

0 回答 0