Three.js阴影投射在无遮挡的脸上,低分辨率启动

时间:2013-10-20 20:21:07

标签: javascript three.js shadow-mapping

这是我的问题:

the issue

文本上的阴影不应该存在,尽管我对shadowMap分辨率进行了更改,但没有任何变化。这是用于生成网格的代码:

var materialArray_Flying = [
        new THREE.MeshPhongMaterial( { color: 0xff00ff, ambient: 0xff00ff } ), //face
        new THREE.MeshPhongMaterial( { color: 0x008888, ambient: 0x008888 } )]; //sides

var textGeom_Flying = new THREE.TextGeometry( "{Flying}",
        {
        size: 4, height: .25, curveSegments: 3,
        font: "helvetiker", weight: "bold", style: "normal",
        bevelThickness: 0.025, bevelSize: 0.05, bevelEnabled: true,
        material: 0, extrudeMaterial: 1
        });
var textMesh_Flying = new THREE.Mesh(textGeom_Flying, new THREE.MeshFaceMaterial(materialArray_Flying));
scene.add(textMesh_Flying);
textMesh_Flying.castShadow = true;
textMesh_Flying.receiveShadow = true;

我的渲染器设置如下:

var renderer = new THREE.WebGLRenderer({antialias: true});
renderer.shadowMapEnabled = true;
renderer.shadowMapSoft = true;
renderer.shadowMapType = THREE.PCFSoftShadowMap;
renderer.shadowCameraNear = 3;
renderer.shadowCameraFar = camera.far;
renderer.shadowCameraFov = 50;
renderer.setClearColor(0x000000, 1);
renderer.shadowMapWidth = 4096;
renderer.shadowMapHeight = 4096;

欢迎任何帮助。

1 个答案:

答案 0 :(得分:1)

我相信你所看到的是因为物体在单位空间中非常小,而阴影贴图技术正在努力将这些小浮点数转化为可用的纹理。此外,即使是最小的shadowCameraNear值也非常“瘦”几何形状,但仍然足以“透视”网格。

我可以看到两种解决方案。

1)停止接受主要网格上的阴影

textMesh_Flying.receiveShadow = false;

或者2)增加整个场景的大小/字母的粗细,使阴影算法有些“肉”可以玩。

注意:您可以尝试shadowCameraNear = 0.001;并查看是否也有帮助。

希望有所帮助,