SurfaceAppearance objects let you override the surface appearance of a MeshPart with advanced texture options. Most notably, SurfaceAppearance can apply one or more Physically-Based Rendering (PBR) textures to a mesh. PBR textures allow you to display realistic surfaces in various lighting scenarios using multiple image files on a single object. When creating your own PBR textures, ensure that the texture maps follow the advanced texture requirements.
Enabling Surface Appearance
You can add a SurfaceAppearance object to any MeshPart in the Explorer. In general, you can't modify SurfaceAppearance properties by scripts during an experience because the engine requires some pre-processing to display these graphics.
To enable a surface appearance for a MeshPart:
In the Explorer, select the MeshPart.
Add > SurfaceAppearance object.
Surface Appearance Properties
Surface Appearance properties allow you to change various aspects of a surface's appearance through a combination of image maps. These image maps require an Image ID of an uploaded image file.
The ColorMap property determines the color and opacity of the surface (this texture is often called the albedo texture). Its alpha channel controls opacity as outlined in AlphaMode.
AlphaMode determines how the alpha channel of the ColorMap is used. This lets you apply textures of varying transparency/opacity onto meshes to create partially translucent objects. AlphaMode can be set to the following options:
Overlay — Overlays the ColorMap (based on its alpha channel) over the underlying part Color. This is the default setting.
Transparency — Renders only the ColorMap using its alpha channel for transparency. Surface areas where the map's alpha is 0 appear completely transparent while areas where the map's alpha is 1 appear completely opaque.
A NormalMap modifies the lighting of the surface by adding bumps, dents, cracks, and curves without adding more polygons. The R, G, and B channels of the image correspond respectively to the X, Y, and Z components of the local surface vector. A uniform image of color [127, 127, 255] translates to a completely flat normal map.
A MetalnessMap determines which parts of the surface are metal versus non-metal. This texture map is a grayscale image where black pixels correspond to non-metals and white pixels correspond to metals. You can use gray values for blending or to simulate dirt/grunge on top of an underlying metal (white) area.
A RoughnessMap specifies the apparent roughness across the surface. This map is a grayscale image where black pixels correspond to a maximally smooth surface (reflective) and white pixels correspond to a maximally rough surface (matte).