You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
330 lines
11 KiB
HTML
330 lines
11 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<base href="../../../" />
|
|
<script src="page.js"></script>
|
|
<link type="text/css" rel="stylesheet" href="page.css" />
|
|
</head>
|
|
<body>
|
|
[page:Material] →
|
|
|
|
<h1>[name]</h1>
|
|
|
|
<p class="desc">
|
|
A standard physically based material, using Metallic-Roughness
|
|
workflow.<br /><br />
|
|
|
|
Physically based rendering (PBR) has recently become the standard in many
|
|
3D applications, such as
|
|
[link:https://blogs.unity3d.com/2014/10/29/physically-based-shading-in-unity-5-a-primer/ Unity],
|
|
[link:https://docs.unrealengine.com/latest/INT/Engine/Rendering/Materials/PhysicallyBased/ Unreal] and
|
|
[link:http://area.autodesk.com/blogs/the-3ds-max-blog/what039s-new-for-rendering-in-3ds-max-2017 3D Studio Max].<br /><br />
|
|
|
|
This approach differs from older approaches in that instead of using
|
|
approximations for the way in which light interacts with a surface, a
|
|
physically correct model is used. The idea is that, instead of tweaking
|
|
materials to look good under specific lighting, a material can be created
|
|
that will react 'correctly' under all lighting scenarios.<br /><br />
|
|
|
|
In practice this gives a more accurate and realistic looking result than
|
|
the [page:MeshLambertMaterial] or [page:MeshPhongMaterial], at the cost of
|
|
being somewhat more computationally expensive. [name] uses per-fragment
|
|
shading.<br /><br />
|
|
|
|
Note that for best results you should always specify an [page:.envMap environment map]
|
|
when using this material.<br /><br />
|
|
|
|
For a non-technical introduction to the concept of PBR and how to set up a
|
|
PBR material, check out these articles by the people at
|
|
[link:https://www.marmoset.co marmoset]:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
[link:https://www.marmoset.co/posts/basic-theory-of-physically-based-rendering/ Basic Theory of Physically Based Rendering]
|
|
</li>
|
|
<li>
|
|
[link:https://www.marmoset.co/posts/physically-based-rendering-and-you-can-too/ Physically Based Rendering and You Can Too]
|
|
</li>
|
|
</ul>
|
|
<p>
|
|
Technical details of the approach used in three.js (and most other PBR
|
|
systems) can be found is this
|
|
[link:https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf paper from Disney]
|
|
(pdf), by Brent Burley.
|
|
</p>
|
|
|
|
<iframe
|
|
id="scene"
|
|
src="scenes/material-browser.html#MeshStandardMaterial"
|
|
></iframe>
|
|
|
|
<script>
|
|
|
|
// iOS iframe auto-resize workaround
|
|
|
|
if ( /(iPad|iPhone|iPod)/g.test( navigator.userAgent ) ) {
|
|
|
|
const scene = document.getElementById( 'scene' );
|
|
|
|
scene.style.width = getComputedStyle( scene ).width;
|
|
scene.style.height = getComputedStyle( scene ).height;
|
|
scene.setAttribute( 'scrolling', 'no' );
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
<h2>Constructor</h2>
|
|
|
|
<h3>[name]( [param:Object parameters] )</h3>
|
|
<p>
|
|
[page:Object parameters] - (optional) an object with one or more
|
|
properties defining the material's appearance. Any property of the
|
|
material (including any property inherited from [page:Material]) can be
|
|
passed in here.<br /><br />
|
|
|
|
The exception is the property [page:Hexadecimal color], which can be
|
|
passed in as a hexadecimal string and is `0xffffff` (white) by default.
|
|
[page:Color.set]( color ) is called internally.
|
|
</p>
|
|
|
|
<h2>Properties</h2>
|
|
<p>See the base [page:Material] class for common properties.</p>
|
|
|
|
<h3>[property:Texture alphaMap]</h3>
|
|
<p>
|
|
The alpha map is a grayscale texture that controls the opacity across the
|
|
surface (black: fully transparent; white: fully opaque). Default is
|
|
null.<br /><br />
|
|
|
|
Only the color of the texture is used, ignoring the alpha channel if one
|
|
exists. For RGB and RGBA textures, the [page:WebGLRenderer WebGL] renderer
|
|
will use the green channel when sampling this texture due to the extra bit
|
|
of precision provided for green in DXT-compressed and uncompressed RGB 565
|
|
formats. Luminance-only and luminance/alpha textures will also still work
|
|
as expected.
|
|
</p>
|
|
|
|
<h3>[property:Texture aoMap]</h3>
|
|
<p>
|
|
The red channel of this texture is used as the ambient occlusion map.
|
|
Default is null. The aoMap requires a second set of UVs.
|
|
</p>
|
|
|
|
<h3>[property:Float aoMapIntensity]</h3>
|
|
<p>
|
|
Intensity of the ambient occlusion effect. Range is 0-1, where `0`
|
|
disables ambient occlusion. Where intensity is `1` and the [page:.aoMap]
|
|
red channel is also `1`, ambient light is fully occluded on a surface.
|
|
Default is `1`.
|
|
</p>
|
|
|
|
<h3>[property:Texture bumpMap]</h3>
|
|
<p>
|
|
The texture to create a bump map. The black and white values map to the
|
|
perceived depth in relation to the lights. Bump doesn't actually affect
|
|
the geometry of the object, only the lighting. If a normal map is defined
|
|
this will be ignored.
|
|
</p>
|
|
|
|
<h3>[property:Float bumpScale]</h3>
|
|
<p>
|
|
How much the bump map affects the material. Typical ranges are 0-1.
|
|
Default is `1`.
|
|
</p>
|
|
|
|
<h3>[property:Color color]</h3>
|
|
<p>[page:Color] of the material, by default set to white (0xffffff).</p>
|
|
|
|
<h3>[property:Object defines]</h3>
|
|
<p>
|
|
An object of the form:
|
|
<code> { 'STANDARD': '' }; </code>
|
|
|
|
This is used by the [page:WebGLRenderer] for selecting shaders.
|
|
</p>
|
|
|
|
<h3>[property:Texture displacementMap]</h3>
|
|
<p>
|
|
The displacement map affects the position of the mesh's vertices. Unlike
|
|
other maps which only affect the light and shade of the material the
|
|
displaced vertices can cast shadows, block other objects, and otherwise
|
|
act as real geometry. The displacement texture is an image where the value
|
|
of each pixel (white being the highest) is mapped against, and
|
|
repositions, the vertices of the mesh.
|
|
</p>
|
|
|
|
<h3>[property:Float displacementScale]</h3>
|
|
<p>
|
|
How much the displacement map affects the mesh (where black is no
|
|
displacement, and white is maximum displacement). Without a displacement
|
|
map set, this value is not applied. Default is `1`.
|
|
</p>
|
|
|
|
<h3>[property:Float displacementBias]</h3>
|
|
<p>
|
|
The offset of the displacement map's values on the mesh's vertices.
|
|
The bias is added to the scaled sample of the displacement map.
|
|
Without a displacement map set, this value is not applied. Default is `0`.
|
|
</p>
|
|
<h3>[property:Color emissive]</h3>
|
|
<p>
|
|
Emissive (light) color of the material, essentially a solid color
|
|
unaffected by other lighting. Default is black.
|
|
</p>
|
|
|
|
<h3>[property:Texture emissiveMap]</h3>
|
|
<p>
|
|
Set emissive (glow) map. Default is null. The emissive map color is
|
|
modulated by the emissive color and the emissive intensity. If you have an
|
|
emissive map, be sure to set the emissive color to something other than
|
|
black.
|
|
</p>
|
|
|
|
<h3>[property:Float emissiveIntensity]</h3>
|
|
<p>
|
|
Intensity of the emissive light. Modulates the emissive color. Default is
|
|
1.
|
|
</p>
|
|
|
|
<h3>[property:Texture envMap]</h3>
|
|
<p>
|
|
The environment map. To ensure a physically correct rendering, you should
|
|
only add environment maps which were preprocessed by
|
|
[page:PMREMGenerator]. Default is null.
|
|
</p>
|
|
|
|
<h3>[property:Euler envMapRotation]</h3>
|
|
<p>
|
|
The rotation of the environment map in radians. Default is `(0,0,0)`.
|
|
</p>
|
|
|
|
<h3>[property:Float envMapIntensity]</h3>
|
|
<p>Scales the effect of the environment map by multiplying its color.</p>
|
|
|
|
<h3>[property:Boolean flatShading]</h3>
|
|
<p>
|
|
Define whether the material is rendered with flat shading. Default is
|
|
false.
|
|
</p>
|
|
|
|
<h3>[property:Boolean fog]</h3>
|
|
<p>Whether the material is affected by fog. Default is `true`.</p>
|
|
|
|
<h3>[property:Boolean isMeshStandardMaterial]</h3>
|
|
<p>Read-only flag to check if a given object is of type [name].</p>
|
|
|
|
<h3>[property:Texture lightMap]</h3>
|
|
<p>
|
|
The light map. Default is null. The lightMap requires a second set of UVs.
|
|
</p>
|
|
|
|
<h3>[property:Float lightMapIntensity]</h3>
|
|
<p>Intensity of the baked light. Default is `1`.</p>
|
|
|
|
<h3>[property:Texture map]</h3>
|
|
<p>
|
|
The color map. May optionally include an alpha channel, typically combined
|
|
with [page:Material.transparent .transparent] or [page:Material.alphaTest .alphaTest].
|
|
Default is null. The texture map color is modulated by the diffuse [page:.color].
|
|
</p>
|
|
|
|
<h3>[property:Float metalness]</h3>
|
|
<p>
|
|
How much the material is like a metal. Non-metallic materials such as wood
|
|
or stone use `0.0`, metallic use `1.0`, with nothing (usually) in between.
|
|
Default is `0.0`. A value between `0.0` and `1.0` could be used for a rusty
|
|
metal look. If metalnessMap is also provided, both values are multiplied.
|
|
</p>
|
|
|
|
<h3>[property:Texture metalnessMap]</h3>
|
|
<p>
|
|
The blue channel of this texture is used to alter the metalness of the
|
|
material.
|
|
</p>
|
|
|
|
<h3>[property:Texture normalMap]</h3>
|
|
<p>
|
|
The texture to create a normal map. The RGB values affect the surface
|
|
normal for each pixel fragment and change the way the color is lit. Normal
|
|
maps do not change the actual shape of the surface, only the lighting. In
|
|
case the material has a normal map authored using the left handed
|
|
convention, the y component of normalScale should be negated to compensate
|
|
for the different handedness.
|
|
</p>
|
|
|
|
<h3>[property:Integer normalMapType]</h3>
|
|
<p>
|
|
The type of normal map.<br /><br />
|
|
|
|
Options are [page:constant THREE.TangentSpaceNormalMap] (default), and
|
|
[page:constant THREE.ObjectSpaceNormalMap].
|
|
</p>
|
|
|
|
<h3>[property:Vector2 normalScale]</h3>
|
|
<p>
|
|
How much the normal map affects the material. Typical ranges are 0-1.
|
|
Default is a [page:Vector2] set to (1,1).
|
|
</p>
|
|
|
|
<h3>[property:Float roughness]</h3>
|
|
<p>
|
|
How rough the material appears. `0.0` means a smooth mirror reflection, `1.0`
|
|
means fully diffuse. Default is `1.0`. If roughnessMap is also provided,
|
|
both values are multiplied.
|
|
</p>
|
|
|
|
<h3>[property:Texture roughnessMap]</h3>
|
|
<p>
|
|
The green channel of this texture is used to alter the roughness of the
|
|
material.
|
|
</p>
|
|
|
|
<h3>[property:Boolean wireframe]</h3>
|
|
<p>
|
|
Render geometry as wireframe. Default is `false` (i.e. render as flat
|
|
polygons).
|
|
</p>
|
|
|
|
<h3>[property:String wireframeLinecap]</h3>
|
|
<p>
|
|
Define appearance of line ends. Possible values are "butt", "round" and
|
|
"square". Default is 'round'.<br /><br />
|
|
|
|
This corresponds to the
|
|
[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap 2D Canvas lineCap]
|
|
property and it is ignored by the [page:WebGLRenderer WebGL] renderer.
|
|
</p>
|
|
|
|
<h3>[property:String wireframeLinejoin]</h3>
|
|
<p>
|
|
Define appearance of line joints. Possible values are "round", "bevel" and
|
|
"miter". Default is 'round'.<br /><br />
|
|
|
|
This corresponds to the
|
|
[link:https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineJoin 2D Canvas lineJoin]
|
|
property and it is ignored by the [page:WebGLRenderer WebGL] renderer.
|
|
</p>
|
|
|
|
<h3>[property:Float wireframeLinewidth]</h3>
|
|
<p>
|
|
Controls wireframe thickness. Default is `1`.<br /><br />
|
|
|
|
Due to limitations of the
|
|
[link:https://www.khronos.org/registry/OpenGL/specs/gl/glspec46.core.pdf OpenGL Core Profile]
|
|
with the [page:WebGLRenderer WebGL] renderer on most
|
|
platforms linewidth will always be `1` regardless of the set value.
|
|
</p>
|
|
|
|
<h2>Methods</h2>
|
|
<p>See the base [page:Material] class for common methods.</p>
|
|
|
|
<h2>Source</h2>
|
|
|
|
<p>
|
|
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
|
|
</p>
|
|
</body>
|
|
</html>
|