Three.jsのライトについていくつか試してみます。
サンプルコード
全体のコードは以下の通りです。
import * as THREE from 'three'; import {OrbitControls} from 'three/addons/controls/OrbitControls.js'; // シーンの作成 const scene = new THREE.Scene(); // カメラの作成 const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); // ライトの作成 // ここに追加 // レンダラーの作成 const renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // カメラ操作の設定 const controls = new OrbitControls(camera, renderer.domElement); // カメラの位置変更と更新 camera.position.set(200, 100, 200); controls.update(); // オブジェクトの作成 const geometry = new THREE.BoxGeometry(100, 100, 100); const material = new THREE.MeshStandardMaterial(); const object = new THREE.Mesh(geometry, material); scene.add(object); function animate() { renderer.render(scene, camera); } renderer.setAnimationLoop(animate);
ここにいくつかのライトを追加して、動作を試してみます。
AmbientLight
AmbientLightはすべてのオブジェクトを全体的に均等に照らします。
引数の1つ目は色、2つ目はライトの強さになります。
// ライトの作成 const light = new THREE.AmbientLight("red", 1); scene.add(light);
オブジェクト全体に均等にライトが適用されました。
AmbientLightのデモページ
2つ目の引数のライトの強さを変更してみます。
// ライトの作成 const light = new THREE.AmbientLight("red", 3); scene.add(light);
先ほどと比べて、ライトの光が強くなりました。
AmbientLightのデモページ2
DirectionalLight
DirectionalLightは太陽光に似た光源で、距離を問わず光源から特定の方向に均一に光を放射します。
引数は先ほどと同じで、1つ目は色、2つ目はライトの強さになります。
// ライトの作成 const light = new THREE.DirectionalLight("red", 1); light.position.set(200, 100, 200); scene.add(light);
これで光源からみてライトの当たる範囲には光が適用されますが、裏側のライトの当たらない範囲は暗いままになります。
DirectionalLightのデモページ
HemisphereLight
HemisphereLightは上(天頂)からと下(地面)からの光を照射します。
引数の1つ目は上の色、2つ目は下の色、3つ目はライトの強さになります。
照射状態が分かりやすいように、オブジェクトを球体に変更して試してみます。
// ライトの作成 const light = new THREE.HemisphereLight("red", "blue", 1); scene.add(light); ~略~ // オブジェクトの作成 const geometry = new THREE.SphereGeometry(100);
上からは赤、下からは青の光を照射して、徐々にグラデーションがかって表示されます。
HemisphereLightのデモページ
PointLight
PointLightは裸電球のように、一点から全方向に光を放射します。
引数の1つ目は色、2つ目はライトの強さ、3つ目はライトの最大範囲、4つ目は距離に応じて暗くなる量になります。
光源の位置が分かりにくいため、ヘルパーも合わせて表示して試してみます。
// ライトの作成 const light = new THREE.PointLight("red", 400); light.position.set(60, 80, 80); scene.add(light); const lightHelper = new THREE.PointLightHelper(light, 5); scene.add(lightHelper);
RectAreaLight
RectAreaLightは四角の光源で、平面の面全体に均一に光を放射します。
引数の1つ目は色、2つ目はライトの強さ、3つ目はライトの幅、4つ目はライトの高さになります。
こちらもヘルパーを使って光源の位置を表示しますが、アドオンでの追加が必要になります。
~略~ import { RectAreaLightHelper } from 'three/addons/helpers/RectAreaLightHelper.js'; ~略~ // ライトの作成 const light = new THREE.RectAreaLight("red", 10, 50, 100); light.position.set(40, 60, 120); scene.add(light); const lightHelper = new RectAreaLightHelper(light); scene.add(lightHelper);
SpotLight
SpotLightは一点から一方向に光を放射して、光源から遠ざかる程照射範囲が広くなります。
引数は6つあり、1つ目は色、2つ目はライトの強さになります。
ヘルパーを使って光源の位置を表示して試してみます。
// ライトの作成 const light = new THREE.SpotLight("red", 600); light.position.set(80, 80, 120); scene.add(light); const lightHelper = new THREE.SpotLightHelper(light); scene.add(lightHelper);
コメントが承認されるまで時間がかかります。