// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using System;
using UnityEngine;
namespace Microsoft.MixedReality.Toolkit.Utilities.Gltf.Schema
{
///
/// The material appearance of a primitive.
/// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0/schema
///
[Serializable]
public class GltfMaterial : GltfChildOfRootProperty
{
///
/// A set of parameter values that are used to define the metallic-roughness
/// material model from Physically-Based Rendering (PBR) methodology.
///
public GltfPbrMetallicRoughness pbrMetallicRoughness;
///
/// A set of parameter values used to light flat-shaded materials
///
public GltfMaterialCommonConstant commonConstant;
///
/// A tangent space normal map. Each texel represents the XYZ components of a
/// normal vector in tangent space.
///
public GltfNormalTextureInfo normalTexture;
///
/// The occlusion map is a greyscale texture, with white indicating areas that
/// should receive full indirect lighting and black indicating no indirect
/// lighting.
///
public GltfOcclusionTextureInfo occlusionTexture;
///
/// The emissive map controls the color and intensity of the light being emitted
/// by the material. This texture contains RGB components in sRGB color space.
/// If a fourth component (A) is present, it is ignored.
///
public GltfTextureInfo emissiveTexture;
///
/// The RGB components of the emissive color of the material.
/// If an emissiveTexture is specified, this value is multiplied with the texel
/// values.
///
/// 0.0
/// 1.0
///
/// 3
/// 3
///
public float[] emissiveFactor = { 0f, 0f, 0f, 0f };
///
/// The material's alpha rendering mode enumeration specifying the interpretation of the
/// alpha value of the main factor and texture. In `OPAQUE` mode, the alpha value is
/// ignored and the rendered output is fully opaque. In `MASK` mode, the rendered output
/// is either fully opaque or fully transparent depending on the alpha value and the
/// specified alpha cutoff value. In `BLEND` mode, the alpha value is used to composite
/// the source and destination areas. The rendered output is combined with the background
/// using the normal painting operation (i.e. the Porter and Duff over operator).
///
public string alphaMode;
///
/// Specifies the cutoff threshold when in `MASK` mode. If the alpha value is greater than
/// or equal to this value then it is rendered as fully opaque, otherwise, it is rendered
/// as fully transparent. This value is ignored for other modes.
///
public double alphaCutoff = 0.5f;
///
/// Specifies whether the material is double sided. When this value is false, back-face
/// culling is enabled. When this value is true, back-face culling is disabled and double
/// sided lighting is enabled. The back-face must have its normals reversed before the
/// lighting equation is evaluated.
///
public bool doubleSided;
///
/// Unity Material wrapper for the GltfMaterial
///
public Material Material { get; internal set; }
}
}