This document describes the X-Plane 12 material model – that is, how materials are authored and rendered for most solid 3-d elements in X-Plane. The material model is used for all OBJ 3-d models, aircraft, all scenery elements, and models inserted by plugins via the XPLM Instancing APIs.

X-Plane 12 Material Model Basics

X-Plane 12 uses an industry standard PBR “metalness” work-flow that matches the Disney/Unreal Engine 4 model, as well as a number of common tools including Substance Painter 2 and Blender’s “Principled BSDF” shading node. The goal is to provide close to WYSIWYG material authoring.

The main difference between X-Plane and other engines is in terms of what parameters can be controlled – some engines provide significantly more material parameters (at a higher rendering cost).

X-Plane lets you control:

  • Glossiness/roughness, either via a texture map or as a hard coded number in an art asset text file. We recommend using texture maps to control roughness/gloss.
  • Albedo/Base Color. The base color of the material is used as an albedo for dielectric materials, and as a reflection tint for metal colors – this is a fairly standard way to reuse a single color in metalness work-flows. In most X-Plane documentation this channel is simply called “albedo.”
  • Per pixel normal maps in tangent space using two channels.
  • An optional RGB/RGBA “emissive” overlay. This is calibrated to photometric units using a directive in the art asset text file. If an alpha channel is present, it will be added to the albedo alpha, which can be used for special effects but is generally not recommended.
  • Baked ambient occlusion for a small number of specialized art assets. (This feature is not currently available on OBJs, including plugins or aircraft, but may be added later.)

The model also lets you control in a texture map at most one of:

  • Base Reflectance (“F0”) – This is the amount of fresnel reflection a material exhibits when viewed with the camera perpendicular to the material (its least reflective position). Note that X-Plane uses F0 to control “metalness” as well but the two properties cannot be specified separately due to engine limitations – more details on this later.
  • Translucency – This parameter causes light on the back of a material to increase diffuse brightness, while limiting the diffuse brightness of the front of the material – it is meant for vegetation.  When not in use, translucency defaults to zero.
  • Separate normal alpha – Can be used to create normal-map decals that affect terrain without drawing full materials. When not in use, normal alpha defaults to albedo alpha.

Metalness, Fresnel and F0

In a metalness PBR work-flow, “metalness” describes two material models:

  • Dialectrics: light is reflected off the surface of the material based on an angle of incidence/reflection; this reflection is not tinted. Remaining light is absorbed and re-emitted with tinting based on the albedo color; the albedo describes both how much light is absorbed/re-emitted and its spectral quantity. F0 defines how much light is reflected under the lowest reflected conditions; as the camera angle to the material becomes a grazing angle, reflection increases based on Fresnel’s law.
  • Metals: light is either reflected with tinting or completely absorbed. This is an approximation of actual metal optics, which require a much more complex fresnel equation. The goal of a metal work-flow is essentially to get tinted mirrors with variable but high reflectivity to make chrome/mirror parts look acceptable.

The metalness parameter of your material blends these two models, ideally producing intermediate materials that represent what you would get if your material contained specs of both dielectric paint and underlying metal.

X-Plane’s design limitation is that it does not provide separate channels for both Metalness and F0, for performance reasons. To work-around this, X-Plane works as follows:

  • When F0 in the material is in the range of 0.00 to 0.08, F0 is used as metalness and F0. This produces a nearly dielectric material for most useful F0 ranges, including:
    • F0 = 0.0 – this is an unrealistic mostly non-specular material. We recommend this for textures that represent complex 3-d self-shadowing phenomenon, like a terrain texture of grass.
    • F0 = 0.02 – 0.04, e.g. plastic, concrete, vinyl.
    • F0 = 0.06, e.g. glass.
  • Once the material F0 gets above 0.08, we use F0 for metalness, but clamp F0 to 0.08. This limits the amount of dielectric reflection the material exhibits in a hybrid material.
  • Once F0 is very high (e.g. 0.9 or higher, e.g basically metal) the light contributed from the dielectric part of the equation is extremely low and rendering should match tools.

