# MaterialAppearance

#### new Cesium.MaterialAppearance(options)
Scene/MaterialAppearance.js 49

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.MaterialSupportType | `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` | Object |  | 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

### Namespaces

MaterialSupport

### Members

#### readonly closed : Boolean
Scene/MaterialAppearance.js 153

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`

#### readonly faceForward : Boolean
Scene/MaterialAppearance.js 224

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`

#### readonly flat : Boolean
Scene/MaterialAppearance.js 205

When `true`, flat shading is used in the fragment shader, which means lighting is not taking into account.

Default Value: `false`

#### readonly fragmentShaderSource : String
Scene/MaterialAppearance.js 116

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.

#### material : Material
Scene/MaterialAppearance.js 66

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

#### readonly materialSupport : MaterialAppearance.MaterialSupportType
Scene/MaterialAppearance.js 170

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``

#### readonly renderState : Object
Scene/MaterialAppearance.js 135

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`.

#### translucent : Boolean
Scene/MaterialAppearance.js 75

When `true`, the geometry is expected to appear translucent.

Default Value: `true`

#### readonly vertexFormat : VertexFormat
Scene/MaterialAppearance.js 188

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``

#### readonly vertexShaderSource : String
Scene/MaterialAppearance.js 99

The GLSL source code for the vertex shader.

### Methods

#### getFragmentShaderSource() → String
Scene/MaterialAppearance.js 240

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

##### Returns:

The full GLSL fragment shader source.

#### getRenderState() → Object
Scene/MaterialAppearance.js 260

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.

#### isTranslucent() → Boolean
Scene/MaterialAppearance.js 249

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

##### Returns:

`true` if the appearance is translucent.

### Type Definitions

#### Cesium.MaterialAppearance.MaterialSupportType
Scene/MaterialAppearance.js 262

##### Properties:

Name | Type | Description
--- | --- | ---
`vertexFormat` | VertexFormat |
`vertexShaderSource` | String |
`fragmentShaderSource` | String |