Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 0.学前说明

  • 1.Three.js快速入门

  • 2.几何体BufferGeometry

  • 3.模型对象、材质

  • 4.层级模型

  • 5.顶点UV坐标、纹理贴图

  • 6.加载外部三维模型(gltf)

  • 7.PBR材质与纹理贴图

  • 8.渲染器和前端UI界面

  • 9.生成曲线、几何体

  • 10.相机基础

  • 11.光源和阴影

    • 1. 聚光源SpotLight
    • 2. 平行光阴影计算
    • 3. 阴影范围.shadow.camera
    • 4. 阴影.mapSize和.radius
    • 5. 工厂光源(环境贴图和环境光)
      • 6. 工厂光源(平行光模拟太阳光)
      • 7. 工厂(模拟太阳光阴影)
      • 8. gui辅助调节光源阴影
    • 12.精灵模型Sprite

    • 13.后处理EffectComposer

    • 14.射线拾取模型

    • 15.场景标注标签信息

    • 16.关键帧动画

    • 17.动画库tween.js

    • Three.js教程
    • 11.光源和阴影
    郭隆邦
    2023-02-18
    目录

    5. 工厂光源(环境贴图和环境光)

    # 工厂光源(环境贴图和环境光)

    接下来两节课利用前面知识,给大家总结下,如何设置类似工厂、园区等3D场景的光照。

    • 环境贴图
    • 环境光
    • 平行光模拟太阳光(下节课内容)

    具体threejs知识点前面基本都讲解过,下面把重点放在整体思路讲解上,具体代码你可以参考课件源码。

    # 测试工厂模型中光源

    课件“演示”文件加载了一个工厂模型,你可以把代码中所有光源注释,执行代码,你无法正常看到工厂模型颜色。

    # 环境贴图

    如果你不设置任何光源和环境贴图,gltf模型默认PBR材质不会正常显示,一片漆黑。

    不过你不设置任何光源,只设置环境贴图,物体表面也能看到。虽然环境贴图不是光源,但是会模拟物体周围环境的反射光。就好比你站在街上,周围房子、树木、马路也会反射光线到你身上。

    通过.envMapIntensity可以调节环境贴图对模型外表面的影响程度,.envMapIntensity的值可以通过gui交互界面调节。

    const textureCube = new THREE.CubeTextureLoader()
        .setPath('./环境贴图/')
        .load(['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg']);
    textureCube.encoding = THREE.sRGBEncoding;
    loader.load("../工厂.glb", function (gltf) {
        gltf.scene.traverse(function (obj) {
            if (obj.isMesh) { //判断是否是网格模型
                obj.material.envMap = textureCube; //设置环境贴图
                obj.material.envMapIntensity = 1.0;
            }
        });
    })
    

    一般实际开发,对于偏向写实的场景,需要设置环境贴图,比如产品展示、物联网或数字孪生的场景。

    # 环境光

    一般三维场景需要添加环境光,来整体调节三维场景的明暗,环境光强度可以通过参数2,或光照强度属性.intensity设置。

    实际开发,可以先给一个大概的值,然后通过gui交互界面微调AmbientLight的光照强度属性.intensity。

    const ambient = new THREE.AmbientLight(0xffffff, 0.4);
    scene.add(ambient);
    

    # GUI可视化调试

    关于gui的介绍,参考入门部分18. gui.js库(可视化改变三维场景) (opens new window)

    前面入门部分讲解过gui相关知识,对于光源的等参数,人的大脑很难根据代码想象出来具体效果,所以需要通过可视化的方式调参数。

    // 从threejs扩展库引入gui.js
    import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
    const gui = new GUI();//创建GUI对象 
    gui.domElement.style.right = '0px';
    gui.domElement.style.width = '300px';
    

    # gui控制环境光光照强度.intensity

    gui.add(ambient, 'intensity', 0, 2).name('环境光.intensity');
    

    # GUI控制环境贴图强度.envMapIntensity

    通过材质的环境贴图强度属性.envMapIntensity,可以控制环境贴图对物体表面的影响程度,类比环境光的光照强度。

    const obj = {
        envMapIntensity:1.0,
    }
    gui.add(obj,'envMapIntensity',0,2).onChange(function(value){
        // 递归遍历,批量设置模型材质的`.envMapIntensity`属性
        gltf.scene.traverse(function (obj) {
            if (obj.isMesh) {
                obj.material.envMapIntensity = value;
            }
        });
    })
    
    4. 阴影.mapSize和.radius
    6. 工厂光源(平行光模拟太阳光)

    ← 4. 阴影.mapSize和.radius 6. 工厂光源(平行光模拟太阳光)→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式