// SPDX-FileCopyrightText: 2024 Unity Technologies and the glTFast authors
// SPDX-License-Identifier: Apache-2.0
using System;
using GLTFast.Materials;
using GLTFast.Schema;
using UnityEngine;
using UnityEngine.Rendering;
using Material = UnityEngine.Material;
namespace GLTFast.Export
{
///
/// Converts Unity Materials that use a glTFast Built-In shader to glTF materials
///
public class GltfBuiltInShaderMaterialExporter : GltfMaterialExporter
{
///
protected override MaterialBase.AlphaMode GetAlphaMode(Material material)
{
if (TryGetValue(material, MaterialProperty.Mode, out int modeInt))
{
var mode = (StandardShaderMode)modeInt;
switch (mode)
{
case StandardShaderMode.Cutout:
return MaterialBase.AlphaMode.Mask;
case StandardShaderMode.Fade:
case StandardShaderMode.Transparent:
return MaterialBase.AlphaMode.Blend;
}
}
return MaterialBase.AlphaMode.Opaque;
}
///
protected override float GetAlphaCutoff(Material material)
{
return material.GetFloat(MaterialProperty.AlphaCutoff);
}
///
protected override bool IsDoubleSided(Material material)
{
if (TryGetValue(material, MaterialProperty.CullMode, out int cull))
{
return cull == (int)CullMode.Off;
}
return false;
}
}
}