【Three.js入门】标准网格材质、置换贴图、粗糙度贴图、金属贴图、法线贴图

news2025/1/13 17:46:46

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js 🍒Three.js
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享&商务合作,快加入进来吧

Three.js 系列文章目录

Three.js 专栏参考链接
Three.js 入门案例程序人生——与足球共舞的火柴人
Three.js 入门(一)创建第一个场景和物体(轨道控制器、坐标轴辅助器…)
Three.js 入门(二)处理动画、尺寸自适应、双击进入/退出全屏
Three.js 入门(三)图形用户界面GUI、BufferGeometry创建矩形、随机生成三角形
Three.js 入门(四)纹理及其常用属性、透明纹理、环境遮挡贴图与强度

文章目录

  • Three.js 系列文章目录
    • 一、标准网格材质与光照物理效果
    • 二、置换贴图和顶点细分设置
    • 三、粗糙度与粗糙度贴图
      • 1、粗糙度
      • 2、粗糙度贴图
    • 四、金属度与金属贴图
    • 五、法线贴图
    • 六、写在最后(附源码和图片资源)


【使用 Three.js 实现的效果】

一、标准网格材质与光照物理效果

PBR 相关概念详解

MeshStandardMaterial:一种基于物理的(PBR)标准材质。

不是在特定照明下调整材质使其看起来很好,而是可以创建一种材质,能够正确的地应对所有光照场景。

修改基础材质为标准网格材质

const basicMaterial = new THREE.MeshBasicMaterial()
// 修改上一行代码为下一行代码,基础材质 ——> 标准网格材质
const material = new THREE.MeshStandardMaterial()

在这里插入图片描述


环境光:均匀的照亮场景中的所有物体。

接下来,我们来给物体添加环境光

// 第一个参数是颜色,第二个参数是明亮程度(0-1)
const light = new THREE.AmbientLight(0xffffff, 0.9)
// 向场景中添加环境光
scene.add(light)

在这里插入图片描述


平行光:方向从一个平行光位置 position 到 target 位置

接下来,我们来给物体在环境光的基础上添加平行光

const directionLight = new THREE.DirectionalLight(0xffffff, 0.95)
// 设置光的位置
directionLight.position.set(0, 10, 10)
// 向场景中添加平行光
scene.add(directionLight)

在这里插入图片描述

二、置换贴图和顶点细分设置

.displacementMap 位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象,以及充当真实的几何体。

.displacementScale 位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)

接下来我们来给平面置换贴图,来增强其立体感

在这里插入图片描述

// 导入置换贴图
const doorHeightTexture = textureLoader.load('./textures/height.jpg')
......
// 材质(给材质添加置换贴图和影响程度)
const material = new THREE.MeshStandardMaterial({
    // map 为颜色贴图
    map: doorColorTexture,
    // alphaMap 为透明纹理
    alphaMap: doorAplhaTexure,
    // 透明
    transparent: true,
    // 渲染两面
    side: THREE.DoubleSide,
    // 增强视图效果
    aoMap: doorAoTexture,
    // 置换贴图
    displacementMap: doorHeightTexture,
    // 影响程度(5cm)
    displacementScale: 0.05
})
......
// 添加第三和第四个参数(平面的宽度分段数,平面高度分段数)
const planeGeometry = new THREE.PlaneBufferGeometry(1, 1, 200, 200)
......
// 稍微更改一下距离,更合适
plane.position.set(1.5, 0, 0)

在这里插入图片描述
在这里插入图片描述


接下来我们来给物体 cube 置换贴图,来增强其立体感

// 我们只需要给物体增加三个参数即可(长宽高的宽度分段数)
const cubeGeometry =  new THREE.BoxBufferGeometry(1, 1, 1, 100, 100, 100)

在这里插入图片描述


三、粗糙度与粗糙度贴图

1、粗糙度

.roughness 材质的粗糙程度。0.0 表示平滑的镜面反射,1.0 表示完全漫反射。默认值为 1.0。如果还提供 roughnessMap,则两个值相乘。

.roughnessMap 该纹理的绿色通道用于改变材质的粗糙度。

设置粗糙度,通过反射间接地观察面的光滑程度

const material = new THREE.MeshStandardMaterial({
    ......
    // 设置粗糙度
    roughness: 0
})

在这里插入图片描述


2、粗糙度贴图

粗糙度贴图,改变门上合页的粗糙度

在这里插入图片描述

// 导入粗糙度贴图
const roughnessTexture = textureLoader.load('./textures/roughness.jpg')
......
const material = new THREE.MeshStandardMaterial({
    ......
    // 设置粗糙度
    roughness: 1,
    // 改变材质的粗糙度
    roughnessMap: roughnessTexture
})

在这里插入图片描述

在这里插入图片描述


四、金属度与金属贴图

.metalness 材质与金属的相似度。非金属材质,如木材或石材,使用 0.0,金属使用 1.0。通常没有中间值。默认是 0.0。

