JSRUN 用代码说话

标准网格材质(MeshStandardMaterial)

编辑教程

标准网格材质(MeshStandardMaterial)

一种基于物理的标准材质,使用Metallic-Roughness工作流程。

基于物理的渲染(PBR)最近已成为许多3D应用程序的标准,例如Unity, Unreal和 3D Studio Max。

这种方法与旧方法的不同之处在于,不使用近似值来表示光与表面的相互作用,而是使用物理上正确的模型。 我们的想法是,不是在特定照明下调整材质以使其看起来很好,而是可以创建一种材质,能够“正确”地应对所有光照场景。

在实践中,该材质提供了比MeshLambertMaterial 或MeshPhongMaterial 更精确和逼真的结果,代价是计算成本更高。

计算着色的方式与MeshPhongMaterial相同,都使用Phong着色模型, 这会计算每个像素的阴影(即在fragment shader, AKA pixel shader中), 与MeshLambertMaterial使用的Gouraud模型相比,该模型的结果更准确,但代价是牺牲一些性能。

请注意,为获得最佳效果,您在使用此材质时应始终指定environment map。

有关PBR概念的非技术性介绍以及如何设置PBR材质,请查看marmoset成员的这些文章:

  • Basic Theory of Physically Based Rendering
  • Physically Based Rendering and You Can Too

在 three.js(以及其他大多数PBR系统)中使用方法的技术细节, 可以在Brent Burley撰写的paper from Disney (pdf) 中查看。

构造函数(Constructor)

MeshStandardMaterial( parameters : Object )

parameters - (可选)用于定义材质外观的对象,具有一个或多个属性。 材质的任何属性都可以从此处传入(包括从Material继承的任何属性)。

属性color例外,其可以作为十六进制字符串传递,默认情况下为 0xffffff(白色),内部调用Color.set(color)。

属性(Properties)

共有属性请参见其基类Material。

.alphaMap : Texture

alpha贴图是一张灰度纹理,用于控制整个表面的不透明度。(黑色:完全透明;白色:完全不透明)。 默认值为null。

仅使用纹理的颜色,忽略alpha通道(如果存在)。 对于RGB和RGBA纹理,WebGL渲染器在采样此纹理时将使用绿色通道, 因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。 Luminance-only以及luminance/alpha纹理也仍然有效。

.aoMap : Texture

该纹理的红色通道用作环境遮挡贴图。默认值为null。aoMap需要第二组UVs,因此将忽略repeat和offset属性。

.aoMapIntensity : Float

环境遮挡效果的强度。默认值为1。零是不遮挡效果。

.bumpMap : Texture

用于创建凹凸贴图的纹理。黑色和白色值映射到与光照相关的感知深度。凹凸实际上不会影响对象的几何形状,只影响光照。如果定义了法线贴图,则将忽略该贴图。

.bumpScale : Float

凹凸贴图会对材质产生多大影响。典型范围是0-1。默认值为1。

.color : Color

材质的颜色(Color),默认值为白色 (0xffffff)。

.defines : Object

如下形式的对象:

{ 'STANDARD': '' };

WebGLRenderer使用它来选择shaders。

.displacementMap : Texture

位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象, 以及充当真实的几何体。位移纹理是指:网格的所有顶点被映射为图像中每个像素的值(白色是最高的),并且被重定位。

.displacementScale : Float

位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)。如果没有设置位移贴图,则不会应用此值。默认值为1。

.displacementBias : Float

位移贴图在网格顶点上的偏移量。如果没有设置位移贴图,则不会应用此值。默认值为0。

.emissive : Color

材质的放射(光)颜色,基本上是不受其他光照影响的固有颜色。默认为黑色。

.emissiveMap : Texture

设置放射(发光)贴图。默认值为null。放射贴图颜色由放射颜色和强度所调节。 如果你有一个放射贴图,请务必将放射颜色设置为黑色以外的其他颜色。

.emissiveIntensity : Float

放射光强度。调节发光颜色。默认为1。

.envMap : TextureCube

环境贴图。默认值为null。 请注意,为了使材质粗糙度属性能够正确地模糊环境贴图,shader必须能够访问环境纹理的mipmaps。 使用默认设置创建的TextureCubes已正确配置; 如果手动调整纹理参数, 请确保将minFilter设置为其中一个MipMap选项,并且未强制禁用mip贴图。

注意:MeshStandardMaterial 仅支持cube environment maps。 如果要使用equirectangular贴图,则需要使用 WebGLRenderTargetCube.fromEquirectangularTexture().。 详细信息请参阅此示例example。

.envMapIntensity : Float

通过乘以环境贴图的颜色来缩放环境贴图的效果。

.isMeshStandardMaterial : Boolean

用于检查此类或派生类是否为标准网格材质。默认值为 true。

因为其通常用在内部优化,所以不应该更改该属性值。

.lightMap : Texture

光照贴图。默认值为null。lightMap需要第二组UVs,因此将忽略repeat和offset纹理属性。

.lightMapIntensity : Float

烘焙光的强度。默认值为1。

.map : Texture

颜色贴图。默认为null。纹理贴图颜色由漫反射颜色.color调节。

.metalness : Float

材质与金属的相似度。非金属材质,如木材或石材,使用0.0,金属使用1.0,通常没有中间值。 默认值为0.5。0.0到1.0之间的值可用于生锈金属的外观。如果还提供了metalnessMap,则两个值相乘。

.metalnessMap : Texture

该纹理的蓝色通道用于改变材质的金属度。

.morphNormals : boolean

定义是否使用morphNormals。设置为true可将morphNormal属性从Geometry传递到shader。默认值为false。

.morphTargets : Boolean

定义材质是否使用morphTargets。默认值为false。

.normalMap : Texture

用于创建法线贴图的纹理。RGB值会影响每个像素片段的曲面法线,并更改颜色照亮的方式。法线贴图不会改变曲面的实际形状,只会改变光照。

.normalMapType : Integer

法线贴图的类型。

选项为THREE.TangentSpaceNormalMap(默认)和THREE.ObjectSpaceNormalMap。

.normalScale : Vector2

法线贴图对材质的影响程度。典型范围是0-1。默认值是Vector2设置为(1,1)。

.refractionRatio : Float

空气的折射率(IOR)(约为1)除以材质的折射率。它与环境映射模式THREE.CubeRefractionMapping 和THREE.EquirectangularRefractionMapping一起使用。 折射率不应超过1。默认值为0.98。

.roughness : Float

材质的粗糙程度。0.0表示平滑的镜面反射,1.0表示完全漫反射。默认值为0.5。如果还提供roughnessMap,则两个值相乘。

.roughnessMap : Texture

该纹理的绿色通道用于改变材质的粗糙度。

.skinning : Boolean

材质是否使用蒙皮。默认值为false。

.wireframe : Boolean

将几何体渲染为线框。默认值为false(即渲染为平面多边形)。

.wireframeLinecap : String

定义线两端的外观。可选值为 'butt','round' 和 'square'。默认为'round'。

该属性对应2D Canvas lineJoin属性, 并且会被WebGL渲染器忽略。

.wireframeLinejoin : String

定义线连接节点的样式。可选值为 'round', 'bevel' 和 'miter'。默认值为 'round'。

该属性对应2D Canvas lineJoin属性, 并且会被WebGL渲染器忽略。

.wireframeLinewidth : Float

控制线框宽度。默认值为1。

由于OpenGL Core Profile与大多数平台上WebGL渲染器的限制,无论如何设置该值,线宽始终为1。

方法(Methods)

共有方法请参见其基类Material。

JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。 大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
支付宝
9.99
无法付款,请点击这里
金额: 0
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