0

three.js に組み込まれているシャドウ マップ プラグインを利用しようとしています。最初の困難の後、私は多かれ少なかれ許容できるイメージを持っていますが、最後の不具合が 1 つあります。その 1 つは、法線 0,0,1 で、いくつかの (すべて?) サーフェスの上に表示される影です。以下は同じモデルの写真です。

Three.js Three.js

Preview.app (Mac)

Preview.app

そして、影をセットアップするために使用されるコード:

    var shadowLight = new THREE.DirectionalLight(0xFFFFFF);
    shadowLight.position.x = cx + dmax/2;
    shadowLight.position.y = cy - dmax/2;
    shadowLight.position.z = dmax*1.5;
    shadowLight.lookAt(new THREE.Vector3(cx, cy, 0));
    shadowLight.target.position.set(cx, cy, 0);
    shadowLight.castShadow = true;
    shadowLight.onlyShadow = true;
    shadowLight.shadowCameraNear    =  dmax;
    shadowLight.shadowCameraFar     =  dmax*2;
    shadowLight.shadowCameraLeft    = -dmax/2;
    shadowLight.shadowCameraRight   =  dmax/2;
    shadowLight.shadowCameraBottom  = -dmax/2;
    shadowLight.shadowCameraTop     =  dmax/2;
    shadowLight.shadowBias          =  0.005;
    shadowLight.shadowDarkness      =  0.3;
    shadowLight.shadowMapWidth      =  2048;
    shadowLight.shadowMapHeight     =  2048;
    // shadowLight.shadowCameraVisible = true;
    scene.add(shadowLight);

更新: そして、ここに実例があります: http://jsbin.com/okobum/1/edit

4

1 に答える 1

0

コードは正常に見えます。shadowLight.shadowBiasパラメータを操作するだけです。これは常に少し注意が必要です。(バイアスパラメータは負になる可能性があることに注意してください。)

編集:シャドウカメラの近くと遠くの飛行機を締めます。これは、影のにきびとピーターパンの両方を減らすのに役立ちます。たとえば、ライブリンクを設定しshadowLight.shadowCameraNear = 3*dmax;ます。これは私のために働いた。

テーブルトップに奥行きがない場合は、テーブルトップに奥行きを追加してみることもできます。

設定してみてくださいrenderer.shadowMapCullFrontFaces = false。これにより、前面ではなく背面がカリングされます。

于 2012-10-17T17:11:10.063 に答える