MaterialAppearance - Cesium Documentation

# MaterialAppearance

#### new MaterialAppearance(options)

  An appearance for arbitrary geometry (as opposed to `EllipsoidSurfaceAppearance`, for example) that supports shading with materials.

  Name | Type | Description
  --- | --- | ---

  `options`

  Object

  optional Object with the following properties:

  Name | Type | Default | Description
  --- | --- | --- | ---
  `flat` | Boolean | `false` | optional When `true`, flat shading is used in the fragment shader, which means lighting is not taking into account.
  `faceForward` | Boolean | `!options.closed` | optional When `true`, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like `WallGeometry`.
  `translucent` | Boolean | `true` | optional When `true`, the geometry is expected to appear translucent so `MaterialAppearance#renderState` has alpha blending enabled.
  `closed` | Boolean | `false` | optional When `true`, the geometry is expected to be closed so `MaterialAppearance#renderState` has backface culling enabled.
  `materialSupport` | MaterialAppearance.MaterialSupport | `MaterialAppearance.MaterialSupport.TEXTURED` | optional The type of materials that will be supported.
  `material` | Material | `Material.ColorType` | optional The material used to determine the fragment color.
  `vertexShaderSource` | String |  | optional Optional GLSL vertex shader source to override the default vertex shader.
  `fragmentShaderSource` | String |  | optional Optional GLSL fragment shader source to override the default fragment shader.
  `renderState` | RenderState |  | optional Optional render state to override the default render state.

  ##### Example:

      var primitive = new Cesium.Primitive({
        geometryInstances : new Cesium.GeometryInstance({
          geometry : new Cesium.WallGeometry({
                  materialSupport :  Cesium.MaterialAppearance.MaterialSupport.BASIC.vertexFormat,
            // ...
          })
        }),
        appearance : new Cesium.MaterialAppearance({
          material : Cesium.Material.fromType('Color'),
          faceForward : true
        })

      });

  ##### Demo:

  - Cesium Sandcastle Material Appearance Demo

  ##### See:

  - Fabric
  Source: Scene/MaterialAppearance.js, line 68

### Members

#### staticMaterialAppearance.MaterialSupport

  Determines the type of `Material` that is supported by a `MaterialAppearance` instance. This is a trade-off between flexibility (a wide array of materials) and memory/performance (required vertex format and GLSL shader complexity.
  Source: Scene/MaterialAppearance.js, line 287

#### readonlyclosed :Boolean

  When `true`, the geometry is expected to be closed so `MaterialAppearance#renderState` has backface culling enabled. If the viewer enters the geometry, it will not be visible.
  Default Value: `false`
  Source: Scene/MaterialAppearance.js, line 172

#### readonlyfaceForward :Boolean

  When `true`, the fragment shader flips the surface normal as needed to ensure that the normal faces the viewer to avoid dark spots. This is useful when both sides of a geometry should be shaded like `WallGeometry`.
  Default Value: `true`
  Source: Scene/MaterialAppearance.js, line 243

#### readonlyflat :Boolean

  When `true`, flat shading is used in the fragment shader, which means lighting is not taking into account.
  Default Value: `false`
  Source: Scene/MaterialAppearance.js, line 224

#### readonlyfragmentShaderSource :String

  The GLSL source code for the fragment shader. The full fragment shader source is built procedurally taking into account `MaterialAppearance#material`, `MaterialAppearance#flat`, and `MaterialAppearance#faceForward`. Use `MaterialAppearance#getFragmentShaderSource` to get the full source.
  Source: Scene/MaterialAppearance.js, line 135

#### material :Material

  The material used to determine the fragment color. Unlike other `MaterialAppearance` properties, this is not read-only, so an appearance's material can change on the fly.
  Default Value: ``Material.ColorType``

  ##### See:

  - Fabric
  Source: Scene/MaterialAppearance.js, line 85

#### readonlymaterialSupport :MaterialAppearance.MaterialSupport

  The type of materials supported by this instance. This impacts the required `VertexFormat` and the complexity of the vertex and fragment shaders.
  Default Value: ``MaterialAppearance.MaterialSupport.TEXTURED``
  Source: Scene/MaterialAppearance.js, line 189

#### readonlyrenderState :Object

  The WebGL fixed-function state to use when rendering the geometry.

  The render state can be explicitly defined when constructing a `MaterialAppearance` instance, or it is set implicitly via `MaterialAppearance#translucent` and `MaterialAppearance#closed`.

  Source: Scene/MaterialAppearance.js, line 154

#### translucent :Boolean

  When `true`, the geometry is expected to appear translucent.
  Default Value: `true`
  Source: Scene/MaterialAppearance.js, line 94

#### readonlyvertexFormat :VertexFormat

  The `VertexFormat` that this appearance instance is compatible with. A geometry can have more vertex attributes and still be compatible - at a potential performance cost - but it can't have less.
  Default Value: ``MaterialAppearance.MaterialSupport.TEXTURED.vertexFormat``
  Source: Scene/MaterialAppearance.js, line 207

#### readonlyvertexShaderSource :String

  The GLSL source code for the vertex shader.
  Source: Scene/MaterialAppearance.js, line 118

### Methods

#### getFragmentShaderSource()

  Procedurally creates the full GLSL fragment shader source. For `MaterialAppearance`, this is derived from `MaterialAppearance#fragmentShaderSource`, `MaterialAppearance#material`, `MaterialAppearance#flat`, and `MaterialAppearance#faceForward`.

  ##### Returns:

  String The full GLSL fragment shader source.
  Source: Scene/MaterialAppearance.js, line 259

#### getRenderState() → Object

  Creates a render state. This is not the final render state instance; instead, it can contain a subset of render state properties identical to the render state created in the context.

  ##### Returns:

  The render state.
  Source: Scene/MaterialAppearance.js, line 279

#### isTranslucent() → Boolean

  Determines if the geometry is translucent based on `MaterialAppearance#translucent` and `Material#isTranslucent`.

  ##### Returns:

  `true` if the appearance is translucent.
  Source: Scene/MaterialAppearance.js, line 268