Values for Material F0 When Not Using a Texture

When X-Plane’s normal/material map is in “metalness” mode, the blue channel is used as the material F0, giving you access to the full range of behaviors, including 0.0 (no specularity), 0.04 (reasonable dielectrics), 1.0 (pure reflective metals), and intermediate values.

In any other mode, X-Plane will pick a material F0 automatically based on the following rules:

  • If the material uses BLEND_GLASS mode and is attached to an aircraft in a glass lighting mode (one of interior glass, exterior glass, exterior rain glass or interior reflective glass) then F0 will be set to 0.06 to provide reasonable glass reflections.
  • Otherwise if the material uses a “translucency” mode normal map, F0 will be set to 0.0.
  • Otherwise if the material uses any other normal map (full RGBA, gloss-map only, etc.) F0 will be set to 0.04.
  • Otherwise the material uses no normal map. If its gloss is set > 0.0, F0 will be set to 0.04. This handles the case where a material is marked shiny in an OBJ but has no normal map – the result will be a glossy plastic-like material.
  • Otherwise the material uses no normal map and has the default maximum roughness; F0 will be set to 0.0 to create the illusion of additional self-shadowing.

Changes from X-Plane 11 Materials

X-Plane 11 introduced PBR materials; the X-Plane 12 model is an incremental update. The changes are:

  • X-Plane 12 renders “intermediate metals” (materials with F0/metalness between 0.25 and 0.75) in a manner compatible with SP2/Blender; X-Plane 11 would build these materials as if the dielectric part of the material had a super-high F0, resulting in a lot of extra specularity. The result would be that intermediate metals would be much brighter and more washed out than in standard authoring environments. If your model makes heavy use of intermediate metals you may need to change your albedo/re-bake your materials.
  • X-Plane 12 adds photometric calibration to emissive channels.
  • X-Plane 12 adds an optional translucent mode – translucency was effectively always off in X-Plane 11.

2 comments on “The X-Plane 12 Material Model

  1. Please, in the case of a ground texture (draped poly), where do you put the values 0.02 or 0.04 etc for the FO METALNESS glossiness etc?
    Like this example:
    A
    850
    LINE_PAINT

    LAYER_GROUP taxiways +2
    TEXTURE road_layers.png
    TEXTURE_NORMAL 1 asfalto_nml.png
    BUMP_LEVEL 0.02
    GLOBAL_specular 1.0
    NORMAL_METALNESS

    (It’s a line but the texture is of a road).
    I change the specular (after GLOBAL_specular) from 1.0 to 0.01 and nothing changes. I’m trying to make the road not look like metal, but asphalt. In X-Plane 11 I did this trick of lowering the opacity of the normal map to 60% and the reflection became blurred, like asphalt or cement. On 12 this doesn’t work anymore, and I’m not a programmer, so I don’t know where to put what to control this glossiness (from asphalt to metal). Could someone please show in the actual .obj file where to write what?
    Thank you.
    Ax.

  2. Many users of my scenery are having problems after the last XP12 update. Taxiways not showing, lights missing etc. I do the 11 version first and then the only thing I change for the 12 is the ground textures – from my textures to XP’s (Asphalt D3 Worn, Concrete Dirty etc) so they have the wet effect. I don’t have any problems myself, but many users are complaining since the last update. Since I don’t have any errors, I can’t figure out what’s happening. Help? Anything I’m doing wrong when setting up the ground textures? I just change the “= Taxi Surface” slot to “Concrete Dirty” or whatever is close to my original texture. Any new incompatibility with orthophotos, Ortho4Xp etc?
    Thank you.

Leave a Reply

Your email address will not be published. Required fields are marked *

Please do not report bugs in the blog comments.
Only bugs reported via the X-Plane Bug Reporter are tracked.