0.0 - 1.0 之间的值可用于生锈金属的外观。

.metalnessMap 该纹理的蓝色通道用于改变材质的金属度。

我们给门上的合页添加金属贴图,让它更有金属的感觉

在这里插入图片描述

// 导入金属贴图
const metalnessTexture = textureLoader.load('./textures/metalness.jpg')
......
const material = new THREE.MeshStandardMaterial({
    ......
    // 设置金属度
    metalness: 1,
    // 改变金属度(生锈的感觉)
    metalnessMap: metalnessTexture
})

在这里插入图片描述


五、法线贴图

法线贴图就是在原物体的凹凸表面的每个点上均作法线,通过RGB颜色通道来标记法线的方向,你可以把它理解成与原凹凸表面平行的另一个不同的表面,但实际上它又只是一个光滑的平面。

对于视觉效果而言,它的效率比原有的凹凸表面更高,若在特定位置上应用光源,可以让细节程度较低的表面生成高细节程度的精确光照方向和反射效果。

设置法线贴图,让门的凸显门的凹凸感,立体感更加逼真

下图中每种颜色的线条都是向外扩散的

在这里插入图片描述

// 导入法线贴图
const normalTexture = textureLoader.load('./textures/normal.jpg')
......
const material = new THREE.MeshStandardMaterial({
    ......
    // 法线贴图
    normalMap: normalTexture
})

在这里插入图片描述


六、写在最后(附源码和图片资源)

这篇文章看完是不是又收获满满呢,接下来进行一下实操练习吧。

相关资源可以通过下面方式加入进来,自行获取。


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/110208.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【实时数仓】DWS层的定位、DWS层之访客主题计算(PV、UV、跳出次数、计入页面数、连续访问时长)

文章目录一 DWS层与DWM层的设计1 设计思路2 需求梳理3 DWS层定位二 DWS层-访客主题计算1 需求分析与思路2 功能实现(1)封装VisitorStatsApp,读取Kafka各个流数据a 代码b 测试(2)合并数据流a 封装主题宽表实体类Visitor…

CMakeList

目录 .1 简介 .2 常用命令 2.1 指定 cmake 的最小版本 2.2 设置项目名称 2.3 设置编译类型 2.4 指定编译包含的源文件 2.4.1 明确指定包含哪些源文件 2.4.2 搜索所有的 cpp 文件 2.4.3自定义搜索规则 2.5 查找指定的库文件 2.6. 设置包含的目录 2.7. 设置链接库搜索…

中国晶振市场规模将增长至2026年的263.21亿元,国产市场未来可期

晶振作为频率控制和频率选择基础元件,广泛应用于资讯设备、移动终端、通信及网络设备、汽车电子、智能电表、电子银行口令卡等领域,随着新兴电子产业、物联网的快速发展,及以 5G、蓝牙 5.0、Wi-Fi 6 等无线通信新技术的广泛应用,预…

基于Python的Flask WEB框架实现后台权限管理系统(含数据库),内容包含:用户管理、角色管理、资源管理和机构管理

#基于Flask实现后台权限管理系统 重磅!!!!!!!!!!! 全新的风格界面,完全的前后端分离。基于ElementUI,前端代码基于RuoYi…

plotly parallel_coordinates平行坐标可视化

使用plotly画平行坐标图,代码如下: 其中数据使用excel的csv格式(当然可以使用其它格式),csv的标头是参数名。 import plotly.express as px import numpy as np import pandas as pd# df px.data.iris() df pd.read…

【爬虫】JS逆向解决反爬问题系列3—sign破解

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据开发、数据分析等。 🐴欢迎小伙伴们点赞👍🏻、收藏⭐️、…

DOM(一):获取页面元素、操作元素

DOM&#xff08;一&#xff09;获取页面元素事件操作元素获取页面元素 1.根据ID获取 使用getElementById()方法获取带有ID的元素对象,格式如下&#xff1a; var 变量名 document.getElementById(‘id名’); 例如&#xff1a; <div id time>2022-12-18</div> &…

PyTorch——应用一个已训练好的图片分类网络——AlexNet

1.识别一个图像主体的预训练网络 ImageNet数据集是由一个Stanford大学维护的包含1400多万幅图像的非常大的数据集&#xff0c;所有的图像都用来自WordNet数据集的名词层次结构标记&#xff0c;而WordNet数据集又是一个大型的英语词汇数据库。 1.1获取一个预先训练好的网络用于…

【矩阵论】7.范数理论——基本概念——矩阵范数生成向量范数谱范不等式

7.1.3 矩阵范数产生向量范数 CnnC^{n\times n}Cnn 上任一矩阵范数 ∥∙∥\Vert \bullet\Vert∥∙∥ 都产生一个向量范数 φ(X)∥X∥V\varphi(X)\Vert X\Vert_Vφ(X)∥X∥V​ 矩阵范数与向量范数的相容性&#xff1a;φ(Ax)≤∥A∥φ(x)\varphi(Ax)\le \Vert A\Vert\varphi(x)φ…

