# 光照效果

# 简单例子

为了更好的渲染场景,threejs 提供了生活中常见的一些光源的 API。

  • AmbientLight 环境光
  • PointLight 点光源,向四周照射
  • DirectionalLight 平行光,类似太阳光
  • SpotLight 聚光源,向一个方向照射
//环境光    环境光颜色与网格模型的颜色进行RGB进行乘法运算
var ambient = new THREE.AmbientLight(0x444444);
scene.add(ambient);
//点光源
var point = new THREE.PointLight(0xffffff);
point.position.set(400, 200, 300); //点光源位置
// 通过add方法插入场景中,不插入的话,渲染的时候不会获取光源的信息进行光照计算
scene.add(point); //点光源添加到场景中
// 平行光
var directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
scene.add(directionalLight);
//  聚光灯
var spotLight = new THREE.SpotLight(0xffffff);
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);

聚光灯参数设置

  • color - (可选参数) 十六进制光照颜色。 缺省值 0xffffff (白色)。
  • intensity - (可选参数) 光照强度。 缺省值 1。
  • distance - 从光源发出光的最大距离,其强度根据光源的距离线性衰减。
  • angle - 光线散射角度,最大为 Math.PI/2。
  • penumbra - 聚光锥的半影衰减百分比。在 0 和 1 之间的值。默认为 0。
  • decay - 沿着光照距离的衰减量。

# 光线追踪

为了生成在三维计算机图形环境中的可见图像,光线跟踪是一个比光线投射或者扫描线渲染更加逼真的实现方法。这种方法通过逆向跟踪与假想的照相机镜头相交的光路进行工作,由于大量的类似光线横穿场景,所以从照相机角度看到的场景可见信息以及软件特定的光照条件,就可以构建起来。当光线与场景中的物体或者介质相交的时候计算光线的反射、折射以及吸收。

由于光线追踪是从玩家视角开始进行运算,有时被误解为光线追踪是追踪“从眼睛发出的光线”。