Open qugemingzizhenmafan opened 3 years ago
DirectionalLightHelper HemisphereLightHelper PointLightHelper RectAreaLightHelper SpotLightHelper 灯光的辅助类,直观地展现灯光本身。 除了环境光都有。
平行光 点光源 聚光灯
环境光 半球光 平面光
.shadow.camera 这用于生成场景的深度图;从光的角度来看,其他物体背后的物体将处于阴影中。只有处于相机视野里的物体才会有阴影效果。
renderer.shadowMap.enabled = true renderer.shadowMap.type = THREE.PCFSoftShadowMap
light.castShadow = true 阴影相机视野区域
mesh.castShadow = true // 此物体会导致阴影的产生 mesh.receiveShadow = true // 此物体会接收物体(其他或自身)产生的阴影
更好地模拟自然光下的情况
const pmremGenerator = new THREE.PMREMGenerator(renderer);
pmremGenerator.compileEquirectangularShader();
new RGBELoader().setDataType(THREE.UnsignedByteType).load(
path,
texture => {
const renderTarget = pmremGenerator.fromEquirectangular(texture);
const envMap = renderTarget.texture;
pmremGenerator.dispose();
// 第一种方式,加给背景
this.scene.environment = envMap; // 给场景添加环境光(贴图)效果
// 第二种方式,加给物体
if (obj && obj.isMesh) {
const materials = obj.material;
if (Array.isArray(materials)) {
materials.forEach(material => {
material.envMap = envMap;
if (envMapIntensity) material.envMapIntensity = envMapIntensity;
material.needsUpdate = true;
});
} else {
materials.envMap = envMap;
if (envMapIntensity) materials.envMapIntensity = envMapIntensity;
materials.needsUpdate = true;
}
}
}
);
Material(材质) .envMap .envMapIntensity
Lights灯光
环境光
AmbientLight( color : Integer, intensity : Float ) 环境光会均匀的照亮场景中的所有物体。
预览:https://gltf-viewer.donmccurdy.com/
平行光(无限光)
DirectionalLight( color : Integer, intensity : Float ) 平行光是沿着特定方向发射的光。这种光的表现像是无限远,从它发出的光线都是平行的。常常用平行光来模拟太阳光 的效果; 太阳足够远,因此我们可以认为太阳的位置是无限远,所以我们认为从太阳发出的光线也都是平行的。
属性
.position : Vector3 假如这个值设置等于 Object3D.DefaultUp (0, 1, 0),那么光线将会从上往下照射。
.target : Object3D 平行光的方向是从它的位置到目标位置。默认的目标位置为原点 (0,0,0)。 注意: 对于目标的位置,要将其更改为除缺省值之外的任何位置,它必须被添加到 scene 场景中去。 scene.add( light.target );
这意味着它的方向是从一个平行光的位置 position 到 target的位置。 预览:https://threejs.org/examples/#webgl_geometry_extrude_splines
半球光
HemisphereLight( skyColor : Integer, groundColor : Integer, intensity : Float ) 光源直接放置于场景之上,光照颜色从天空光线颜色颜色渐变到地面光线颜色。
预览:https://threejs.org/examples/#webgl_lights_hemisphere
点光源
PointLight( color : Integer, intensity : Float, distance : Number, decay : Float ) 从一个点向各个方向发射的光源。一个常见的例子是模拟一个灯泡发出的光。
预览:https://threejs.org/examples/#webgl_lensflares
平面光光源
RectAreaLight( color : Integer, intensity : Float, width : Float, height : Float ) 平面光光源从一个矩形平面上均匀地发射光线。这种光源可以用来模拟像明亮的窗户或者条状灯光光源。 注意事项:
只支持 MeshStandardMaterial 和 MeshPhysicalMaterial 两种材质。
预览:https://threejs.org/examples/#webgl_lights_rectarealight
聚光灯
SpotLight( color : Integer, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float ) 聚光灯是从一个方向上的一个点发出,沿着一个圆锥体,它离光越远,它的尺寸就越大。
预览:https://threejs.org/examples/#webgl_lights_spotlight