HDRI贴图下载及Three.js利用

这篇具有很好参考价值的文章主要介绍了HDRI贴图下载及Three.js利用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最令人兴奋的项目之一是在 Three js 中添加HDRI背景。 HDRI图像是从房间内部或花园、丛林或山脉等开放环境等场景中以 360 度捕获的。 你可以自己创建任何这些图像,但这不是本教程的主题。 相反,我们将从网站获取这些图像之一,并使用轨道控件,让用户能够转动物体并以 360 度查看所有内容。 我们还可以将物体添加到场景中并赋予它们颜色或增加它们的金属度并降低它们的粗糙度以成为球形镜子。

HDRI贴图下载及Three.js利用,贴图,javascript,开发语言

推荐:用 NSDT编辑器 快速搭建可编程3D场景

1、在Three.js中添加背景

可能性是无限的,你可以做很多事情。 例如,可以通过添加不同家具、地毯、垫子等的 3D 模型来创建空房间的室内设计。 本教程是创建虚拟世界的开始,你可以虚拟地建造自己的梦想之家,并从各个不同的方面观看它。 正如我们在其他 Three js 教程中所说,一旦开始使用 Three js,天空才是极限。

我们将从three.js 场景的简单元素开始,包括相机、渲染器、场景、对象和光源(如果需要)。 在此之前,我们使用 Vite 插件来轻松创建运行 Three.js 代码所需的所有文件夹和文件。 首先,使用以下命令在项目目录中创建一个文件夹:

mkdir BackgroundScene
cd BackgroundScene

然后,在文件夹中,运行 Vite 插件命令即可创建必要的文件和文件夹:

npm create vite@latest

然后,输入项目名称。 可以用glowingSphere作为名字。 但是,该名称是任意的,你可以选择任何想要的名称。 然后,选择 vanilla 作为框架和变体。 之后,在终端中输入以下命令:

cd BackgroundScene
npm install

接下来,你可以在 main.js 文件中输入要编写的 JavaScript 代码。 因此,我们将输入基本或模板代码,用于运行带有动画对象(例如球体)的每个项目。 另外,每次创建项目时不要忘记安装three.js包:

npm install three

在 main.js 文件中输入以下代码:

import * as THREE from 'three';
import { Mesh } from 'three';
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, innerWidth / innerHeight , 0.1, 1000);
const renderer = new THREE.WebGLRenderer({
     antialias : true
})
renderer.setSize(innerWidth, innerHeight);
document.body.appendChild(renderer.domElement);
//creating a sphere
const geometry = new THREE.SphereGeometry(5, 50, 50);
const material = new THREE.MeshBasicMaterial({
     color:0x3268F8
})
const sphere = new THREE.Mesh(geometry,material);
scene.add(sphere);
camera.position.z = 15;
function animate(){
     requestAnimationFrame(animate);
     renderer.render(scene,camera);
     sphere.rotation.y += 0.003;
}
animate();

上面的代码可以作为后续项目的样板。 此代码的输出将是蓝色球体,如下图所示。 但是,为了能够显示这一点,你应该在终端中编写以下命令:

pm run dev

HDRI贴图下载及Three.js利用,贴图,javascript,开发语言

2、在Three.js 中使用轨道控件设置背景

现在,我们想要创建一个要添加的背景场景,但在此之前,我们需要将渲染从动画更改为轨道控件,这样我们就可以控制从动画更改场景,而不是旋转对象。 相机视角。 这样做使我们能够从各个角度查看 HDRI 图像。 首先,我们需要导入以下 2 个库:

import {OrbitControls} from "/node_modules/three/examples/jsm/controls/OrbitControls.js";
import Stats from "/node_modules/three/examples/jsm/libs/stats.module.js";

然后,我们要做的就是修改下面的渲染代码:

function animate(){
     requestAnimationFrame(animate);
     renderer.render(scene,camera);
     sphere.rotation.y += 0.003;
}
Animate();

修改后的代码如下所示:

const controls = new OrbitControls(camera, renderer.domElement);
window.addEventListener('resize', onWindowResize, false);
function onWindowResize() {
      camera.aspect = window.innerWidth / window.innerHeight;
      camera.updateProjectionMatrix();
      renderer.setSize(window.innerWidth, window.innerHeight);
      render();
}
const stats = Stats();
document.body.appendChild(stats.dom);
function animate() {
      requestAnimationFrame(animate);
      render();
      stats.update();
}
function render() {
      renderer.render(scene, camera);
}
animate();

现在我们应该能够围绕该物体运行。 接下来我们应该做的是将基础材质更改为标准材质并创建镜面效果:

const geometry = new THREE.SphereGeometry();
const material = new THREE.MeshStandardMaterial({
      color: 0xffffff,
})
material.roughness = 0;
material.metalness = 1;
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

3、添加HDRI环境贴图

最后,我们到达最令人兴奋的部分,即将 HDRI 图像添加到背景中。

为此,我们需要首先从BimAnt HDRI等网站找到这些图像,BimAnt HDRI提供超过600张HDRI环境贴图,优点是无需登录即可直接预览和下载:

HDRI贴图下载及Three.js利用,贴图,javascript,开发语言

http://hdri.bimant.com

之后,我们应该创建一个名为 images 的文件夹并将 HDRI 图像粘贴到其中。 最后,添加以下代码以便能够渲染场景中的背景:

import {RGBELoader} from "/node_modules/three/examples/jsm/loaders/RGBELoader.js";
renderer.toneMapping = THREE.ACESFilmicToneMapping;
renderer.toneMappingExposure = 0.6;
renderer.outputEncoding = THREE.sRGBEncoding;
new RGBELoader().load("/images/solitude_4k.hdr", function(texture){
      texture.mapping = THREE.EquirectangularReflectionMapping;
      scene.background = texture;
      scene.environment = texture;
})

现在,如果我们保存代码,结果将如下所示:
HDRI贴图下载及Three.js利用,贴图,javascript,开发语言

用鼠标左键单击页面并将其向左、向右、向上或向下移动时,你会发现可以从所有不同的角度看到场景。 另外,由于我们将球体材质的金属度定义为 1,粗糙度定义为 0,我们可以看到球体上的镜面效果,以真实的方式反映背景场景。

可以说我们不需要任何光源,但请注意,如果物体靠近地面或在任何其他需要看到球的阴影的情况下,那么必须向场景添加光源并将其放置在光源光线与太阳光线方向相同的位置。

4、结束语

在本教程中,我们已成功将HDRI环境贴图添加到场景中。

我们首先使用 Vite 插件和我们在大多数 Three js 项目中使用的样板代码。 然后,我们删除旋转动画,取而代之的是轨道控件,以便用户能够使用鼠标查看他们想要的场景的任何角度。

接下来我们要做的是将物体的材质从基本材质更改为标准材质,以便我们可以在球体表面添加镜面效果。为了实现这一点,我们将金属度设置为 1,粗糙度设置为 0

然后我们从BimAnt HDRI下载 HDRI 图像并将其添加到我们的目录中。 最终,我们编写了与添加背景场景相关的脚本,结果令人惊讶!

当然,你可以对房间的室内设计进行相同的过程,并在房间背景场景中添加一些逼真的家具和其他元素,并创建自己的虚拟现实版本。


原文链接:Three.js添加HDRI背景 — BimAnt文章来源地址https://www.toymoban.com/news/detail-739014.html

