Three.js 粗糙度贴图与金属度贴图

news2025/1/18 21:20:35

在开始介绍贴图之前,我们先介绍一下粗糙度属性以及金属度属性。

粗糙度属性 .roughness 表示材质的粗糙程度,0 表示平滑的镜面反射,1 表示完全漫反射,而金属度属性 .metalness 表示材质与金属的相似度,非金属材质,例如木材、石材,使用0,金属使用1,通过是没有中间值的。0.0到1.0之间的值可用于生锈金属的外观。

在前面的示例中,我们只添加了环境光,它是一个基本光源,它没有方向,且该光源的颜色将会叠加到场景现有物体的颜色上,对于本节我们要说的粗糙以及金属度来说,只使用环境光并不能很好的提现效果。所以在开始之前,我们在原有的基础上,加上一个平行光,可以将平行光类比成太阳光,被平行光照亮的整个区域接收到的光强是一样的。

// 灯光
const light = new THREE.AmbientLight(0xffffff, 0.5);
scene.add(light);

// 直线光源
const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);
directionalLight.position.set(10, 10, 10);
scene.add(directionalLight); 

然后我们先看下平滑的镜面反射效果:

const material = new THREE.MeshStandardMaterial({map: doorColorTexture,transparent: true,alphaMap: doorAlphaTexture,aoMap: doorAOTexture,side: THREE.DoubleSide,displacementMap: doorHeightTexture,displacementScale: 0.05,roughness: 0
}); 

可以看到物体表面将平行光直接发射了。当将 roughness 设置成1后,不管怎么调节,都不会看到上述镜面的效果了,因为 roughness 为 1 时,会进行漫反射,感兴趣的同学可以试一下。

如果在项目中,整个物体都是光滑的、或者都是粗糙的,那也用不到贴图,但是在实际项目中,往往是物体的一部分需要是光滑的,其他部分则是粗糙的,而且粗糙程度也不相同。所以说,如果希望在一个表面粗糙的物体上指定一些闪亮的局部,则可以为 metalnessMap 属性设置一张金属质感贴图(或者相反的,若希望在一个光滑的物体上指定一些粗糙的局部,则可以在 roughnessMap 属性上使用纹理贴图来实现)

const textureLoader = new THREE.TextureLoader();
const roughnessTexture = textureLoader.load(roughness);

const material = new THREE.MeshStandardMaterial({map: doorColorTexture,transparent: true,alphaMap: doorAlphaTexture,aoMap: doorAOTexture,side: THREE.DoubleSide,displacementMap: doorHeightTexture,displacementScale: 0.05,roughness: 1,roughnessMap: roughnessTexture
}); 

在模型的具体位置上,metalnessroughness两个属性的实际值等于属性值本身与相应贴图中的值的乘积。上述代码将会生成如下图所示的效果:

可以看到门的主体部分镜面发射,而门的扉页上可能会因为生锈导致并没有完全反射~

metalness 用法与 roughness 完全相同,这里就不再演示了。

最后

为大家准备了一个前端资料包。包含54本,2.57G的前端相关电子书,《前端面试宝典(附答案和解析)》,难点、重点知识视频教程(全套)。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

Java基础学习笔记(十四)—— 集合(2)

集合1 Set 集合1.1 Set 集合概述1.2 Set 集合的使用2 TreeSet 类2.1 TreeSet 类概述2.2 TreeSet 基本使用2.3 TreeSet 排序3 HashSet 类3.1 HashSet 类概述3.2 HashSet 基本使用3.3 哈希值3.4 HashSet 案例4 Map 集合4.1 Map 集合概述4.2 Map 常用方法4.3 Map 的遍历5 HashMap …

mysql:存储过程的创建与使用

一、创建存储过程 使用MySql Workbench创建存储过程,一定要记得使用delimiter指明结束符,否则会报错:Statement is incomplete, expecting: ;’ 错误示例: create procedure area_pro1(in mylevel tinyint) beginselect * from…

回看2022,展望2023

目录一、回看2022求职心路身份过度二、展望20232023年,祝大家天天开心,身体健康,万事如意,一起加油!一、回看2022 求职心路 2022年过去了,2023年到来了。在2022年我印象比较深刻的是8-11月份的日子&#…

【正点原子FPGA连载】第十六章Petalinux设计流程实战摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十六章Petalin…

大数据必学Java基础(一百二十一):Maven项目结构介绍

文章目录 Maven项目结构介绍 一、标准目录结构 二、结构图 Maven项目结构介绍 一、标准目录结构

商场导视图用什么软件做,专业、便捷的室内电子地图绘制平台

