# 光照效果
# 简单例子
为了更好的渲染场景,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 - 沿着光照距离的衰减量。
# 光线追踪
为了生成在三维计算机图形环境中的可见图像,光线跟踪是一个比光线投射或者扫描线渲染更加逼真的实现方法。这种方法通过逆向跟踪与假想的照相机镜头相交的光路进行工作,由于大量的类似光线横穿场景,所以从照相机角度看到的场景可见信息以及软件特定的光照条件,就可以构建起来。当光线与场景中的物体或者介质相交的时候计算光线的反射、折射以及吸收。
由于光线追踪是从玩家视角开始进行运算,有时被误解为光线追踪是追踪“从眼睛发出的光线”。