读过本文章后,你将了解在Threejs中的光与影。
现实世界中,物体显示的颜色是由物体本身的颜色及光照的颜色相互叠加而成,在Threejs的世界里同样如此。
我们看到的景象都是趋于光的反射,才生成的。有的物体会发光,有的不放光,会自发光的物体叫做光源 中,有了光,物体才会有光暗的效果。
开启光影的条件
-
- 渲染器开启阴影渲染
- 光源开启投射阴影
- 物体开启投射阴影
- 物体开启接收阴影
- renderer.shadowMap.enabled = true;
- spotLight.castShadow = true;
- mesh.castShadow = true;
- plane.receiveShadow = true;
光源
Threejs中主要存在7种光源,其中基础光源为前4个,其他三种为特殊光源
-
- 环境光
- 平行光
- 点光源
- 聚光灯
- 半球光
- 平面光
- 炫光
环境光:
光源颜色会添加到整个场景和所有对象的当前颜色上。
- AmbientLight(color)
参数(颜色)
- var light = new THREE.AmbientLight(‘#ffffff’);
- scene.add(light);
环境光可以放在任意一个位置,不会衰减,不需要设置光强,各个点都一样。
平行光:
光源发出的光线可以看作是平行的,类似太阳光
- DirectionalLight(color, intensity);
参数(颜色,强度).
- var light = new THREE.DirectionalLight(0xffffff,0.8);
- light.position.set(0,100,0);
- scene.add(light);
平行光可设置光照强度,光照越强,显示的颜色越鲜艳,反之显示的颜色越暗淡;
点光源:
此光源类似照明弹,从一点朝所有的方向发射光线
- PointLight(color, intensity, distance, decay );
参数(颜色,强度,距离,衰退).
- var light = new THREE.PointLight(‘#ffffff’, 0, 0, 0);
- light.position.set(10,10,10);
- scene.add(light);
color 参数表示光颜色;
intensity 参数表示光照强度,范围为0~1;
distance 参数表示光照距离,默认为0,表示无限远;
decay 参数表示光照强度随着光照防线逐渐衰减的量,默认为1。
聚光灯:
- SpotLight( color, intensity, distance, angle, penumbra, decay );
color 参数表示颜色,默认为白色;
intensity 参数表示光强,默认为1,范围0~1;
distance 参数表示光照距离,默认为根据光源距离,线性衰减光源的最大距离;
angle 参数表示Math.PI/2;
penumbra 参数表示根据光照锥形计算的阴影的百分比;
decay 参数表示光照强度随着光照防线逐渐衰减的量。
- var light = new THREE.SpotLight(‘#ffffff’);
- light.position.set(10,10,10);
- scene.add(light);
聚光灯从开始位置以锥形的照射向目标位置发射光线,默认目标位置为原点。
半球光:
半球光是一种位于场景上方,从天空逐渐递减到地面的一种光照,其可以为室外环境模拟更真实的光照效果;当模拟室外光照的时候,可以使用半球光作为基础光照,再添加方向光模拟太阳光。
- HemisphereLight(skyColor, groundColor, intensity);
skyColor 参数表示天空颜色,默认白色;
groundColor 参数表示地面颜色,默认为黑色;
intensity 参数表示光照强度,默认为1.
平面光:
平面光是在一个平面上均匀的发射出一个矩形平面,平面光可以用来模拟明亮的窗户或者条形透明物体;
- RectAreaLight(color, intensity, width, height);
color 参数表示光照颜色,默认为白色;
intensity 参数表示光照强度,默认为1;
width 参数表示光照宽度,默认为10;
height 参数表示光照高度,默认为10.
炫光:
炫光不是一种光源,是创建一个模拟追踪着灯光的镜头光晕。
- Lensflare();
关于炫光更多请参阅文档。
阴影
光源中支持阴影的为:点光源,聚光灯,平行光。
光源可混合使用,环境光作为一种基础光源,烘托整个场景,再配合其他的光源,能产生各式各样的光影效果。
本文链接地址: Threejs 光与影