入门 - 2 - 灯光介绍

377 阅读3分钟

灯光会影响物体呈现的明暗和颜色。除非阴影被激活使用,否则所有的物体都允许光线透过自身。为了性能考虑,默认允许前4个灯光在场景中有效,但是这个数量也是可以增加的。

灯光的类型

1、点光Point Light

点光被定义为在3D世界中一个唯一的点,然后光从这个点向各个方向发射。比如:电灯泡

//第二个参数是点光的位置。
var light = new BABYLON.PointLight("pointLight", new BABYLON.Vector3(1, 10, 1), scene);

2、平行光Directional Light

平行光由方向定义,光从指定方向的任意位置发出,具有无限的范围。平行光的一个形象例子就是太阳光,就好比太阳照射到地球一样,会把地球面对太阳的方向全部照亮。

//第二个参数表示平行光的方向
var light = new BABYLON.DirectionalLight("DirectionalLight", new BABYLON.Vector3(0, -1, 0), scene);

3、聚光灯Spot Light

聚光灯由位置position,方向direction,角度angle和指数exponent定义。上面的数值决定了圆锥形光束该从什么位置开始,然后朝哪个方向照射。

角度angle(以弧度为单位)定义了聚光灯圆锥形光束的大小(照亮的区域),指数exponent决定了光在到达目标的途中时,按距离衰减的速度。

//第2个参数是位置、第3个参数是方向,第4个参数角度angle,第5个参数指数exponent
var light = new BABYLON.SpotLight("spotLight", new BABYLON.Vector3(0, 30, -10), new BABYLON.Vector3(0, -1, 0), Math.PI / 3, 2, scene);

4、半球光Hemispheric Light

半球光是模拟环境光的简便方法,它由一个方向参数定义,位于世界坐标中心(0,0,0),一般设置灯光方向朝正上方。而灯光只有设置了颜色属性,才能看到完整的效果。

//第2个参数是方向
var light = new BABYLON.HemisphericLight("HemiLight", new BABYLON.Vector3(0, 1, 0), scene);

灯光颜色属性

灯光具有三个会影响颜色的属性,其中漫反射diffuse镜面反射specular对上述4种灯光都会起作用,而底色groundColor仅适用于半球光Hemispheric Light。

  1. 灯光的漫反射给照射到的对象一个基本颜色;
  2. 镜面反射在物体表面产生一个高光颜色点;

对于半球光hemispheric light,底色groundColor与创建灯光时指定的照射方向相反,换句话说,灯光的漫反射和镜面反射,是朝着指定方向照射到物体上的光,例如方向是(1,1,1),物体在(0,0,0),那么漫反射和镜面反射的颜色就会呈现在物体的斜上方,而底色groundColor就出现在物体的斜下方,可以理解为从(-1,-1,-1)的位置照射到物体上

灯光最大数量限制

let material=new BABYLON.StandarMaterial("xx",scene)
//设置最大响应6个灯光
material.maxSimultaneousLights=6

如果使用过多的动态灯光,Babylon.js将生成更大的着色器,这意味着性能会受到影响,所以对于低配设备,例如手机、小型平板电脑等,将存在不兼容的情况。所以为了增强兼容性,只要一旦出现了上述情况,babylon.js将使用更少的灯光重新编译着色器。

开灯、关灯或调整亮度

设置为开启/关闭状态

// true 开启 false关闭
light.setEnabled(false)

设置灯光亮度

//默认值为1,正常亮度
light.intensity=0.5

对于点光和聚光灯,可以使用范围range属性,设置灯光到达目标的距离

light.range=100

指定照亮哪些物体

1、把需要排除的物体加入到excludedMeshes数组中

2、把需要照亮的物体加入到includedOnlyMeshes数组中