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

环境贴图

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

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

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

javascript 复制代码
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

javascript 复制代码
const ambient = new THREE.AmbientLight(0xffffff, 0.4);
scene.add(ambient);

GUI可视化调试

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

javascript 复制代码
// 从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

javascript 复制代码
gui.add(ambient, 'intensity', 0, 2).name('环境光.intensity');

GUI控制环境贴图强度.envMapIntensity

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

javascript 复制代码
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 分钟前
前端开发中“共享预览链接”场景-企业级最简方案:Vue + 极简后端(2 接口 1 张表)
前端·javascript·vue.js
七夜zippoe14 分钟前
应用安全实践(一):常见Web漏洞(OWASP Top 10)与防护
java·前端·网络·安全·owasp
reasonsummer17 分钟前
【白板类-03-01】20260402画板01(html+希沃白板)
前端·html
龙文浩_18 分钟前
AI深度学习/PyTorch/神经网络相关
人工智能·pytorch·深度学习
"Wild dream"21 分钟前
NodeJs内置的Npm
前端·npm·node.js
光影少年22 分钟前
vite 8 发布,双引擎时代结束
前端·javascript·前端框架
EDPJ9 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
kyriewen119 小时前
你点的“刷新”是假刷新?前端路由的瞒天过海术
开发语言·前端·javascript·ecmascript·html5
龙文浩_11 小时前
AI人工神经网络核心原理与深度学习机制解析
人工智能·深度学习·神经网络
skywalk816311 小时前
Kotti Next的tinyfrontend前端模仿Kotti 首页布局还是不太好看,感觉比Kotti差一点
前端