十一、PBR材质金属度、粗糙度以及环境贴图的使用

news2024/11/25 21:50:31

Three.js——十一、PBR材质金属度、粗糙度以及环境贴图的使用

metalness金属度

金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。

new THREE.MeshStandardMaterial({
    metalness: 1.0,//金属度属性
})
// 或者
// mesh.material.metalness = 1.0;//金属度
    const geometry = new THREE.BoxGeometry(10, 10, 10);
    // 材质
    const material = new THREE.MeshStandardMaterial({
      color: 0x51efe4, 
      metalness: 1,
    });
    const mesh = new THREE.Mesh(geometry, material);
    mesh.position.set(0, 0, 0);
    scene.add(mesh);
    // mesh.material.metalness = 1;
    gui = new GUI();
    gui.add(material, "metalness", 0, 1);

roughness粗糙度

粗糙度roughness表示模型表面的光滑或者说粗糙程度,越光滑镜面反射能力越强,越粗糙,表面镜面反射能力越弱,更多地表现为漫反射。
粗糙度roughness,0.0表示平滑的镜面反射,1.0表示完全漫反射,默认0.5。

    const geometry = new THREE.BoxGeometry(10, 10, 10);
    // 材质
    textureCube = new THREE.CubeTextureLoader()
      .setPath(new URL("@/assets/", import.meta.url).href)
      .load(["/02.png", "/02.png", "/02.png", "/02.png", "/02.png", "/02.png"]);
    const material = new THREE.MeshStandardMaterial({
      color: 0x51efe4, //0x51efe4设置材质颜色
      metalness: 1,
      roughness: 0.5,
      envMap: textureCube,
    });
    const mesh = new THREE.Mesh(geometry, material);
    mesh.position.set(0, 0, 0);

    scene.add(mesh);
    // mesh.material.metalness = 1;
    gui = new GUI();
    gui.add(material, "metalness", 0, 1);
    gui.add(material, "roughness", 0, 1);

测试图片
请添加图片描述

实际效果如下:
请添加图片描述

envMapIntensity环境贴图反射率

用于设置环境贴图的强度。它控制着环境贴图对物体表面的反射程度,数值越大反射越强烈,数值越小反射越弱。该属性的取值范围为0到1之间,默认值为1。

总结:粗糙度越小,反射效果越强,如果设置为0,那么他将完全镜面反射,等同于镜子。
当然在实际开发中,环境贴图的不同也会对渲染效果造成影响,也需要选择合适的贴图,往往这种贴图可以让美术提供即可。

纹理和渲染器颜色空间一致

textureCube.encoding = THREE.sRGBEncoding; 

关于模型的环境贴图environment

loader.load(new URL(`../assets/model.glb`, import.meta.url).href, function (gltf) {
    // 递归遍历批量设置环境贴图
    gltf.scene.traverse(function (obj) {
        if (obj.isMesh) { //判断是否是网格模型
            obj.material.envMap = textureCube; //设置环境贴图
        }
    });
})

如果想使用环境贴图对scene所有Mesh添加贴图材质,可以通过Scene的场景环境属性.environment实现,把环境贴图对应纹理对象设置为.environment的属性值即可。

scene.environment = textureCube;

encoding设置纹理的编码方式