在一些大型商场,顾客很多时候找不到店铺和需要的商品、不了解商家的优惠促销信息、大型活动日排队和消费等等。在这个全民习惯于手机导航的时代,假如商场的活动信息也能够全部显示在手机上,并且能实时的进行导航,那该有多方便&…

剑指offer----C语言版----第十八天----面试题24:反转链表

目录 1. 反转链表 1.1 题目描述 1.2 思路一:反转指针 1.3 思路二:头插到新链表 1.4 往期回顾 1. 反转链表 原题链接: 剑指 Offer 24. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/fan-zhuan-lian-biao-…

4700. 何以包邮?(简单的dp 01背包思想)

题目如下: 输入样例1: 4 100 20 90 60 60输出样例1: 110样例1解释 购买前两本书 (2090) 即可包邮且花费最小。 输入样例2: 3 30 15 40 30输出样例2: 30样例2解释 仅购买第三本书恰好可以满足包邮条件。 输入样例…

分享128个ASP源码,总有一款适合您

分享128个ASP源码,总有一款适合您 ASP源码 分享128个ASP源码,总有一款适合您 链接:https://pan.baidu.com/s/1FXTm501s200ASY8XYTIk7w?pwd474b 提取码:474b 下面是文件的名字,我放了一些图片,文章里不…

安凯微在科创板IPO过会:计划募资10亿元,小米等为其股东

1月13日,上海证券交易所披露的信息显示,广州安凯微电子股份有限公司(下称“安凯微”)首发符合发行条件、上市条件和信息披露要求,即IPO过会。目前,安凯微的上市申请状态已经变更为“上市委会议通过”。 本次…

线程学习基础(1):单线程爬虫和多线程爬虫的效率比照

线程学习基础:单线程爬虫和多线程爬虫的效率比照1. 并发线程的需求2. 线程提速方法3. 如何选择并发编程的三种方式3.1 什么是CPU密集型计算、IO密集型计算?3.1.1 CPU密集型(CPU-bound)3.1.2 IO密集型(IO-bound)3.2 多线程Thread、…

三维空间中散点平面拟合方法

1、三点求平面方程、平面法向量和点到平面的距离 已知三点p1(x1,y1,z1),p2(x2,y2,z2),p3(x3,y3,z3), 要求确定的平面方程,关键在于求出平面的一个法向量 为此做向量p1p2(x2-x1,y2-y1,z2-z1), p1p3(x3-x1,…

Linux-8 用户管理

Linux-8 用户管理 什么是用户? Linux/Windows通过用户来管理和维护系统; Windows下的管理员用户:AdministratorLinux下的管理员用户:root Windows/Linux都是多用户系统 Windows同一时间只能使用1个用户Linux可以多用户同时登陆&…

STL - Vector容器

基本概念 功能: vector数据结构和数组十分类似,也成为单端数组 vector和普通数组的区别: 不同之处在于数组是静态空间,而vector可以动态扩展 动态扩展: 并不是在原空间后续再接空间&#x…

【pandas】用户手册:10分钟熟悉pandas(下)

数据分组 Splitting : 利用某些条件将数据进行分组Applying : 函数应用于每个单独的分组Combining : 合并最终的结果 df pd.DataFrame({"A": ["foo", "bar", "foo", "bar", "foo", "bar", "foo&q…

【正点原子FPGA连载】第十四章Linux基础外设的使用 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十四章Linux基…

百趣代谢组学文献分享:间歇性禁食调节糖尿病脑损伤多组学研究

百趣代谢组学文献分享,糖尿病已经成为一个全球问题,国际糖尿病联盟(IDF)发布的全球糖尿病地图(第9版)[1]显示,全球糖尿病患者人数不断上升,全球平均增长率为51%,目前有4.…

C#,图像二值化(23)——局部阈值的绍沃拉算法(Sauvola Thresholding)及源程序

1、局部阈值的绍沃拉算法(Sauvola Thresholding)Niblack和Sauvola阈值算法Niblack和Sauvola阈值是局部阈值技术,对于背景不均匀的图像非常有用,尤其是对于文本识别1、2。代替为整个图像计算单个全局阈值,通过使用考虑到…

【5】K8S_Deployment

目录 1、Deployment作用 2、deployment的冗余能力 3、deployment的多副本部署 4、deployment的扩缩容 5、deployment的自愈能力 6、滚动更新 7、版本回退 1、Deployment作用 控制Pod,使Pod拥有多副本,自愈,扩缩容等能力 2、deployme…

【正点原子FPGA连载】第十五章开发环境搭建 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Linux开发指南

1)实验平台:正点原子MPSoC开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692450874670 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第十五章开发环境…