static RawMaterialType GetMaterialType()

in src/fbx/Fbx2Raw.cpp [64:89]


static RawMaterialType GetMaterialType(
    const RawModel& raw,
    const int textures[RAW_TEXTURE_USAGE_MAX],
    const bool vertexTransparency,
    const bool skinned) {
  // DIFFUSE and ALBEDO are different enough to represent distinctly, but they both help determine
  // transparency.
  int diffuseTexture = textures[RAW_TEXTURE_USAGE_DIFFUSE];
  if (diffuseTexture < 0) {
    diffuseTexture = textures[RAW_TEXTURE_USAGE_ALBEDO];
  }
  // determine material type based on texture occlusion.
  if (diffuseTexture >= 0) {
    return (raw.GetTexture(diffuseTexture).occlusion == RAW_TEXTURE_OCCLUSION_OPAQUE)
        ? (skinned ? RAW_MATERIAL_TYPE_SKINNED_OPAQUE : RAW_MATERIAL_TYPE_OPAQUE)
        : (skinned ? RAW_MATERIAL_TYPE_SKINNED_TRANSPARENT : RAW_MATERIAL_TYPE_TRANSPARENT);
  }

  // else if there is any vertex transparency, treat whole mesh as transparent
  if (vertexTransparency) {
    return skinned ? RAW_MATERIAL_TYPE_SKINNED_TRANSPARENT : RAW_MATERIAL_TYPE_TRANSPARENT;
  }

  // Default to simply opaque.
  return skinned ? RAW_MATERIAL_TYPE_SKINNED_OPAQUE : RAW_MATERIAL_TYPE_OPAQUE;
}