Threejs 光与影

读过本文章后,你将了解在Threejs中的光与影。

现实世界中,物体显示的颜色是由物体本身的颜色及光照的颜色相互叠加而成,在Threejs的世界里同样如此。

我们看到的景象都是趋于光的反射,才生成的。有的物体会发光,有的不放光,会自发光的物体叫做光源 中,有了光,物体才会有光暗的效果。

开启光影的条件

    1. 渲染器开启阴影渲染
    2. 光源开启投射阴影
    3. 物体开启投射阴影
    4. 物体开启接收阴影
  1. renderer.shadowMap.enabled = true;
  2. spotLight.castShadow = true;
  3. mesh.castShadow = true;
  4. plane.receiveShadow = true;

光源

Threejs中主要存在7种光源,其中基础光源为前4个,其他三种为特殊光源

    1. 环境光
    2. 平行光
    3. 点光源
    4. 聚光灯
    5. 半球光
    6. 平面光
    7. 炫光

环境光:

光源颜色会添加到整个场景和所有对象的当前颜色上。

  1. AmbientLight(color)

参数(颜色)

  1. var light = new THREE.AmbientLight(‘#ffffff’);
  2. scene.add(light);

环境光可以放在任意一个位置,不会衰减,不需要设置光强,各个点都一样。

平行光:

光源发出的光线可以看作是平行的,类似太阳光

  1. DirectionalLight(color, intensity);

参数(颜色,强度).

  1. var light = new THREE.DirectionalLight(0xffffff,0.8);
  2. light.position.set(0,100,0);
  3. scene.add(light);

平行光可设置光照强度,光照越强,显示的颜色越鲜艳,反之显示的颜色越暗淡;

点光源:

此光源类似照明弹,从一点朝所有的方向发射光线

  1. PointLight(color, intensity, distance, decay );

参数(颜色,强度,距离,衰退).

  1. var light = new THREE.PointLight(‘#ffffff’, 0, 0, 0);
  2. light.position.set(10,10,10);
  3. scene.add(light);

color 参数表示光颜色;

intensity 参数表示光照强度,范围为0~1;

distance 参数表示光照距离,默认为0,表示无限远;

decay 参数表示光照强度随着光照防线逐渐衰减的量,默认为1。

聚光灯:

  1. SpotLight( color, intensity, distance, angle, penumbra, decay );

color 参数表示颜色,默认为白色;

intensity 参数表示光强,默认为1,范围0~1;

distance 参数表示光照距离,默认为根据光源距离,线性衰减光源的最大距离;

angle 参数表示Math.PI/2;

penumbra 参数表示根据光照锥形计算的阴影的百分比;

decay 参数表示光照强度随着光照防线逐渐衰减的量。

  1. var light = new  THREE.SpotLight(‘#ffffff’);
  2. light.position.set(10,10,10);
  3. scene.add(light);

聚光灯从开始位置以锥形的照射向目标位置发射光线,默认目标位置为原点。

半球光:

半球光是一种位于场景上方,从天空逐渐递减到地面的一种光照,其可以为室外环境模拟更真实的光照效果;当模拟室外光照的时候,可以使用半球光作为基础光照,再添加方向光模拟太阳光。

  1. HemisphereLight(skyColor, groundColor, intensity);

skyColor 参数表示天空颜色,默认白色;

groundColor 参数表示地面颜色,默认为黑色;

intensity 参数表示光照强度,默认为1.

平面光:

平面光是在一个平面上均匀的发射出一个矩形平面,平面光可以用来模拟明亮的窗户或者条形透明物体;

  1. RectAreaLight(color, intensity, width, height);

color 参数表示光照颜色,默认为白色;

intensity 参数表示光照强度,默认为1;

width 参数表示光照宽度,默认为10;

height 参数表示光照高度,默认为10.

炫光:

炫光不是一种光源,是创建一个模拟追踪着灯光的镜头光晕。

  1. Lensflare();

关于炫光更多请参阅文档

阴影

光源中支持阴影的为:点光源,聚光灯,平行光。

光源可混合使用,环境光作为一种基础光源,烘托整个场景,再配合其他的光源,能产生各式各样的光影效果。

完整示例

本文链接地址: Threejs 光与影

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注