携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情 >>
前言
上一篇讲的是材质的种类,总共列举了8种材质并对每种材质进行了介绍并根据个人理解对材质下了定义,本章就是围绕材质的实例化及使用,进行说明
材质属性的设置方式
- 在实例化时设置
const material = new THREE.MeshPhongMaterial({
color: 0xFF0000, // 红色 (也可以使用CSS的颜色字符串)
flatShading: true,
});
- 在实例化之后设置
const material = new THREE.MeshPhongMaterial();
material.color.setHSL(0, 1, .5); // 红色
material.flatShading = true;
材质颜色的设置方式
- 同 CSS的 #RRGGBB 风格
- 任何 CSS 颜色字符串, 比如 'purple', '#F32','rgb(255, 127, 64)','hsl(180, 50%, 25%)'
- 其他一些 THREE.Color对象
- h,s,l方式的
- r,g,b方式的
const m1 = new THREE.MeshBasicMaterial({color: 0xFF0000}); // 红色
const m2 = new THREE.MeshBasicMaterial({color: 'red'}); // 红色
const m3 = new THREE.MeshBasicMaterial({color: '#F00'}); // 红色
const m4 = new THREE.MeshBasicMaterial({color: 'rgb(255,0,0)'}); // 红色
const m5 = new THREE.MeshBasicMaterial({color: 'hsl(0,100%,50%)'}); // 红色
material.color.set(0x00FFFF); // 同 CSS的 #RRGGBB 风格
material.color.set(cssString); // 任何 CSS 颜色字符串, 比如 'purple', '#F32',
// 'rgb(255, 127, 64)',
// 'hsl(180, 50%, 25%)'
material.color.set(someColor) // 其他一些 THREE.Color
material.color.setHSL(h, s, l) // 其中 h, s, 和 l 从 0 到 1
material.color.setRGB(r, g, b) // 其中 r, g, 和 b 从 0 到 1
各种材质的属性需要特别注意的部分
- MeshPhongMaterial的
shininess设置决定了镜面高光的光泽度。它的默认值是30,简单来说,就是 高亮的程度。越大 ,越亮
emissive材质的放射(光)颜色,基本上是不受其他光照影响的固有颜色。默认为黑色,当高亮shininess为0,反射光一致的时候,MeshLambertMaterial、MeshPhongMaterial、MeshBasicMaterial这三种材质,看起来一毛一样
- 补充:上一章漏掉了一种基础材质MeshToonMaterial,这个是一个由双色渐变组成的材质,这个就很像卡通画的材质
- MeshStandardMaterial 物理材质渲染有两个属性来决定高光效果,一个是
roughness定义的是物体表面的粗糙程度,粗糙度的范围从0到1,和shininess所表达的正好相反,还有一个属性是metalness,metal 金属 金属化的意思,所以metalness指的就是材质的金属度,金属与非金属的表现不同。0代表非金属,1代表金属。下图中,粗糙度从左至右,从0到1,金属度,从上到下,从0到1
- 上一章提过,MeshPhysicalMaterial比MeshStandardMaterial多一个属性Clearcoat,清漆效果,所以他还有两个属性,一个是Clearcoat表示clear coat层的强度,范围从0.0到1.0m,当需要在表面加一层薄薄的半透明材质的时候,可以使用与clear coat相关的属性,默认为0.0;还有一个是clearcoatRoughness,决定的是图层的粗糙程度从0到1,默认是0
- flatShading 材质的通用属性,是否对平面应用着色,为true时,会展现出构成立方体的细节,会把线段绘制出来
- side 材质的通用属性,要展示那个面,默认是FrontSide,因为大部分立方体都不透明,不需要看到反面
后记
材质中还有大量细节需要关注,特别是 纹理我们没有考虑过,接下的学习将会逐步的深入这些内容,包括之前挂起来的深度材质,阴影材质,自定义着色器材质等等。。。