到了这里,关于HDRI贴图下载及Three.js利用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js Tri-panner (三面贴图) 材质 两种实现方式

    介绍 Tri-panner 在babylonjs中有支持 但是three.js目前的基础材质并不支持 需要自己定义shader 或者使用目前还没有什么完善的文档的 NodeMaterial 下面展示两种实现方式 自定义shader NodeMaterial 这是threejs新系统充满未来 目前还没有一个完善的文档 并且不太稳定 r132的时候支持这个材质

    2024年01月18日
    浏览(32)
  • Three.js 设置模型材质纹理贴图和修改材质颜色,材质透明度,材质网格

    1 traverse (模型循环遍历方法) 2. THREE.TextureLoader(用于加载和处理图片纹理) 3. THREE.MeshLambertMaterial(用于创建材质) 4. getObjectByProperty(通过材质的属性值获取材质信息) 在上一篇 Three.js加载外部glb,fbx,gltf,obj 模型文件 的文章基础上加入onSetSystemModelMap (设置模型材质方法

    2024年02月13日
    浏览(41)
  • 除了three.js,还有许多其他前端开发语言和库可以用于创建3D可视化大屏

    hello老铁们...本人熟悉html5,vue对bootsrap,uniapp,layui,element,vite,antd,echarts,jq响应式尤其擅长,ui设计等技能,如果ui前端工作中有遇到烦恼可私信关注评论我们共同交流进步!谢谢       随着前端技术的飞速发展,3D可视化已经成为许多应用场景中不可或缺的一部分。在

    2024年03月15日
    浏览(48)
  • 微信小程序利用three.js展示3D模型部分问题

    由于小程序的内存限制比较多,稍不注意就容易溢出,所以经过测试后我选择gltf模型。不用加载贴图,而且这个格式较为通用,最关键的是真的很小。OBJ+PNG怎么转GLTF格式在我上篇帖子内有。 three.js有一个小程序专用插件threex,移植效果还不错,但渲染出来的效果会差一点,

    2024年02月08日
    浏览(36)
  • Three.js 实战【1】—— 3D全景视图开发

    在现代开发过程当中,3D开发是越来越不可或缺的一部门,在前面的文章当中简单的说明了一些threeJs的基础,从这里开始,我们将对ThreeJs整体进行一定的应用。 我们先看一下这篇文章主要要实现的一个demo效果,现如今在第三方租房、买房App、或者百度、高德地图上会出现这

    2024年02月12日
    浏览(39)
  • 面向Three.js开发者的3D自动纹理化开发包

    DreamTexture.js 是面向 three.js 开发者的 3D 模型纹理自动生成与设置开发包,可以为 webGL 应用增加 3D 模型的快速自动纹理化能力。 图一为原始模型, 图二图三为贴图后的模型。提示词: city, Realistic , cinematic , Front view ,Game scene graph DreamTexture.js 基于 Three.js 和稳定扩散(stable dif

    2024年02月06日
    浏览(39)
  • 3D沉浸式旅游网站开发案例复盘【Three.js】

    Plongez dans Lyon网站终于上线了。 我们与 Danka 团队和 Nico Icecream 共同努力,打造了一个令我们特别自豪的流畅的沉浸式网站。 这个网站是专为 ONLYON Tourism 和会议而建,旨在展示里昂最具标志性的活动场所。观看简短的介绍视频后,用户可以进入城市的交互式风景如画的地图,

    2024年02月12日
    浏览(30)
  • Three.js开发神器-结合3DTiles插件加载倾斜摄影模型

    首先我们通过链接和图片来看看效果 演示Demo链接地址:https://n3gis.github.io/exportToThree(3.0).html?scene=Demo_4 使用到的软件(软件大家到Unity商城上搜索,Unity商城地址:https://assetstore.unity.com) Unity3D 3DTiles(Unity3D插件,用于加载OSGB格式的倾斜摄影数据) Export To Three.js(Unity3D插件,

    2023年04月20日
    浏览(29)
  • Three.js--》前端开发者掌握3d技术不再是梦,初识threejs

            这十年来 web 得到了快速的发展,随着 webgl 的普及,网页的表现能力越来越强大,网页上已经开始可以做出很多复杂的动画和精美的效果,还可以通过 webgl 在网页中绘制高性能的3d图形,别的不说,凡是入门程序员都离不开github这个网站,细心的人都会发现,gi

    2024年02月01日
    浏览(48)
  • Blender Three.js 智慧3D机房开发 模型创建与导入中的常见问题与解决方案

    目录 机房效果展示 可能出现的问题及解决方法 Three. js服务器运行环境搭建及文件配置 使用Node.js搭建本地服务器 文件配置  Blender材质处理 Blender导出GLTF模型出现材质丢失 Three.js玻璃材质制作  Blender导出glTF格式模型 Three. js模型显示场景的设置 总结   机房正面图: 机房背面

    2024年02月05日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包