<!-- Material -->
<element name="material" required="0">
  <description>The material of the visual element.</description>

  <element name="script" required="0">
    <description>Name of material from an installed script file. This will override the color element if the script exists.</description>

    <element name="uri" type="string" default="__default__" required="+">
      <description>URI of the material script file</description>
    </element>

    <element name="name" type="string" default="__default__" required="1">
      <description>Name of the script within the script file</description>
    </element>
  </element>

  <element name="shader" required="0">

    <attribute name="type" type="string" default="pixel" required="1">
      <description>vertex, pixel, normal_map_object_space, normal_map_tangent_space</description>
    </attribute>

    <element name="normal_map" type="string" default="__default__" required="0">
      <description>filename of the normal map</description>
    </element>
  </element>

  <element name="lighting" type="bool" default="true" required="0">
    <description>If false, dynamic lighting will be disabled</description>
  </element>

  <element name="ambient" type="color" default="0 0 0 1" required="0">
    <description>The ambient color of a material specified by set of four numbers representing red/green/blue, each in the range of [0,1].</description>
  </element>

  <element name="diffuse"  type="color" default="0 0 0 1" required="0">
    <description>The diffuse color of a material specified by set of four numbers representing red/green/blue/alpha, each in the range of [0,1].</description>
  </element>

  <element name="specular" type="color" default="0 0 0 1" required="0">
    <description>The specular color of a material specified by set of four numbers representing red/green/blue/alpha, each in the range of [0,1].</description>
  </element>

  <element name="emissive" type="color" default="0 0 0 1" required="0">
    <description>The emissive color of a material specified by set of four numbers representing red/green/blue, each in the range of [0,1].</description>
  </element>

  <element name="pbr" required="0">
    <description>Physically Based Rendering (PBR) material. There are two PBR workflows: metal and specular. While both workflows and their parameters can be specified at the same time, typically only one of them will be used (depending on the underlying renderer capability). It is also recommended to use the same workflow for all materials in the world.</description>

    <element name="metal" required="0">
      <description>PBR using the Metallic/Roughness workflow.</description>

      <element name="albedo_map" type="string" default="" required="0">
        <description>Filename of the diffuse/albedo map.</description>
      </element>

      <element name="roughness_map" type="string" default="" required="0">
        <description>Filename of the roughness map.</description>
      </element>

      <element name="roughness" type="string" default="0.5" required="0">
        <description>Material roughness in the range of [0,1], where 0 represents a smooth surface and 1 represents a rough surface. This is the inverse of a specular map in a PBR specular workflow.</description>
      </element>

      <element name="metalness_map" type="string" default="" required="0">
        <description>Filename of the metalness map.</description>
      </element>

      <element name="metalness" type="string" default="0.5" required="0">
        <description>Material metalness in the range of [0,1], where 0 represents non-metal and 1 represents raw metal</description>
      </element>

      <element name="environment_map" type="string" default="" required="0">
        <description>Filename of the environment / reflection map, typically in the form of a cubemap</description>
      </element>

      <element name="ambient_occlusion_map" type="string" default="" required="0">
        <description>Filename of the ambient occlusion map. The map defines the amount of ambient lighting on the surface.</description>
      </element>

      <element name="normal_map" type="string" default="" required="0">
        <attribute name="type" type="string" default="tangent" required="0">
          <description>The space that the normals are in. Values are: 'object' or 'tangent'</description>
        </attribute>

        <description>Filename of the normal map. The normals can be in the object space or tangent space as specified in the 'type' attribute</description>
      </element>

      <element name="emissive_map" type="string" default="" required="0">
        <description>Filename of the emissive map.</description>
      </element>
    </element>

    <element name="specular" required="0">
      <description>PBR using the Specular/Glossiness workflow.</description>

      <element name="albedo_map" type="string" default="" required="0">
        <description>Filename of the diffuse/albedo map.</description>
      </element>

      <element name="specular_map" type="string" default="" required="0">
        <description>Filename of the specular map.</description>
      </element>

      <element name="glossiness_map" type="string" default="" required="0">
        <description>Filename of the glossiness map.</description>
      </element>

      <element name="glossiness" type="string" default="0" required="0">
        <description>Material glossiness in the range of [0-1], where 0 represents a rough surface and 1 represents a smooth surface. This is the inverse of a roughness map in a PBR metal workflow.</description>
      </element>

      <element name="environment_map" type="string" default="" required="0">
        <description>Filename of the environment / reflection map, typically in the form of a cubemap</description>
      </element>

      <element name="ambient_occlusion_map" type="string" default="" required="0">
        <description>Filename of the ambient occlusion map. The map defines the amount of ambient lighting on the surface.</description>
      </element>

      <element name="normal_map" type="string" default="" required="0">
        <attribute name="type" type="string" default="tangent" required="0">
          <description>The space that the normals are in. Values are: 'object' or 'tangent'</description>
        </attribute>

        <description>Filename of the normal map. The normals can be in the object space or tangent space as specified in the 'type' attribute</description>
      </element>

      <element name="emissive_map" type="string" default="" required="0">
        <description>Filename of the emissive map.</description>
      </element>
    </element>

  </element>


</element> <!-- End Material -->
