【发布时间】:2018-09-03 21:46:23
【问题描述】:
我可能误解了一些东西,但是...我正在尝试在 three.js 中使用物理上正确的照明和基于物理的渲染
我做了一个简单的场景。在这种情况下只是一架飞机。我在飞机上方 2 个单位(2 米)处放了一个灯。这架飞机使用MeshStandardMaterial,roughness 为 0.9,metalness 为 0。灯的power 设置为 800,如果我理解正确的话,它是 800 流明,相当于一个 60 瓦的灯泡。我设置了renderer.physicallyCorrectLights = true。
结果如下:
这个结果看起来一点也不像高出地板 2 米的 60 瓦灯泡。
我是不是做错了什么?
'use strict';
/* global dat */
function main() {
const canvas = document.querySelector('#c');
const renderer = new THREE.WebGLRenderer({canvas: canvas});
renderer.physicallyCorrectLights = true;
const fov = 45;
const aspect = 2;
const zNear = 0.1;
const zFar = 100;
const camera = new THREE.PerspectiveCamera(fov, aspect, zNear, zFar);
camera.position.set(0, 10, 20);
camera.lookAt(0, 5, 0);
const scene = new THREE.Scene();
scene.background = new THREE.Color('black');
{
const planeSize = 40;
const planeGeo = new THREE.PlaneBufferGeometry(planeSize, planeSize);
const planeMat = new THREE.MeshStandardMaterial({
color: '#C84',
side: THREE.DoubleSide,
roughness: 0.9,
metalness: 0,
});
const mesh = new THREE.Mesh(planeGeo, planeMat);
mesh.rotation.x = Math.PI * -.5;
scene.add(mesh);
}
{
const color = 0xFFFFFF;
const intensity = 1;
const light = new THREE.PointLight(color, intensity);
light.power = 800;
light.decay = 2;
light.distance = Infinity;
light.position.set(0, 2, 0);
scene.add(light);
const helper = new THREE.PointLightHelper(light);
scene.add(helper);
}
function resizeRendererToDisplaySize(renderer) {
const canvas = renderer.domElement;
const width = canvas.clientWidth;
const height = canvas.clientHeight;
const needResize = canvas.width !== width || canvas.height !== height;
if (needResize) {
renderer.setSize(width, height, false);
}
return needResize;
}
function render() {
if (resizeRendererToDisplaySize(renderer)) {
const canvas = renderer.domElement;
camera.aspect = canvas.clientWidth / canvas.clientHeight;
camera.updateProjectionMatrix();
}
renderer.render(scene, camera);
}
render();
window.onresize = render;
}
main();
html, body {
margin: 0;
height: 100%;
}
#c {
width: 100%;
height: 100%;
display: block;
}
<script src=" https://cdnjs.cloudflare.com/ajax/libs/three.js/96/three.min.js"></script>
<canvas id="c"></canvas>
【问题讨论】:
标签: three.js