前4种是比较常用的光源。
var ambientLight = new THREE.AmbientLight(‘#0c0c0c’); // ( color : Integer, intensity : Float )
scene.add(ambientLight);
还应该将物体材质换为对光照有反应的材质:
点光源是一种单点发光,照射全部方向的光源,例如生活中的照明弹就属于点光源,由于点光源是向所有方向发射光线,因此不会产生阴影,
它有颜色color,强度intensity,距离distance,位置position,是否可见visible等几个属性,
PointLight光源的distance属性决定的是光线可以照射多远,值为0时,表示光线的亮度不会随着距离的增加而递减
var pointColor = "#ccffcc";
var pointLight = new THREE.PointLight(pointColor); // ( color : Integer, intensity : Float, distance : Number, decay : Float )
pointLight.distance = 100;//距离,决定了光线可以照射多远
pointLight.intensity = 1;//强度
scene.add(pointLight);
聚光灯光源有一种锥形的效果,例如日常生活中的手电筒,灯笼等,该光源具有下面的属性
// white spotlight shining from the side, casting a shadow
var spotLight = new THREE.SpotLight( 0xffffff ); //( color : Integer, intensity : Float, distance : Float, angle : Radians, penumbra : Float, decay : Float )
spotLight.position.set( 100, 1000, 100 );
spotLight.castShadow = true;
spotLight.shadow.mapSize.width = 1024;
spotLight.shadow.mapSize.height = 1024;
spotLight.shadow.camera.near = 500;
spotLight.shadow.camera.far = 4000;
spotLight.shadow.camera.fov = 30;
scene.add( spotLight );
copy(source: SpotLight)
方向光也称无限光(类似于太阳光的一种光源)
该光源可以看做是距离很远很远的光源,以至于该光源所发出的所有光线都是相互平行的,方向光光源的一个范例就是太阳,方向光光源不像聚焦光那样离目标越远越暗淡,被方向光光源照亮的整个区域接收到的光强是一样的
方向光光源的shadowCameraNear,far,left,right,top,bottom六个属性构成了一个方块的范围, 在这个方块的范围内的所有对象都可以投影或者接收投影,包围对象的方块范围定义的越紧密,投影的效果越好
var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 ) //( color : Integer, intensity : Float );
directionalLight.position.set(-40, 60, -10);
directionalLight.castShadow = true;
directionalLight.shadowCameraNear = 10;
directionalLight.shadowCameraFar = 40;
directionalLight.shadowCameraLeft = -10;
directionalLight.shadowCameraRight = 10;
directionalLight.shadowCameraTop = 10;
directionalLight.shadowCameraBottom = -10;
directionalLight.distance = 0;
directionalLight.intensity = 0.5;
directionalLight.shadowMapHeight = 1024;
directionalLight.shadowMapWidth = 1024;
光源示意图:
一种直接位于场景上方的的光源,颜色从天空颜色逐渐褪色到地面颜色 ,不能用于投射阴影
我们模拟室外光照的时候,可以使用方向光源来模拟太阳,再添加一个环境光源,为场景添加基础色, 但是这样看起来不太自然,因为室外的光并不都是来自于上方,很多是来自于空气的散射和地面的反射,以及其他物体的反射,所以在使用方向光源来模拟太阳的情况下再添加一个半球光就自然多了.
HemisphereLight(天空的反光颜色,地面的反光颜色,光的强度);
copy(source: HemisphereLight)
当我们直接朝着太阳拍照时就会出现镜头眩光,对于游戏或者三维图像来说,镜头眩光会使得场景看起来更真实
LensflareElement( texture : Texture, size : Float, distance : Float, color : Color, blending : Materials ) // 除了第一个参数其余均为可选
blending 默认THREE.NormalBlending
在一个矩形平面上均匀的发出光,模拟照明的窗户或条形照明
不支持阴影,仅仅MeshStandardMaterial和MeshPhysicalMaterial支持
还需要RectAreaLightUniformsLib.js
ReactAreaLight(color: Integer,intensity: Float,width: Float,height: Float)
1) 环境光源没有位置概念,会将颜色应用到场景的每一个物体上,主要作用是弱化阴影,给场景添加颜色 2) 点光源类似于照明弹,朝所有的方向发光,因此不产生阴影 3) 聚光灯光源类似于手电筒,形成锥形的光束,随着距离的增加而变弱,可以设定生成阴影 4) 方向光光源类似于太阳,从很远的地方发出的平行光束,距离越远,衰减的越多 5) 想要一个自然的室外效果,除了添加环境光弱化阴影,添加聚光灯为场景增加光线,还需要使用半球光光源将天空和空气以及地面的散射计算进去,使得更自然,更真实 6) 平面光光源定义了一个发光的发光体,需要使用webgl的延迟渲染机制 7) 眩光效果,在有太阳的时候使用眩光光源,会使得场景更真实 )