Mik*_*ike 5 javascript 3d light three.js
我有一个渲染 3D 模型的 Three.js 场景。我正在使用 aDirectionalLight在该模型上投射阴影。
我看到发生的是针对模型的梯度步进效果,就好像该模型由许多子模型组成,每个子模型都有自己的轻微阴影。
下面是效果截图:
为什么会发生这种情况以及如何预防?
一些不同的代码片段 - 这个场景发生了很多事情,所以我试图突出显示重要的部分:
相机和定向光源:
// Camera
camera = new THREE.PerspectiveCamera( 30, (window.innerWidth / window.innerHeight), 1, 10000 );
camera.position.x = 1000;
camera.position.y = 50;
camera.position.z = 1500;
scene.add( camera );
// LIGHTS
var lightFront = new THREE.DirectionalLight( 0xffffff, 0.7 );
lightFront.position.x = 120;
lightFront.position.y = 120;
lightFront.position.z = 150;
lightFront.castShadow = true;
lightFront.shadow.camera.left = -6;
lightFront.shadow.camera.right = 6;
scene.add( lightFront );
Run Code Online (Sandbox Code Playgroud)
材料是 a THREE.Mesh,具有:
material.normalScale = new THREE.Vector2( 1, 1 );
material.castShadow = true;
material.receiveShadow = false;
material.shininess = 100;
Run Code Online (Sandbox Code Playgroud)
渲染器具有以下内容:
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.shadowMap.soft = true;
renderer.shadowMap.bias = 0.0039;
renderer.shadowMap.darkness = 0.5;
renderer.shadowMap.width = 1024;
renderer.shadowMap.height = 1024;
Run Code Online (Sandbox Code Playgroud)
我尝试过各种renderer设置但运气不佳。
我正在运行 Three.js 的修订版 82。
小智 0
这可能是由于阴影贴图的分辨率较低造成的,默认情况下为512 * 512.
您可以使用以下语法增加它:
lightFront.shadow.mapSize.width = lightFront.shadow.mapSize.height = 1024;
Run Code Online (Sandbox Code Playgroud)
然而,这会大大增加计算时间,从而导致帧速率下降。
根据您的目标设备有一个上限,可以在此处找到。
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |