background-image

Three.jsのPointLightの明るさが変わって戸惑った話

投稿日:
three.jsのPointLightの仕様が変わって困った話

あるときバージョンの異なるThree.jsを触っていたら、PointLightの明るさが全然違うということに気づきました。

r152とr175での見え方の違い

Three.js(r152)

Three.js(r152)での見え方。明るい

Three.js(r175)

Three.js(r175)での見え方。暗い

どうでしょうか?古いバージョンの方が明るく、新しいバージョンの方が暗く見えているのが分かるかと思います。

原因は下記の記事の中で紹介されていました。

  • PointLightとSpotLightの光度を数百倍に強くする
  • それ以外のライトの強度をMath.PI倍にする

私の場合、明るく見えている方がr152で暗く見えているのがr175なので、ちょうどこの破壊的変更の影響を受けているということでした。

今回は上記の「PointLightとSpotLightの光度を数百倍に強くする」の対処法で解決しました。

//変更前のコード
const pLight = new THREE.PointLight(0xffffff, 1, 200);
pLight.position.set(-26, 7, 100);
scene.add(pLight);

//変更後のコード
const pLight = new THREE.PointLight(0xffffff, 9000, 200);
pLight.position.set(-26, 7, 100);
scene.add(pLight);

同じような見た目になるまで調整を繰り返しましたが、数百倍どころではありませんでした…(結果的に9000倍です)

そのレンダリング結果の比較が下記になります。

Three.js(r152)

Three.js(r152)での見え方。明るい

Three.js(r175修正後)

Three.js(r175修正後)での見え方。r152とほぼ同じような見え方に。

これで見た目上は似たような結果となりましたが、「それ以外のライトの強度をMath.PI倍にする」とありますので、AmbientLightやDirectionalLightを使用している場合はそれらの強度にMath.PIをかけることで同じような見た目を再現できるとのことです。

©UCHIWA Creative Studio.all rights reserved.