encoding`纹理的颜色值如何被编码和解码,以确保正确的颜色显示。常见的编码方式包括sRGB、Linear和RGBE等。不同的编码方式适用于不同的场景和需求。在使用纹理时,需要根据实际情况选择合适的编码方式。

//如果renderer.outputEncoding=THREE.sRGBEncoding;环境贴图需要保持一致
textureCube.encoding = THREE.sRGBEncoding;   

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

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

相关文章

Java面试题-并发篇(2万字带你搞定并发问题)

Java面试题-并发篇 一、线程 1. 线程和进程有什么区别? 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务…

山西电力市场日前价格预测【2023-07-12】

日前价格预测 预测明日(2023-07-12)山西电力市场全天平均日前电价为446.44元/MWh。其中,最高日前价格为584.92元/MWh,预计出现在12: 00。最低日前电价为325.62元/MWh,预计出现在00: 30。 价差方向预测 1:实…

【操作系统】磁盘调度算法 先来先服务、最短寻道时间优先、扫描算法、循环扫描算法

目录 一、实验要求二、实验原理三、实验内容四、实验结果五、总结 一、实验要求 设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、扫描算法SCAN和循环扫描算法CSCAN的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反…

【sgRectSelect】Vue实现拖拽鼠标圈选、划区域、框选组件:矩形区域选中checkbox,并回调相关选中、取消选中的操作

边框线虚线动画效果请参阅边框虚线滚动动画特效_虚线滚动效果_你挚爱的强哥的博客-CSDN博客【代码】边框虚线滚动动画特效。_虚线滚动效果https://blog.csdn.net/qq_37860634/article/details/130507289 碰撞检测原理请前往 原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞…

嵌入式c语言编码规范

学习嵌入式的同学应该首先掌握嵌入式编码规范,这样才能更好的嵌入式系统。 下面就从这几个方面讲解一下嵌入式c编码规范。 注释风格、排版风格、头文件风格、变量定义、宏定义、函数 1 注释风格 1.1 注释的原则是有助于对程序的阅读和理解,注释不宜太多…

通过(.zip 压缩文件)安装及卸载MySQL

文章目录 一、MySQL安装1.下载MySQL压缩包2.将下载好的压缩包解压到一个没有中文路径的目录下3.配置MySQL环境变量4.验证是否配置成功5.初始化MySQL数据库6.注册MySQL服务7.启动MySQL服务8.修改MySQL数据库默认账户密码9.登录MySQL数据库10.退出MySQL 二、MySQL卸载1.以管理员身…

什么是EDI 180 退货授权和通知?

EDI 180 退货授权和通知是零售商和供应商在退货过程中使用的电子数据交换(EDI)文件。它既可以作为请求和授权,也可以作为通知文件。 EDI 180 的基本组成部分是什么? EDI 180 交易需要包括有关退货的关键信息。由于EDI 180可以双…

Linux 批量杀掉进程(包含某个关键字)

一、场景说明 现场环境有十多个包含 ”celery” 关键字的进程在运行,每次重启服务,需要将这些进行kill掉,然后重新启动。 可以用如下命令批量kill掉这些进程: kill -9 PID1 PID2 PID3 PID4.....其中,PID是查询到的进…

第九章——内存模型和名称空间

单独编译 C允许程序员将组件函数放在独立的文件中。下面列出了头文件中常包含的内容: 函数原型使用#define或const定义的符号常量结构声明类声明模板声明内联函数 将结构声明放在头文件中是可以的,因为它们不创建变量,而只是在源代码文件…

数据结构--树的存储结构

数据结构–树的存储结构 树的逻辑结构 树是 n ( n ≥ 0 ) n (n\ge0) n(n≥0)个结点的有限集合,n 0 时,称为空树,这是一种特殊情况。 在任意一棵非空树中应满足: 1)有且仅有一个特定的称为 根 …

如何执行Photoshop脚本

环境 Photoshop: CC2017 OS: Windows 10 脚本放置位置 C:\Program Files\Adobe\Adobe Photoshop CC 2015\Presets\Scripts #也就是 PS的安装目录\Presets\Scripts

操作系统接口 MIT 6.828 - 1. Lab 01: Xv6 and Unix utilities

本文会将lab1中的思路以及知识点进行分析,并作为作者学习MIT 6.828的一个学习总结,希望能够帮助到学习该lab的同学们 中文版书籍:中文版书籍 实验教案地址:教案地址 操作系统接口 在操作系统中,为了能够有效地与操作系…

Amelia、Bookly 和 Booked:哪个WordPress预约插件更好?

各种企业都需要预订软件来管理预约。然而,开发预订系统是网站中最复杂和最昂贵的元素之一。 那些使用 WordPress 构建网站的人有一个优势。只需点击几下,他们就可以将预约插件集成到他们的网站中。 预约插件是一个预订向导,可以自动执行和管…

数据结构——堆的实现(细)

目录 1.1 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆…

Netty核心技术十--Netty 核心源码剖析

1. 基本说明 只有看过Netty源码,才能说是真的掌握了Netty框架。 在 io.netty.example 包下,有很多Netty源码案例,可以用来分析 2. netty 启动过程源码分析 本次分析使用的是example包下的echo 2.1 源码剖析的目的 用源码分析的方式走一下…

Java 动态规划 Leetcode 63. 不同路径 II

该题大部分思路可以根据Leetcode 62. 不同路径这篇博客了解 这里进行基于上面那篇博客后来对该题进行补充 代码展示: class Solution {public int uniquePathsWithObstacles(int[][] obstacleGrid) {int mobstacleGrid.length;int nobstacleGrid[0].length;//创建…

HDFS块详解

HDFS块详解 传统型分布式文件系统的缺点 现在想象一下这种情况:有四个文件 0.5TB的file1,1.2TB的file2,50GB的file3,100GB的file4;有7个服务器,每个服务器上有10个1TB的硬盘。 在存储方式上,我…

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程

Docker安装ElasticSearch8.X docker安装elasticsearch8.X完整详细教程 Docker 上安装 ElasticSearch 8.8.1 的步骤:选择要安装的ElasticSearch 版本1、拉取 ElasticSearch 镜像2、创建并运行容器关闭容器启动容器重启容器 3、elasticsearch常用端口以及作用4、测试&…

基于spring cloud alibaba的低代码核心工具,jvs-logic逻辑引擎

在现代企业管理中,决策扮演着至关重要的角色。然而,随着业务规模的扩大和数据量的增加,人工决策变得越来越困难和耗时,而且容易受到主观因素的影响。逻辑引擎的出现为企业提供了一种高效、准确的决策推理工具,能够以逻…

[工业互联-23]:EtherCat从站 - EtherCAT协议栈与工作原理, 软硬件解决方案

目录 第1章 EtherCAT通信原理 1.1 网络架构 1.2 分层模型 2.1 物理层 1.2 数据链路层 1.2.1 EtherCAT数据帧结构 1.2.2 EtherCAT报文寻址 第2章 EtherCAT从站 2.1 概述 2.2 EtherCAT从站的组成包括: 2.3 EtherCAT从站的硬件 2.4 从站控制信息芯片&#…