返回

three.js 项目搭建(三)——场景搭建

前端

上一次我们添加了简单的对象并且作了简单的操作,这篇我们尝试增加一个环境贴图(HDR环境贴图),还有物体的阴影,不过阴影可能会影响性能,后面再补充阴影优化措施。

3D 场景中的环境贴图

环境贴图用于模拟真实世界中的环境光,使场景中的物体看起来更加逼真。在 three.js 中,环境贴图通常使用 HDR 图像来实现。HDR 图像具有更高的动态范围,能够展现更丰富的亮度和色彩细节。

添加环境贴图

在 three.js 中添加环境贴图非常简单,只需将 HDR 图像加载到纹理中,然后将其赋给场景的 environment 属性即可。例如:

const textureLoader = new THREE.TextureLoader();
const environmentTexture = textureLoader.load('hdr_image.hdr');
scene.environment = environmentTexture;

物体阴影

three.js 中的阴影分为两种:基本阴影和软阴影。基本阴影使用的是平行光,阴影边缘比较生硬;软阴影使用的是点光源或聚光灯,阴影边缘比较柔和。

添加基本阴影

在 three.js 中添加基本阴影非常简单,只需在场景中添加一个平行光源,然后将阴影类型设置为 THREE.BasicShadowMap 即可。例如:

const directionalLight = new THREE.DirectionalLight(0xffffff, 1);
directionalLight.position.set(10, 10, 10);
directionalLight.castShadow = true;
directionalLight.shadow.mapSize.width = 1024;
directionalLight.shadow.mapSize.height = 1024;
scene.add(directionalLight);

添加软阴影

在 three.js 中添加软阴影需要使用 THREE.PCFSoftShadowMap 阴影类型,并且需要将光源的 shadow.radius 属性设置为一个较大的值。例如:

const spotLight = new THREE.SpotLight(0xffffff, 1);
spotLight.position.set(10, 10, 10);
spotLight.castShadow = true;
spotLight.shadow.mapSize.width = 1024;
spotLight.shadow.mapSize.height = 1024;
spotLight.shadow.radius = 10;
scene.add(spotLight);

阴影优化

阴影会对性能造成一定的影响,因此在实际项目中,需要根据实际情况对阴影进行优化。常用的阴影优化方法包括:

  • 使用更低的阴影贴图分辨率
  • 使用更小的阴影贴图级联
  • 使用更少的阴影贴图
  • 使用更快的阴影算法

结语

环境贴图和阴影可以极大地增强场景的真实感,但是它们也会对性能造成一定的影响。在实际项目中,需要根据实际情况对环境贴图和阴影进行优化。