import {PhongMaterial} from '@xeokit/xeokit-sdk/src/viewer/scene/materials/PhongMaterial.js'
PhongMaterial
Configures the normal rendered appearance of Meshes using the non-physically-correct Blinn-Phong shading model.
- Useful for non-realistic objects like gizmos.
- SpecularMaterial is best for insulators, such as wood, ceramics and plastic.
- MetallicMaterial is best for conductive materials, such as metal.
- LambertMaterial is appropriate for high-detail models that need to render as efficiently as possible.
Usage
In the example below, we'll create a Mesh with a PhongMaterial with a diffuse Texture and a specular Fresnel, using a buildTorusGeometry to create the Geometry.
import {Viewer, Mesh, buildTorusGeometry,
ReadableGeometry, PhongMaterial, Texture, Fresnel} from "xeokit-sdk.es.js";
const viewer = new Viewer({
canvasId: "myCanvas"
});
viewer.scene.camera.eye = [0, 0, 5];
viewer.scene.camera.look = [0, 0, 0];
viewer.scene.camera.up = [0, 1, 0];
new Mesh(viewer.scene, {
geometry: new ReadableGeometry(viewer.scene, buildTorusGeometry({
center: [0, 0, 0],
radius: 1.5,
tube: 0.5,
radialSegments: 32,
tubeSegments: 24,
arc: Math.PI * 2.0
}),
material: new PhongMaterial(viewer.scene, {
ambient: [0.9, 0.3, 0.9],
shininess: 30,
diffuseMap: new Texture(viewer.scene, {
src: "textures/diffuse/uvGrid2.jpg"
}),
specularFresnel: new Fresnel(viewer.scene, {
leftColor: [1.0, 1.0, 1.0],
rightColor: [0.0, 0.0, 0.0],
power: 4
})
})
});
PhongMaterial Properties
The following table summarizes PhongMaterial properties:
Property | Type | Range | Default Value | Space | Description |
---|---|---|---|---|---|
PhongMaterial#ambient | Array | [0, 1] for all components | [1,1,1,1] | linear | The RGB components of the ambient light reflected by the material. |
PhongMaterial#diffuse | Array | [0, 1] for all components | [1,1,1,1] | linear | The RGB components of the diffuse light reflected by the material. |
PhongMaterial#specular | Array | [0, 1] for all components | [1,1,1,1] | linear | The RGB components of the specular light reflected by the material. |
PhongMaterial#emissive | Array | [0, 1] for all components | [0,0,0] | linear | The RGB components of the light emitted by the material. |
PhongMaterial#alpha | Number | [0, 1] | 1 | linear | The transparency of the material surface (0 fully transparent, 1 fully opaque). |
PhongMaterial#shininess | Number | [0, 128] | 80 | linear | Determines the size and sharpness of specular highlights. |
PhongMaterial#reflectivity | Number | [0, 1] | 1 | linear | Determines the amount of reflectivity. |
PhongMaterial#diffuseMap | Texture | null | sRGB | Texture RGB components multiplying by PhongMaterial#diffuse. If the fourth component (A) is present, it multiplies by PhongMaterial#alpha. | |
PhongMaterial#specularMap | Texture | null | sRGB | Texture RGB components multiplying by PhongMaterial#specular. If the fourth component (A) is present, it multiplies by PhongMaterial#alpha. | |
PhongMaterial#emissiveMap | Texture | null | linear | Texture with RGB components multiplying by PhongMaterial#emissive. | |
PhongMaterial#alphaMap | Texture | null | linear | Texture with first component multiplying by PhongMaterial#alpha. | |
PhongMaterial#occlusionMap | Texture | null | linear | Ambient occlusion texture multiplying by PhongMaterial#ambient, PhongMaterial#diffuse and PhongMaterial#specular. | |
PhongMaterial#normalMap | Texture | null | linear | Tangent-space normal map. | |
PhongMaterial#diffuseFresnel | Fresnel | null | Fresnel term applied to PhongMaterial#diffuse. | ||
PhongMaterial#specularFresnel | Fresnel | null | Fresnel term applied to PhongMaterial#specular. | ||
PhongMaterial#emissiveFresnel | Fresnel | null | Fresnel term applied to PhongMaterial#emissive. | ||
PhongMaterial#reflectivityFresnel | Fresnel | null | Fresnel term applied to PhongMaterial#reflectivity. | ||
PhongMaterial#alphaFresnel | Fresnel | null | Fresnel term applied to PhongMaterial#alpha. | ||
PhongMaterial#lineWidth | Number | [0..100] | 1 | Line width in pixels. | |
PhongMaterial#pointSize | Number | [0..100] | 1 | Point size in pixels. | |
PhongMaterial#alphaMode | String | "opaque", "blend", "mask" | "blend" | Alpha blend mode. | |
PhongMaterial#alphaCutoff | Number | [0..1] | 0.5 | Alpha cutoff value. | |
PhongMaterial#backfaces | Boolean | false | Whether to render geometry backfaces. | ||
PhongMaterial#frontface | String | "ccw", "cw" | "ccw" | The winding order for geometry frontfaces - "cw" for clockwise, or "ccw" for counter-clockwise. |
Constructor Summary
Public Constructor | ||
public |
constructor(owner: Component, cfg: *) |
Member Summary
Public Members | ||
public set |
Sets the PhongMaterial alpha. |
|
public get |
Gets the PhongMaterial alpha. |
|
public set |
Sets the PhongMaterial's alpha cutoff value. This specifies the cutoff threshold when PhongMaterial#alphaMode equals "mask". If the alpha is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent. A value greater than 1.0 will render the entire material as fully transparent. This value is ignored for other modes. Alpha is the combined result of PhongMaterial#alpha and PhongMaterial#alphaMap. Default value is |
|
public get |
Gets the PhongMaterial's alpha cutoff value. |
|
public get |
Gets the PhongMaterials's alpha Fresnel. Applies to PhongMaterial#alpha. |
|
public get |
Gets the PhongMaterials's alpha Texture. Multiplies by PhongMaterial#alpha. |
|
public set |
Sets the PhongMaterial's alpha rendering mode. This governs how alpha is treated. Alpha is the combined result of PhongMaterial#alpha and PhongMaterial#alphaMap. Supported values are:
|
|
public get |
Gets the PhongMaterial's alpha rendering mode. |
|
public set |
Sets the PhongMaterial's ambient color. Default value is |
|
public get |
Gets the PhongMaterial's ambient color. Default value is |
|
public get |
Gets the PhongMaterials's ambient Texture. Multiplies by PhongMaterial#ambient. |
|
public set |
Sets whether backfaces are visible on attached Meshes. |
|
public get |
Gets whether backfaces are visible on attached Meshes. |
|
public set |
Sets the PhongMaterial's diffuse color. Multiplies by PhongMaterial#diffuseMap. Default value is |
|
public get |
Sets the PhongMaterial's diffuse color. Multiplies by PhongMaterial#diffuseMap. Default value is |
|
public get |
Gets the PhongMaterials's diffuse Fresnel. Applies to PhongMaterial#diffuse. |
|
public get |
Gets the PhongMaterials's diffuse Texture. Multiplies by PhongMaterial#diffuse. |
|
public set |
Sets the PhongMaterial's emissive color. Multiplies by PhongMaterial#emissiveMap. Default value is |
|
public get |
Gets the PhongMaterial's emissive color. Multiplies by PhongMaterial#emissiveMap. Default value is |
|
public get |
Gets the PhongMaterials's emissive Fresnel. Applies to PhongMaterial#emissive. |
|
public get |
Gets the PhongMaterials's emissive Texture. Multiplies by PhongMaterial#emissive. |
|
public set |
Sets the winding direction of geometry front faces. |
|
public get |
Gets the winding direction of front faces on attached Meshes. |
|
public set |
Sets the PhongMaterial's line width. This is not supported by WebGL implementations based on DirectX [2019]. Default value is |
|
public get |
Gets the PhongMaterial's line width. This is not supported by WebGL implementations based on DirectX [2019]. Default value is |
|
public get |
Gets the PhongMaterials's normal map Texture. |
|
public get |
Gets the PhongMaterials's ambient occlusion Texture. |
|
public set |
Sets the PhongMaterial's point size. Default value is 1.0. |
|
public get |
Gets the PhongMaterial's point size. Default value is 1.0. |
|
public set |
Sets how much ReflectionMap is reflected by this PhongMaterial. |
|
public get |
Gets how much ReflectionMap is reflected by this PhongMaterial. |
|
public get |
Gets the PhongMaterials's reflectivity Fresnel. Applies to PhongMaterial#reflectivity. |
|
public get |
Gets the PhongMaterials's reflectivity Texture. Multiplies by PhongMaterial#reflectivity. |
|
public set |
Sets the PhongMaterial shininess. |
|
public get |
Gets the PhongMaterial shininess. |
|
public set |
Sets the PhongMaterial's specular color. Multiplies by PhongMaterial#specularMap.
Default value is |
|
public get |
Gets the PhongMaterial's specular color. Multiplies by PhongMaterial#specularMap.
Default value is |
|
public get |
Gets the PhongMaterials's specular Fresnel. Applies to PhongMaterial#specular. |
|
public get |
Gets the PhongMaterials's specular Texture. Multiplies by PhongMaterial#specular. |
Method Summary
Public Methods | ||
public |
destroy() Destroys this PhongMaterial. |
Inherited Summary
From class Component | ||
public get |
The Component that owns the lifecycle of this Component, if any. |
|
public |
True as soon as this Component has been destroyed |
|
public |
ID of this Component, unique within the Scene. |
|
public |
meta: * Arbitrary, user-defined metadata on this component. |
|
public |
The parent Scene that contains this Component. |
|
public |
The viewer that contains this Scene. |
|
public |
clear() Destroys all Components that are owned by this. |
|
public |
destroy() Destroys this component. |
|
public |
Logs an error for this component to the JavaScript console. |
|
public |
Fires an event on this component. |
|
public |
Returns true if there are any subscribers to the given event on this component. |
|
public |
Tests if this component is of the given type, or is a subclass of the given type. |
|
public |
Logs a console debugging message for this component. |
|
public |
Cancels an event subscription that was previously made with Component#on or Component#once. |
|
public |
Subscribes to an event on this component. |
|
public |
Subscribes to the next occurrence of the given event, then un-subscribes as soon as the event is subIdd. |
|
public |
scheduleTask(task: *) Schedule a task to perform on the next browser interval |
|
public |
Logs a warning for this component to the JavaScript console. |
From class Material | ||
public |
destroy() |
Public Constructors
public constructor(owner: Component, cfg: *) source
Override:
Material#constructorParams:
Name | Type | Attribute | Description |
owner | Component | Owner component. When destroyed, the owner will destroy this component as well. |
|
cfg | * |
|
The PhongMaterial configuration |
cfg.id | String |
|
Optional ID, unique among all components in the parent Scene, generated automatically when omitted. |
cfg.ambient | Number[] |
|
PhongMaterial ambient color. |
cfg.diffuse | Number[] |
|
PhongMaterial diffuse color. |
cfg.specular | Number[] |
|
PhongMaterial specular color. |
cfg.emissive | Number[] |
|
PhongMaterial emissive color. |
cfg.alpha | Number |
|
Scalar in range 0-1 that controls alpha, where 0 is completely transparent and 1 is completely opaque. |
cfg.shininess | Number |
|
Scalar in range 0-128 that determines the size and sharpness of specular highlights. |
cfg.reflectivity | Number |
|
Scalar in range 0-1 that controls how much ReflectionMap is reflected. |
cfg.lineWidth | Number |
|
Scalar that controls the width of lines. |
cfg.pointSize | Number |
|
Scalar that controls the size of points. |
cfg.ambientMap | Texture |
|
A ambient map Texture, which will multiply by the diffuse property. Must be within the same Scene as this PhongMaterial. |
cfg.diffuseMap | Texture |
|
A diffuse map Texture, which will override the effect of the diffuse property. Must be within the same Scene as this PhongMaterial. |
cfg.specularMap | Texture |
|
A specular map Texture, which will override the effect of the specular property. Must be within the same Scene as this PhongMaterial. |
cfg.emissiveMap | Texture |
|
An emissive map Texture, which will override the effect of the emissive property. Must be within the same Scene as this PhongMaterial. |
cfg.normalMap | Texture |
|
A normal map Texture. Must be within the same Scene as this PhongMaterial. |
cfg.alphaMap | Texture |
|
An alpha map Texture, which will override the effect of the alpha property. Must be within the same Scene as this PhongMaterial. |
cfg.reflectivityMap | Texture |
|
A reflectivity control map Texture, which will override the effect of the reflectivity property. Must be within the same Scene as this PhongMaterial. |
cfg.occlusionMap | Texture |
|
An occlusion map Texture. Must be within the same Scene as this PhongMaterial. |
cfg.diffuseFresnel | Fresnel |
|
A diffuse {@link Fresnel"}}Fresnel{{/crossLink}}. Must be within the same Scene as this PhongMaterial. |
cfg.specularFresnel | Fresnel |
|
A specular {@link Fresnel"}}Fresnel{{/crossLink}}. Must be within the same Scene as this PhongMaterial. |
cfg.emissiveFresnel | Fresnel |
|
An emissive {@link Fresnel"}}Fresnel{{/crossLink}}. Must be within the same Scene as this PhongMaterial. |
cfg.alphaFresnel | Fresnel |
|
An alpha {@link Fresnel"}}Fresnel{{/crossLink}}. Must be within the same Scene as this PhongMaterial. |
cfg.reflectivityFresnel | Fresnel |
|
A reflectivity {@link Fresnel"}}Fresnel{{/crossLink}}. Must be within the same Scene as this PhongMaterial. |
cfg.alphaMode | String |
|
The alpha blend mode - accepted values are "opaque", "blend" and "mask". See the PhongMaterial#alphaMode property for more info. |
cfg.alphaCutoff | Number |
|
The alpha cutoff value. See the PhongMaterial#alphaCutoff property for more info. |
cfg.backfaces | Boolean |
|
Whether to render geometry backfaces. |
cfg.frontface | Boolean |
|
The winding order for geometry front faces - "cw" for clockwise, or "ccw" for counter-clockwise. |
Public Members
public set alpha: Number source
Sets the PhongMaterial alpha.
This is a factor in the range [0..1] indicating how transparent the PhongMaterial is.
A value of 0.0 indicates fully transparent, 1.0 is fully opaque.
Multiplies by PhongMaterial#alphaMap.
Default value is 1.0
.
public get alpha: Number source
Gets the PhongMaterial alpha.
This is a factor in the range [0..1] indicating how transparent the PhongMaterial is.
A value of 0.0 indicates fully transparent, 1.0 is fully opaque.
Multiplies by PhongMaterial#alphaMap.
Default value is 1.0
.
public set alphaCutoff: Number source
Sets the PhongMaterial's alpha cutoff value.
This specifies the cutoff threshold when PhongMaterial#alphaMode equals "mask". If the alpha is greater than or equal to this value then it is rendered as fully opaque, otherwise, it is rendered as fully transparent. A value greater than 1.0 will render the entire material as fully transparent. This value is ignored for other modes.
Alpha is the combined result of PhongMaterial#alpha and PhongMaterial#alphaMap.
Default value is 0.5
.
public get alphaFresnel: Fresnel source
Gets the PhongMaterials's alpha Fresnel.
Applies to PhongMaterial#alpha.
public get alphaMap: Texture source
Gets the PhongMaterials's alpha Texture.
Multiplies by PhongMaterial#alpha.
public set alphaMode: String source
Sets the PhongMaterial's alpha rendering mode.
This governs how alpha is treated. Alpha is the combined result of PhongMaterial#alpha and PhongMaterial#alphaMap.
Supported values are:
- "opaque" - The alpha value is ignored and the rendered output is fully opaque (default).
- "mask" - The rendered output is either fully opaque or fully transparent depending on the alpha value and the specified alpha cutoff value.
- "blend" - The alpha value is used to composite the source and destination areas. The rendered output is combined with the background using the normal painting operation (i.e. the Porter and Duff over operator).
public set ambient: Number[] source
Sets the PhongMaterial's ambient color.
Default value is [0.3, 0.3, 0.3]
.
public get ambient: Number[] source
Gets the PhongMaterial's ambient color.
Default value is [0.3, 0.3, 0.3]
.
public get ambientMap: Texture source
Gets the PhongMaterials's ambient Texture.
Multiplies by PhongMaterial#ambient.
public set backfaces: Boolean source
Sets whether backfaces are visible on attached Meshes.
The backfaces will belong to Geometry compoents that are also attached to the Meshes.
Default is false
.
public get backfaces: Boolean source
Gets whether backfaces are visible on attached Meshes.
Default is false
.
public set diffuse: Number[] source
Sets the PhongMaterial's diffuse color.
Multiplies by PhongMaterial#diffuseMap.
Default value is [1.0, 1.0, 1.0]
.
public get diffuse: Number[] source
Sets the PhongMaterial's diffuse color.
Multiplies by PhongMaterial#diffuseMap.
Default value is [1.0, 1.0, 1.0]
.
public get diffuseFresnel: Fresnel source
Gets the PhongMaterials's diffuse Fresnel.
Applies to PhongMaterial#diffuse.
public get diffuseMap: Texture source
Gets the PhongMaterials's diffuse Texture.
Multiplies by PhongMaterial#diffuse.
public set emissive: Number[] source
Sets the PhongMaterial's emissive color.
Multiplies by PhongMaterial#emissiveMap.
Default value is [0.0, 0.0, 0.0]
.
public get emissive: Number[] source
Gets the PhongMaterial's emissive color.
Multiplies by PhongMaterial#emissiveMap.
Default value is [0.0, 0.0, 0.0]
.
public get emissiveFresnel: Fresnel source
Gets the PhongMaterials's emissive Fresnel.
Applies to PhongMaterial#emissive.
public get emissiveMap: Texture source
Gets the PhongMaterials's emissive Texture.
Multiplies by PhongMaterial#emissive.
public set frontface: String source
Sets the winding direction of geometry front faces.
Default is "ccw"
.
public get frontface: String source
Gets the winding direction of front faces on attached Meshes.
Default is "ccw"
.
public set lineWidth: Number source
Sets the PhongMaterial's line width.
This is not supported by WebGL implementations based on DirectX [2019].
Default value is 1.0
.
public get lineWidth: Number source
Gets the PhongMaterial's line width.
This is not supported by WebGL implementations based on DirectX [2019].
Default value is 1.0
.
public set reflectivity: Number source
Sets how much ReflectionMap is reflected by this PhongMaterial.
This is a scalar in range [0-1]
. Default value is 1.0
.
The surface will be non-reflective when this is 0
, and completely mirror-like when it is 1.0
.
Multiplies by PhongMaterial#reflectivityMap.
public get reflectivity: Number source
Gets how much ReflectionMap is reflected by this PhongMaterial.
This is a scalar in range [0-1]
. Default value is 1.0
.
The surface will be non-reflective when this is 0
, and completely mirror-like when it is 1.0
.
Multiplies by PhongMaterial#reflectivityMap.
public get reflectivityFresnel: Fresnel source
Gets the PhongMaterials's reflectivity Fresnel.
Applies to PhongMaterial#reflectivity.
public get reflectivityMap: Texture source
Gets the PhongMaterials's reflectivity Texture.
Multiplies by PhongMaterial#reflectivity.
public set shininess: Number source
Sets the PhongMaterial shininess.
This is a factor in range [0..128] that determines the size and sharpness of the specular highlights create by this PhongMaterial.
Larger values produce smaller, sharper highlights. A value of 0.0 gives very large highlights that are almost never desirable. Try values close to 10 for a larger, fuzzier highlight and values of 100 or more for a small, sharp highlight.
Default value is 80.0
.
public get shininess: Number source
Gets the PhongMaterial shininess.
This is a factor in range [0..128] that determines the size and sharpness of the specular highlights create by this PhongMaterial.
Larger values produce smaller, sharper highlights. A value of 0.0 gives very large highlights that are almost never desirable. Try values close to 10 for a larger, fuzzier highlight and values of 100 or more for a small, sharp highlight.
Default value is 80.0
.
public set specular: Number[] source
Sets the PhongMaterial's specular color.
Multiplies by PhongMaterial#specularMap.
Default value is [1.0, 1.0, 1.0]
.
public get specular: Number[] source
Gets the PhongMaterial's specular color.
Multiplies by PhongMaterial#specularMap.
Default value is [1.0, 1.0, 1.0]
.
public get specularFresnel: Fresnel source
Gets the PhongMaterials's specular Fresnel.
Applies to PhongMaterial#specular.
public get specularMap: Texture source
Gets the PhongMaterials's specular Texture.
Multiplies by PhongMaterial#specular.