7.PBR材质与纹理贴图
PBR材质简介
所谓PBR就是,基于物理的渲染(physically-based rendering)。
Three.js提供了两个PBR材质相关的APIMeshStandardMaterial和
MeshPhysicalMaterial,其中MeshPhysicalMaterial是MeshStandardMaterial扩展的子类,提供了更多的功能属性。
PBR材质金属度和粗糙度
金属度属性.metalness表示材质像金属的程度, 非金属材料,如木材或石材,使用0.0,金属使用1.0。
new THREE.MeshStandardMaterial({metalness: 1.0,//金属度属性
})
粗糙度roughness表示模型表面的光滑或者说粗糙程度,越光滑镜面反射能力越强,越粗糙,表面镜面反射能力越弱,更多地表现为漫反射。
new THREE.MeshStandardMaterial({roughness: 0.5,//表面粗糙度
})
环境贴图.enMap
通过前面学习大家知道,通过纹理贴图加载器TextureLoader的.load()
方法加载一张图片可以返回一个纹理对象Texture
。
立方体纹理加载器CubeTextureLoader的.load()
方法是加载6张图片,返回一个立方体纹理对象TextureLoader。
立方体纹理对象CubeTextureLoader的父类是纹理对象Texture。
CubeTextureLoader加载环境贴图
// 加载环境贴图
// 加载周围环境6个方向贴图
// 上下左右前后6张贴图构成一个立方体空间
// 'px.jpg', 'nx.jpg':x轴正方向、负方向贴图 p:正positive n:负negative
// 'py.jpg', 'ny.jpg':y轴贴图
// 'pz.jpg', 'nz.jpg':z轴贴图
const textureCube = new THREE.CubeTextureLoader().setPath('./环境贴图/环境贴图0/').load(['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg']);// CubeTexture表示立方体纹理对象,父类是纹理对象Texture
MeshStandardMaterial环境贴图数据.envMap
// 加载环境贴图
const textureCube = new THREE.CubeTextureLoader().setPath('./环境贴图/环境贴图0/').load(['px.jpg', 'nx.jpg', 'py.jpg', 'ny.jpg', 'pz.jpg', 'nz.jpg']);
new THREE.MeshStandardMaterial({metalness: 1.0,roughness: 0.5,envMap: textureCube, //设置pbr材质环境贴图
})
obj.material.envMap = textureCube; //设置环境贴图
环境贴图反射率.envMapIntensity
MeshStandardMaterial的.envMapIntensity属性主要用来设置模型表面反射周围环境贴图的能力,或者说环境贴图对模型表面的影响能力。
obj.material.envMapIntensity = 1.0;
MeshPhysicalMaterial清漆层
MeshPhysicalMaterial和MeshStandardMaterial都是拥有金属度metalness、粗糙度roughness属性的PBR材质,MeshPhysicalMaterial是在MeshStandardMaterial基础上扩展出来的子类,除了继承了MeshStandardMaterial的金属度、粗糙度等属性,还新增了清漆.clearcoat、透光率.transmission、反射率.reflectivity、光泽.sheen、折射率.ior等等各种用于模拟生活中不同材质的属性。
清漆层属性.clearcoat
清漆层属性.clearcoat
可以用来模拟物体表面一层透明图层,就好比你在物体表面刷了一层透明清漆,喷了点水。.clearcoat的范围0到1,默认0。
const material = new THREE.MeshPhysicalMaterial( {clearcoat: 1.0,//物体表面清漆层或者说透明涂层的厚度
} );
清漆层粗糙度.clearcoatRoughness
清漆层粗糙度.clearcoatRoughness
属性表示物体表面透明涂层.clearcoat
对应的的粗糙度,.clearcoatRoughness
的范围是为0.0至1.0。默认值为0.0。
const material = new THREE.MeshPhysicalMaterial( {clearcoat: 1.0,//物体表面清漆层或者说透明涂层的厚度clearcoatRoughness: 0.1,//透明涂层表面的粗糙度
} );
物理材质透光率transmission
透光率(透射度).transmission
为了更好的模拟玻璃、半透明塑料一类的视觉效果,可以使用物理透明度.transmission
属性代替Mesh普通透明度属性.opacity
。
使用.transmission
属性设置Mesh透明度,即便完全透射的情况下仍可保持高反射率。
物理光学透明度.transmission
的值范围是从0.0到1.0。默认值为0.0。
const mesh = gltf.scene.getObjectByName('玻璃01')
mesh.material = new THREE.MeshPhysicalMaterial({transmission: 1.0, //玻璃材质透光率,transmission替代opacity
})
折射率.ior
非金属材料的折射率从1.0到2.333。默认值为1.5。
new THREE.MeshPhysicalMaterial({ior:1.5,//折射率
})
7.PBR材质与纹理贴图相关推荐
- WebGL/ThreeJS几何体、材质、纹理贴图,给几何体披上好看的外衣
1.ThreeJS的常见几何体 BufferGeometry和Geometry有什么不同? 如果你想简单理解BufferGeometry和Geometry有什么不同,就是两者的数据结构不同,缓冲类型几 ...
- 【Houdini官方入门教程翻译】概述——UV和纹理贴图
文章目录 概述 UV视图介绍 UV Quickshade节点 UV Project节点 UV Flatten节点 UV Edit节点 UV Layout节点 UDIMS UV 属性(Attribute ...
- UE4 PBR虚幻引擎4贴图和材质创建_GDCC2015
转载自:https://blog.csdn.net/pizi0475/article/details/49681053 PBR:应用于虚幻引擎4贴图和材质创建 PBR材质似乎在一夜之间改变了人们对于引 ...
- 技术美术自学——PBR材质通道基础 常见贴图种类列举(求dalao轻喷)
PBR材质通道基础 非共用部分 (金属/粗糙度流程 Metal / Roughness Workflow) 基础颜色贴图 Base Color Map 金属纤维贴图 Metallic (Graysca ...
- Texture(纹理贴图)和Material(材质)概念上的区别
我的理解是:纹理更偏向于"图",而材质更偏向于"属性". 打个比方说,对同一个立方体模型进行处理: 加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理 ...
- 材质、纹理、贴图的关系
材质.纹理.贴图的关系 材质 (Material)包含贴图 (Map),贴图包含纹理 (Texture). 纹理(Texture)是最基本的数据输入单位.
- 关于 mat0_c.jpg 风格的 PBR 材质贴图与 Noesis 加入 .mview 文件的问题解决
有些做设计的网友问,得到的模型贴图是 mat0_c.jpg 的,观察是 PBR 材质贴图 但是不知道哪个文件用在哪个通道,这里专门解答 1.首先这种贴图一般是Marmoset解包得到的贴图文件 一般可 ...
- Threejs入门之十六:纹理贴图和纹理材质
Texture 用于创建一个纹理贴图,将其应用到一个物体的表面,纹理对象可以通过TextureLoader(纹理加载器)的load()方法来加载一个图片.要使用纹理贴图,首先要创建一个纹理加载器,纹理 ...
- 一文看懂-纹理/贴图/材质
纹理(Texture)应用于网格表面上的标准位图图像,即3D 对象的 2D 贴图. 贴图(Map)指的是绘制在对象模型表面上的那些图像数据,其所使用的图像文件称为纹理.贴图还包含纹理图在对象表面的坐标 ...
最新文章
- ASP.NET MVC动作过滤器
- Node.js实现简易爬虫
- return 函数
- java:大数运算 高精度乘法
- hydra mysql 爆破_Hydra(爆破神器)使用方法
- linux pcre静态编译,Linux下,Nginx部署静态网站
- pythoning——11、正则匹配
- error LNK2005 已经在***.obj中定义
- Visual C++ 2008入门经典 第二十一章更新数据源
- php怎么输出汉字大写的时间,php汉字转首字母大写的方法是什么
- Python多进程与多线程编程
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,网页一直处于加载中,servlet+html+js+css项目难题解决
- Sqlmap使用教程--Sqlmap安装
- C语言小案例_OA大典故障案例摘录【第1392篇】兄弟9140cdn彩机报:!硒鼓!滑动硒鼓单元上的绿色滑块bk黑色c青色m品红色y黄色...
- (轉貼) 人人有功練!! 有功夫,沒懦夫 (News)
- 细粒度情感分析在到餐场景中的应用
- laravel 开源文档管理系统
- 高质量编辑和压缩pdf
- manjaro linux树莓派,manjaro
- Gazebo手册:【1】gazebo基本操作案例
热门文章
- Android冷启动-实现APP秒开
- jsgrid使用control的loadData动态加载数据
- (理解)单链表算法循环条件while(p)和while(p->next)有什么区别
- 抖音运营怎么做?在线教你获取抖音赚钱方法!
- 什么软件可以赚钱,说点抖音赚钱的那些事!
- 王者荣耀23号服务器维护,王者荣耀3月23日登入异常却因这件小事 天美损失惨重...
- 3dmax2018官方完整版(64位)安装教程、激活方法
- uniapp 更改浏览器图标
- python爬虫可以爬取哪些有用的东西_有哪些网站用爬虫爬取能得到很有价值的数据?...
- P5.js创意编程之自我介绍