javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > Three.js Fog组件知识

Three.js开发之Fog组件知识整理

作者:泫凝

在Threejs中Fog类用于创建线性雾的效果,雾效果常用于模拟真实世界中视觉深度递减的效果,也可以用于创建某些艺术效果,这篇文章主要介绍了Three.js Fog 组件知识的相关资料,需要的朋友可以参考下

1. Fog 组件简介

Fog(雾)用于在 Three.js 场景中创建大气效果,模拟远处物体在雾中的模糊感。它可以增强景深,提高场景的真实感,并优化性能(远处物体可被雾隐藏,减少渲染压力)。

Three.js 提供了 两种雾效

2. 线性雾(THREE.Fog)

2.1 语法

const fog = new THREE.Fog(color, near, far);
scene.fog = fog;

2.2 示例

const scene = new THREE.Scene();
scene.fog = new THREE.Fog(0xaaaaaa, 5, 20);

2.3 线性雾特点

✅ 适合大场景(如森林、城市、山脉)。
✅ 可控性高(可以精确设定雾的范围)。
❌ 较生硬(雾的变化是线性的,可能不够真实)。

3. 指数雾(THREE.FogExp2)

3.1 语法

const fogExp2 = new THREE.FogExp2(color, density);
scene.fog = fogExp2;

3.2 示例

scene.fog = new THREE.FogExp2(0xaaaaaa, 0.05);

3.3 指数雾特点

✅ 更真实(雾的浓度随距离指数增加)。
✅ 适合小型场景(如烟雾、尘雾、室内霾)。
❌ 难以控制(没有 near 和 far,只能调整 density)。

4. Fog 与材质

4.1 开启雾影响

const material = new THREE.MeshStandardMaterial({ color: 0xff0000, fog: true });

4.2 禁用雾影响

const material = new THREE.MeshStandardMaterial({ color: 0xff0000, fog: false });

fog: false 时,该物体不会被雾影响。

5. 动态调整雾

可以使用 dat.GUI 控制雾的参数:

const gui = new dat.GUI();
const fog = new THREE.Fog(0xaaaaaa, 5, 20);
scene.fog = fog;

gui.addColor(fog, 'color');
gui.add(fog, 'near', 1, 50);
gui.add(fog, 'far', 1, 100);

这样可以在运行时实时调整雾的颜色和范围。

6. 结合天空(Sky)和雾

如果场景有 Sky 组件,雾的颜色应匹配天空颜色:

scene.fog = new THREE.Fog(0x87CEEB, 10, 50); // 颜色接近天空

这样可以让雾和天空融合,减少突兀感。

7. 结合灯光和阴影

const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(10, 10, 10);
scene.add(light);

在雾中添加灯光,可以制造神秘的光束效果。

8. 结合后处理(PostProcessing)

后处理可以增强雾效果,如体积光、景深(DOF)

const bloomPass = new UnrealBloomPass(new THREE.Vector2(window.innerWidth, window.innerHeight), 0.5, 0.4, 0.85);
composer.addPass(bloomPass);
const bokehPass = new BokehPass(scene, camera, {
    focus: 10.0,
    aperture: 0.025,
    maxblur: 0.01
});
composer.addPass(bokehPass);

结合后处理,可以让雾更加真实,增强沉浸感。

9. 可能遇到的问题

9.1 雾没有效果

console.log(scene.fog);
console.log(material.fog);  // true 才会受雾影响

9.2 雾影响过强/过弱

10. 总结

类型

适用场景

控制参数

适用材质

优缺点

Fog

(线性雾)

大型场景(森林、城市、山脉)

near

far

大多数材质(除 MeshBasicMaterial

✅ 可控性强,❌ 变化较生硬

FogExp2

(指数雾)

小型场景(烟雾、尘埃、室内)

density

大多数材质

✅ 真实感强,❌ 难以精确控制

最佳实践

到此这篇关于Three.js开发之Fog组件知识整理的文章就介绍到这了,更多相关Three.js Fog组件知识内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文