MeshStandardMaterial.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="list.js"></script>
  7. <script src="page.js"></script>
  8. <link type="text/css" rel="stylesheet" href="page.css" />
  9. </head>
  10. <body>
  11. [page:Material] &rarr;
  12. <h1>标准网格材质([name])</h1>
  13. <p class="desc"> 一种基于物理的标准材质,使用Metallic-Roughness工作流程。<br /><br />
  14. 基于物理的渲染(PBR)最近已成为许多3D应用程序的标准,例如[link:https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/ Unity],
  15. [link:https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/ Unreal]和
  16. [link:http://area.autodesk.com/blogs/the-3ds-max-blog/what039s-new-for-rendering-in-3ds-max-2017 3D Studio Max]。<br /><br />
  17. 这种方法与旧方法的不同之处在于,不使用近似值来表示光与表面的相互作用,而是使用物理上正确的模型。
  18. 我们的想法是,不是在特定照明下调整材质以使其看起来很好,而是可以创建一种材质,能够“正确”地应对所有光照场景。<br /><br />
  19. 在实践中,该材质提供了比[page:MeshLambertMaterial] 或[page:MeshPhongMaterial] 更精确和逼真的结果,代价是计算成本更高。<br /><br />
  20. 计算着色的方式与[page:MeshPhongMaterial]相同,都使用[link:https://en.wikipedia.org/wiki/Phong_shading Phong]着色模型,
  21. 这会计算每个像素的阴影(即在[link:https://en.wikipedia.org/wiki/Shader#Pixel_shaders fragment shader],
  22. AKA pixel shader中), 与[page:MeshLambertMaterial]使用的Gouraud模型相比,该模型的结果更准确,但代价是牺牲一些性能。<br /><br />
  23. 请注意,为获得最佳效果,您在使用此材质时应始终指定[page:.envMap environment map]。<br /><br />
  24. 有关PBR概念的非技术性介绍以及如何设置PBR材质,请查看[link:https://www.marmoset.co marmoset]成员的这些文章:
  25. <ul>
  26. <li>
  27. [link:https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/ Basic Theory of Physically Based Rendering]
  28. </li>
  29. <li>
  30. [link:https://www.marmoset.co/posts/physically-based-rendering-and-you-can-too/ Physically Based Rendering and You Can Too]
  31. </li>
  32. </ul>
  33. </p>
  34. <p>在 three.js(以及其他大多数PBR系统)中使用方法的技术细节,
  35. 可以在Brent Burley撰写的[link:https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf paper from Disney] (pdf)
  36. 中查看。
  37. </p>
  38. <iframe id="scene" src="scenes/material-browser.html#MeshStandardMaterial"></iframe>
  39. <script>
  40. // iOS iframe auto-resize workaround
  41. if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
  42. var scene = document.getElementById( 'scene' );
  43. scene.style.width = getComputedStyle( scene ).width;
  44. scene.style.height = getComputedStyle( scene ).height;
  45. scene.setAttribute( 'scrolling', 'no' );
  46. }
  47. </script>
  48. <h2>构造函数(Constructor)</h2>
  49. <h3>[name]( [param:Object parameters] )</h3>
  50. <p> [page:Object parameters] - (可选)用于定义材质外观的对象,具有一个或多个属性。
  51. 材质的任何属性都可以从此处传入(包括从[page:Material]继承的任何属性)。<br /><br />
  52. 属性[page:Hexadecimal color]例外,其可以作为十六进制字符串传递,默认情况下为 *0xffffff*(白色),内部调用[page:Color.set](color)。
  53. </p>
  54. <h2>属性(Properties)</h2>
  55. <p>常用属性请参见基类[page:Material]。</p>
  56. <h3>[property:Texture alphaMap]</h3>
  57. <p>alpha贴图是一种灰度纹理,用于控制整个表面的不透明度(黑色:完全透明;白色:完全不透明)。默认值为null。<br /><br />
  58. 仅使用纹理的颜色,忽略alpha通道(如果存在)。对于RGB和RGBA纹理,[page:WebGLRenderer WebGL]渲染器在采样此纹理时将使用绿色通道,
  59. 因为在DXT压缩和未压缩RGB 565格式中为绿色提供了额外的精度。Luminance-only以及luminance/alpha纹理也仍然有效。
  60. </p>
  61. <h3>[property:Texture aoMap]</h3>
  62. <p>该纹理的红色通道用作环境遮挡贴图。默认值为null。aoMap需要第二组UVs,因此将忽略[page:Texture repeat]和[page:Texture offset]属性。</p>
  63. <h3>[property:Float aoMapIntensity]</h3>
  64. <p>环境遮挡效果的强度。默认值为1。零是不遮挡效果。</p>
  65. <h3>[property:Texture bumpMap]</h3>
  66. <p> 用于创建凹凸贴图的纹理。黑色和白色值映射到与光照相关的感知深度。凹凸实际上不会影响对象的几何形状,只影响光照。如果定义了法线贴图,则将忽略该贴图。
  67. </p>
  68. <h3>[property:Float bumpScale]</h3>
  69. <p>凹凸贴图会对材质产生多大影响。典型范围是0-1。默认值为1。</p>
  70. <h3>[property:Color color]</h3>
  71. <p>材质的颜色([page:Color]),默认值为白色 (0xffffff)。</p>
  72. <h3>[property:Object defines]</h3>
  73. <p>如下形式的对象:
  74. <code>
  75. { 'STANDARD': '' };
  76. </code>
  77. [page:WebGLRenderer]使用它来选择shaders。
  78. </p>
  79. <h3>[property:Texture displacementMap]</h3>
  80. <p> 位移贴图会影响网格顶点的位置,与仅影响材质的光照和阴影的其他贴图不同,移位的顶点可以投射阴影,阻挡其他对象,
  81. 以及充当真实的几何体。位移纹理是指:网格的所有顶点被映射为图像中每个像素的值(白色是最高的),并且被重定位。
  82. </p>
  83. <h3>[property:Float displacementScale]</h3>
  84. <p>
  85. 位移贴图对网格的影响程度(黑色是无位移,白色是最大位移)。如果没有设置位移贴图,则不会应用此值。默认值为1。
  86. </p>
  87. <h3>[property:Float displacementBias]</h3>
  88. <p>
  89. 位移贴图在网格顶点上的偏移量。如果没有设置位移贴图,则不会应用此值。默认值为0。
  90. </p>
  91. <h3>[property:Color emissive]</h3>
  92. <p>材质的放射(光)颜色,基本上是不受其他光照影响的固有颜色。默认为黑色。
  93. </p>
  94. <h3>[property:Texture emissiveMap]</h3>
  95. <p>设置放射(发光)贴图。默认值为null。放射贴图颜色由放射颜色和强度所调节。
  96. 如果你有一个放射贴图,请务必将放射颜色设置为黑色以外的其他颜色。
  97. </p>
  98. <h3>[property:Float emissiveIntensity]</h3>
  99. <p>放射光强度。调节发光颜色。默认为1。</p>
  100. <h3>[property:TextureCube envMap]</h3>
  101. <p> 环境贴图。默认值为null。
  102. 请注意,为了使材质粗糙度属性能够正确地模糊环境贴图,shader必须能够访问环境纹理的mipmaps。
  103. 使用默认设置创建的TextureCubes已正确配置; 如果手动调整纹理参数,
  104. 请确保将minFilter设置为其中一个MipMap选项,并且未强制禁用mip贴图。</p>
  105. <p>
  106. 注意:MeshStandardMaterial 仅支持[link:https://threejs.org/docs/#api/textures/CubeTexture cube environment maps]。
  107. 如果要使用equirectangular贴图,则需要使用 [link:https://github.com/mrdoob/three.js/blob/dev/examples/js/loaders/EquirectangularToCubeGenerator.js EquirectangularToCubeGenerator]。
  108. 详细信息请参阅此示例[link:https://threejs.org/examples/webgl_materials_envmaps_exr.html example]。
  109. </p>
  110. <h3>[property:Float envMapIntensity]</h3>
  111. <p> 通过乘以环境贴图的颜色来缩放环境贴图的效果。</p>
  112. <h3>[property:Boolean isMeshStandardMaterial]</h3>
  113. <p> 用于检查此类或派生类是否为标准网格材质。默认值为 *true*。<br /><br />
  114. 因为其通常用在内部优化,所以不应该更改该属性值。
  115. </p>
  116. <h3>[property:Texture lightMap]</h3>
  117. <p>光照贴图。默认值为null。lightMap需要第二组UVs,因此将忽略[page:Texture repeat]和[page:Texture offset]纹理属性。</p>
  118. <h3>[property:Float lightMapIntensity]</h3>
  119. <p>烘焙光的强度。默认值为1。</p>
  120. <h3>[property:Texture map]</h3>
  121. <p>颜色贴图。默认为null。纹理贴图颜色由漫反射颜色[page:.color]调节。</p>
  122. <h3>[property:Float metalness]</h3>
  123. <p> 材质与金属的相似度。非金属材质,如木材或石材,使用0.0,金属使用1.0,通常没有中间值。
  124. 默认值为0.5。0.0到1.0之间的值可用于生锈金属的外观。如果还提供了metalnessMap,则两个值相乘。
  125. </p>
  126. <h3>[property:Texture metalnessMap]</h3>
  127. <p> 该纹理的蓝色通道用于改变材质的金属度。</p>
  128. <h3>[property:boolean morphNormals]</h3>
  129. <p> 定义是否使用morphNormals。设置为true可将morphNormal属性从[page:Geometry]传递到shader。默认值为*false*。
  130. </p>
  131. <h3>[property:Boolean morphTargets]</h3>
  132. <p>定义材质是否使用morphTargets。默认值为false。</p>
  133. <h3>[property:Texture normalMap]</h3>
  134. <p>用于创建法线贴图的纹理。RGB值会影响每个像素片段的曲面法线,并更改颜色照亮的方式。法线贴图不会改变曲面的实际形状,只会改变光照。
  135. </p>
  136. <h3>[property:Integer normalMapType]</h3>
  137. <p>法线贴图的类型。<br /><br />
  138. 选项为[page:constant THREE.TangentSpaceNormalMap](默认)和[page:constant THREE.ObjectSpaceNormalMap]。
  139. </p>
  140. <h3>[property:Vector2 normalScale]</h3>
  141. <p> 法线贴图对材质的影响程度。典型范围是0-1。默认值是[page:Vector2]设置为(1,1)。
  142. </p>
  143. <h3>[property:Float refractionRatio]</h3>
  144. <p> 空气的折射率(IOR)(约为1)除以材质的折射率。它与环境映射模式[page:Textures THREE.CubeRefractionMapping]
  145. 和[page:Textures THREE.EquirectangularRefractionMapping]一起使用。
  146. 折射率不应超过1。默认值为*0.98*。
  147. </p>
  148. <h3>[property:Float roughness]</h3>
  149. <p> 材质的粗糙程度。0.0表示平滑的镜面反射,1.0表示完全漫反射。默认值为0.5。如果还提供roughnessMap,则两个值相乘。
  150. </p>
  151. <h3>[property:Texture roughnessMap]</h3>
  152. <p>该纹理的绿色通道用于改变材质的粗糙度。</p>
  153. <h3>[property:Boolean skinning]</h3>
  154. <p>材质是否使用蒙皮。默认值为false。</p>
  155. <h3>[property:Boolean wireframe]</h3>
  156. <p>将几何体渲染为线框。默认值为*false*(即渲染为平面多边形)。</p>
  157. <h3>[property:String wireframeLinecap]</h3>
  158. <p> 定义线两端的外观。可选值为 'butt','round' 和 'square'。默认为'round'。<br /><br />
  159. 该属性对应[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineJoin 2D Canvas lineJoin]属性,
  160. 并且会被[page:WebGLRenderer WebGL]渲染器忽略。
  161. </p>
  162. <h3>[property:String wireframeLinejoin]</h3>
  163. <p>
  164. 定义线连接节点的样式。可选值为 'round', 'bevel' 和 'miter'。默认值为 'round'。<br /><br />
  165. 该属性对应[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineJoin 2D Canvas lineJoin]属性,
  166. 并且会被[page:WebGLRenderer WebGL]渲染器忽略。
  167. </p>
  168. <h3>[property:Float wireframeLinewidth]</h3>
  169. <p>控制线框宽度。默认值为1。<br /><br />
  170. 由于[link:https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf OpenGL Core Profile]与大多数平台上[page:WebGLRenderer WebGL]渲染器的限制,无论如何设置该值,线宽始终为1。
  171. </p>
  172. <h2>方法(Methods)</h2>
  173. <p>常用方法请参见基类[page:Material]。</p>
  174. <h2>源码(Source)</h2>
  175. [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
  176. </body>
  177. </html>