蓝牙耳机什么牌子好?音质好、配置高的蓝牙耳机分享

​经常听到很多网友在讨论哪些蓝牙耳机好用&#xff0c;什么蓝牙耳机的配置高......选购蓝牙耳机无非就是音质、蓝牙技术、续航、佩戴体验等各方面条件&#xff0c;还有哪位朋友不知道该如何选购蓝牙耳机的&#xff1f;根据我对蓝牙耳机的了解&#xff0c;从网上整理了好几款蓝…

【关于eps8266自动重启 Soft WDT reset】

【关于eps8266自动重启 Soft WDT reset】1. 前言2. 分析问题2.1 长时间没有喂狗2.2 delayMicroseconds 函数触发3. 解决问题3.1 解决长时间没有喂狗3.2 解决delayMicroseconds 函数触发5. 小结1. 前言 最近使用esp8266进行远程遥控时, 但是在驱动舵机servo库的过程中出现了esp…

第二证券|两大板块掀涨停潮,有个股猛拉20cm!这只港股复牌一度暴跌

A股商场周五上午窄幅震动&#xff0c;上证指数微涨0.09点&#xff0c;核算机等板块领涨。 新股体现持续分解&#xff0c;4只今日上市的新股中&#xff0c;两只科创板新股上涨&#xff0c;两只北交所新股则破发。 港股全体小幅调整&#xff0c;全体动摇不算大&#xff0c;但仍…

【推荐】智慧农业解决方案资料合集30篇

智慧农业 是农业中的智慧经济&#xff0c;智慧经济形态在农业中的具体表现。智慧农业是智慧经济重要的组成部分&#xff1b;对于发展中国家而言&#xff0c;智慧农业是智慧经济主要的组成部分&#xff0c;是发展中国家消除贫困、实现后发优势、经济发展后来居上、实现赶超战略的…

16含风光水的虚拟电厂与配电公司协调调度模型(场景削减MATLAB程序)

参考文献 含风光水的虚拟电厂与配电公司协调调度模型——董文略&#xff08;复现场景削减部分&#xff09; 主要内容 代码主要做的是风电、光伏以及电价场景不确定性模拟&#xff0c;首先由一组确定性的方案&#xff0c;生成50种光伏场景&#xff0c;为了避免大规模光伏场景…

小结 | 支持向量机 (SVM)

一.基本原理 SVM是一种二分类模型 基本思想&#xff1a;在特征空间中寻找间隔最大的分离超平面使数据得到高效的二分类&#xff0c;具体来讲&#xff0c;有三种情况&#xff08;不加核函数的话就是线性模型&#xff0c;加了之后才会升级为一个非线性模型&#xff09; 当训练…

MybatisPlus详解 | DQLDML快速开发... | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘MybatisPlus&#xff0c;顺便上传笔记。。。 下图是我总结的 MP 知识的初级思维导图&#xff0c;后续会不断补充 文章目录1 MyBatisPlus入门案例与简介1.1 入门案例回顾SpringBoot整合Mybatis的开发过程:步骤1:创建数据库及表步骤2:创建SpringBoot工程步骤…

二苯并环辛炔-聚乙二醇-生物素DBCO-PEG-Biotin简介 DBCO-PEG-Biotin衍生物可以在没有金属催化剂(铜离子)作用下发生点击化学反应

中文名&#xff1a;二苯并环辛炔-聚乙二醇-生物素&#xff0c;生物素-聚乙二醇环辛炔 英文名&#xff1a;DBCO-PEG-Biotin&#xff0c;Biotin-PEG-DBCO 溶剂&#xff1a;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等&#xff0c;在水中有很好的溶解性…

变分自编码器VAE的数学原理

变分自编码器(VAE)是一种应用广泛的无监督学习方法&#xff0c;它的应用包括图像生成、表示学习和降维等。虽然在网络架构上经常与Auto-Encoder联系在一起&#xff0c;但VAE的理论基础和数学公式是截然不同的。本文将讨论是什么让VAE如此不同&#xff0c;并解释VAE如何连接“变…

【JVS低代码】一分钟学会如何快速创建应用

应用中心功能介绍 在JVS角色中有“应用管理员”的角色&#xff0c;如果赋予该角色&#xff0c;则用户为应用管理员&#xff0c;应用管理员有进入应用配置中心的权限。 创建空白应用&#xff1a; 从模板创建应用&#xff1a; 应用中心入口 具备应用管理员权限的用户&#xff…

嵌入式软件开发为什么需要DevOps?

DevOps提出至今已逾十年&#xff0c;作为热门概念&#xff0c;DevOps近年来频频出现于各大技术社区和媒体文章中&#xff0c;备受行业大咖追捧。作为新一代持续集成/持续开发&#xff08;CI/CD&#xff09;的方法论&#xff0c;DevOps正被快速引入嵌入式软件开发领域中。 为什…