是否可以将阴影渲染为三个.js而不必从对象投射



我正在制作一个恐怖游戏,想在墙上移动一个影子,但我希望它看起来好像它不是来自任何特定的物体。这是否可能,如果是,我该如何实现?

我觉得动态纹理可能是要走的路,但我希望有一些方法可以使用三个.js阴影贴图

您希望场景对象投射阴影但不可见。

首先确保您的对象将投射适当的阴影,然后通过添加以下内容使对象不可见:

object.material.colorWrite = false;
object.material.depthWrite = false;

如果场景中有其他对象,则需要depthWrite设置。影子映射代码不考虑该属性。

或者,您可以尝试以下方法:

object.material.colorWrite = false;
object.material.transparent = true; // only needed if there are other transparent objects
object.renderOrder = Infinity;

三.js R.92

有两种方法可以实现此目的。其中之一是进入THREE的"引擎盖下".js并分别渲染ShadowMap,对象visibility = true,然后将可见性设置为false,然后渲染场景。

一种更简单的方法是将对象的不透明度分配给非常低的对象。尝试 0.0001。它会投射阴影,但几乎看不见:

var ghostGeom = new THREE.BoxBufferGeometry(1, 1, 1);
var ghostMat = new THREE.MeshBasicMaterial({
color: 0x000000,
transparent: true,
opacity: 0.0001
});
var ghostMesh = new THREE.Mesh(ghostGeom, ghostMat);
ghostMesh.castShadow = true;

或者,您可以在材质上使用AdditiveBlending,颜色设置为漆黑。这将为最终渲染添加0颜色,同时仍投射阴影:

var ghostMat = new THREE.MeshBasicMaterial({
color: 0x000000,
transparent: true,
blending: THREE.AdditiveBlending
});

我认为你需要的是一个Projector,它将在地面或墙壁上投射出四边形纹理。

最新更新