PBR材质简介

所谓PBR就是,基于物理的渲染(physically-based rendering)。

Three.js提供了两个PBR材质相关的APIMeshStandardMaterialMeshPhysicalMaterial,其中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材质与纹理贴图相关推荐

  1. WebGL/ThreeJS几何体、材质、纹理贴图,给几何体披上好看的外衣

    1.ThreeJS的常见几何体 BufferGeometry和Geometry有什么不同? 如果你想简单理解BufferGeometry和Geometry有什么不同,就是两者的数据结构不同,缓冲类型几 ...

  2. 【Houdini官方入门教程翻译】概述——UV和纹理贴图

    文章目录 概述 UV视图介绍 UV Quickshade节点 UV Project节点 UV Flatten节点 UV Edit节点 UV Layout节点 UDIMS UV 属性(Attribute ...

  3. UE4 PBR虚幻引擎4贴图和材质创建_GDCC2015

    转载自:https://blog.csdn.net/pizi0475/article/details/49681053 PBR:应用于虚幻引擎4贴图和材质创建 PBR材质似乎在一夜之间改变了人们对于引 ...

  4. 技术美术自学——PBR材质通道基础 常见贴图种类列举(求dalao轻喷)

    PBR材质通道基础 非共用部分 (金属/粗糙度流程 Metal / Roughness Workflow) 基础颜色贴图 Base Color Map 金属纤维贴图 Metallic (Graysca ...

  5. Texture(纹理贴图)和Material(材质)概念上的区别

    我的理解是:纹理更偏向于"图",而材质更偏向于"属性". 打个比方说,对同一个立方体模型进行处理: 加纹理信息,可以认为是贴上图,比如木头的纹理图,大理石的纹理 ...

  6. 材质、纹理、贴图的关系

    材质.纹理.贴图的关系 材质 (Material)包含贴图 (Map),贴图包含纹理 (Texture). 纹理(Texture)是最基本的数据输入单位.

  7. 关于 mat0_c.jpg 风格的 PBR 材质贴图与 Noesis 加入 .mview 文件的问题解决

    有些做设计的网友问,得到的模型贴图是 mat0_c.jpg 的,观察是 PBR 材质贴图 但是不知道哪个文件用在哪个通道,这里专门解答 1.首先这种贴图一般是Marmoset解包得到的贴图文件 一般可 ...

  8. Threejs入门之十六:纹理贴图和纹理材质

    Texture 用于创建一个纹理贴图,将其应用到一个物体的表面,纹理对象可以通过TextureLoader(纹理加载器)的load()方法来加载一个图片.要使用纹理贴图,首先要创建一个纹理加载器,纹理 ...

  9. 一文看懂-纹理/贴图/材质

    纹理(Texture)应用于网格表面上的标准位图图像,即3D 对象的 2D 贴图. 贴图(Map)指的是绘制在对象模型表面上的那些图像数据,其所使用的图像文件称为纹理.贴图还包含纹理图在对象表面的坐标 ...

最新文章

  1. ASP.NET MVC动作过滤器
  2. Node.js实现简易爬虫
  3. return 函数
  4. java:大数运算 高精度乘法
  5. hydra mysql 爆破_Hydra(爆破神器)使用方法
  6. linux pcre静态编译,Linux下,Nginx部署静态网站
  7. pythoning——11、正则匹配
  8. error LNK2005 已经在***.obj中定义
  9. Visual C++ 2008入门经典 第二十一章更新数据源
  10. php怎么输出汉字大写的时间,php汉字转首字母大写的方法是什么
  11. Python多进程与多线程编程
  12. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,网页一直处于加载中,servlet+html+js+css项目难题解决
  13. Sqlmap使用教程--Sqlmap安装
  14. C语言小案例_OA大典故障案例摘录【第1392篇】兄弟9140cdn彩机报:!硒鼓!滑动硒鼓单元上的绿色滑块bk黑色c青色m品红色y黄色...
  15. (轉貼) 人人有功練!! 有功夫,沒懦夫 (News)
  16. 细粒度情感分析在到餐场景中的应用
  17. laravel 开源文档管理系统
  18. 高质量编辑和压缩pdf
  19. manjaro linux树莓派,manjaro
  20. Gazebo手册:【1】gazebo基本操作案例

热门文章

  1. Android冷启动-实现APP秒开
  2. jsgrid使用control的loadData动态加载数据
  3. (理解)单链表算法循环条件while(p)和while(p->next)有什么区别
  4. 抖音运营怎么做?在线教你获取抖音赚钱方法!
  5. 什么软件可以赚钱,说点抖音赚钱的那些事!
  6. 王者荣耀23号服务器维护,王者荣耀3月23日登入异常却因这件小事 天美损失惨重...
  7. 3dmax2018官方完整版(64位)安装教程、激活方法
  8. uniapp 更改浏览器图标
  9. python爬虫可以爬取哪些有用的东西_有哪些网站用爬虫爬取能得到很有价值的数据?...
  10. P5.js创意编程之自我介绍