khf_materials_cmnConstant support

This commit is contained in:
Robert Long 2017-11-20 16:14:57 -08:00
parent 423458a841
commit 2f0879fb6f
6 changed files with 48 additions and 6 deletions

View File

@ -28,6 +28,7 @@ endif()
ExternalProject_Add(Draco
GIT_REPOSITORY https://github.com/google/draco
PREFIX draco
GIT_TAG 1.2.0
INSTALL_DIR
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>

View File

@ -453,11 +453,20 @@ ModelData *Raw2Gltf(
getTex(RAW_TEXTURE_USAGE_DIFFUSE), material.diffuseFactor,
getTex(RAW_TEXTURE_USAGE_SPECULAR), material.specularFactor));
}
std::shared_ptr<KHRCmnConstantMaterial> khrCmnConstantMat;
if (options.useKHRMatCmnConstant) {
khrCmnConstantMat.reset(new KHRCmnConstantMaterial());
// Set fallback parameters
pbrMetRough.reset(new PBRMetallicRoughness(nullptr, Vec4f(0.0f, 0.0f, 0.0f, 1.0f), 0.0f, 0.0f));
}
std::shared_ptr<MaterialData> mData = gltf->materials.hold(
new MaterialData(
material.name, isTransparent, getTex(RAW_TEXTURE_USAGE_NORMAL),
getTex(RAW_TEXTURE_USAGE_EMISSIVE), material.emissiveFactor,
khrComMat, pbrMetRough, pbrSpecGloss));
khrComMat, khrCmnConstantMat, pbrMetRough, pbrSpecGloss));
materialsByName[materialHash(material)] = mData;
}
@ -726,6 +735,9 @@ ModelData *Raw2Gltf(
extensionsRequired.push_back(KHR_MATERIALS_COMMON);
}
}
if (options.useKHRMatCmnConstant) {
extensionsUsed.push_back(KHR_MATERIALS_CMN_CONSTANT);
}
if (options.usePBRSpecGloss) {
extensionsUsed.push_back(KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS);
if (!options.useKHRMatCom && !options.usePBRMetRough) {

View File

@ -30,6 +30,7 @@ using json = nlohmann::basic_json<workaround_fifo_map>;
static const std::string KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
static const std::string KHR_MATERIALS_COMMON = "KHR_materials_common";
static const std::string KHR_MATERIALS_CMN_CONSTANT = "KHR_materials_cmnConstant";
static const std::string KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS = "KHR_materials_pbrSpecularGlossiness";
static const std::string extBufferFilename = "buffer.bin";
@ -54,6 +55,8 @@ struct GltfOptions
bool useDraco;
/** Whether to use KHR_materials_common to extend materials definitions. */
bool useKHRMatCom;
/** Whether to use KHR_materials_cmnConstant to extend materials definitions. */
bool useKHRMatCmnConstant;
/** Whether to populate the pbrMetallicRoughness substruct in materials. */
bool usePBRMetRough;
/** Whether to use KHR_materials_pbrSpecularGlossiness to extend material definitions. */

View File

@ -93,6 +93,15 @@ void to_json(json &j, const KHRCommonMats &d)
}
}
KHRCmnConstantMaterial::KHRCmnConstantMaterial()
{
}
void to_json(json &j, const KHRCmnConstantMaterial &d)
{
j = json({});
}
PBRSpecularGlossiness::PBRSpecularGlossiness(
const TextureData *diffuseTexture, const Vec4f &diffuseFactor,
const TextureData *specularGlossinessTexture, const Vec3f &specularFactor,
@ -156,6 +165,7 @@ MaterialData::MaterialData(
std::string name, bool isTransparent, const TextureData *normalTexture,
const TextureData *emissiveTexture, const Vec3f & emissiveFactor,
std::shared_ptr<KHRCommonMats> const khrCommonMats,
std::shared_ptr<KHRCmnConstantMaterial> const khrCmnConstantMaterial,
std::shared_ptr<PBRMetallicRoughness> const pbrMetallicRoughness,
std::shared_ptr<PBRSpecularGlossiness> const pbrSpecularGlossiness)
: Holdable(),
@ -165,6 +175,7 @@ MaterialData::MaterialData(
emissiveTexture(Tex::ref(emissiveTexture)),
emissiveFactor(std::move(emissiveFactor)),
khrCommonMats(khrCommonMats),
khrCmnConstantMaterial(khrCmnConstantMaterial),
pbrMetallicRoughness(pbrMetallicRoughness),
pbrSpecularGlossiness(pbrSpecularGlossiness) {}
@ -187,11 +198,14 @@ json MaterialData::serialize() const
if (pbrMetallicRoughness != nullptr) {
result["pbrMetallicRoughness"] = *pbrMetallicRoughness;
}
if (khrCommonMats != nullptr || pbrSpecularGlossiness != nullptr) {
if (khrCommonMats != nullptr || khrCmnConstantMaterial != nullptr || pbrSpecularGlossiness != nullptr) {
json extensions = { };
if (khrCommonMats != nullptr) {
extensions[KHR_MATERIALS_COMMON] = *khrCommonMats;
}
if (khrCmnConstantMaterial != nullptr) {
extensions[KHR_MATERIALS_CMN_CONSTANT] = *khrCmnConstantMaterial;
}
if (pbrSpecularGlossiness != nullptr) {
extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS] = *pbrSpecularGlossiness;
}

View File

@ -53,6 +53,11 @@ struct KHRCommonMats
const Vec3f specularFactor;
};
struct KHRCmnConstantMaterial
{
KHRCmnConstantMaterial();
};
struct PBRSpecularGlossiness
{
PBRSpecularGlossiness(
@ -85,6 +90,7 @@ struct MaterialData : Holdable
std::string name, bool isTransparent, const TextureData *normalTexture,
const TextureData *emissiveTexture, const Vec3f &emissiveFactor,
std::shared_ptr<KHRCommonMats> const khrCommonMats,
std::shared_ptr<KHRCmnConstantMaterial> const khrCmnConstantMaterial,
std::shared_ptr<PBRMetallicRoughness> const pbrMetallicRoughness,
std::shared_ptr<PBRSpecularGlossiness> const pbrSpecularGlossiness);
@ -96,13 +102,15 @@ struct MaterialData : Holdable
const std::unique_ptr<const Tex> emissiveTexture;
const Vec3f emissiveFactor;
const std::shared_ptr<const KHRCommonMats> khrCommonMats;
const std::shared_ptr<const PBRMetallicRoughness> pbrMetallicRoughness;
const std::shared_ptr<const PBRSpecularGlossiness> pbrSpecularGlossiness;
const std::shared_ptr<const KHRCommonMats> khrCommonMats;
const std::shared_ptr<const KHRCmnConstantMaterial> khrCmnConstantMaterial;
const std::shared_ptr<const PBRMetallicRoughness> pbrMetallicRoughness;
const std::shared_ptr<const PBRSpecularGlossiness> pbrSpecularGlossiness;
};
void to_json(json &j, const Tex &data);
void to_json(json &j, const KHRCommonMats &d);
void to_json(json &j, const KHRCmnConstantMaterial &d);
void to_json(json &j, const PBRSpecularGlossiness &d);
void to_json(json &j, const PBRMetallicRoughness &d);

View File

@ -48,6 +48,7 @@ int main(int argc, char *argv[])
false, // embedResources
false, // useDraco
false, // useKHRMatCom
false, // useKHRMatCmnConstant
false, // usePBRMetRough
false, // usePBRSpecGloss
false, // useBlendShapeNormals
@ -77,6 +78,9 @@ int main(int argc, char *argv[])
(
"khr-materials-common", "(WIP) Use KHR_materials_common extensions to specify Unlit/Lambert/Blinn/Phong shaders.",
cxxopts::value<bool>(gltfOptions.useKHRMatCom))
(
"khr-materials-cmnConstant", "(WIP) Use KHR_materials_cmnConstant extension to specify Unlit shader.",
cxxopts::value<bool>(gltfOptions.useKHRMatCmnConstant))
(
"pbr-metallic-roughness", "(WIP) Try to glean glTF 2.0 native PBR attributes from the FBX.",
cxxopts::value<bool>(gltfOptions.usePBRMetRough))
@ -129,7 +133,7 @@ Copyright (c) 2016-2017 Oculus VR, LLC.
verboseOutput = true;
}
if (!gltfOptions.useKHRMatCom && !gltfOptions.usePBRSpecGloss && !gltfOptions.usePBRMetRough) {
if (!gltfOptions.useKHRMatCmnConstant && !gltfOptions.useKHRMatCom && !gltfOptions.usePBRSpecGloss && !gltfOptions.usePBRMetRough) {
if (verboseOutput) {
fmt::printf("Defaulting to --pbr-metallic-roughness material support.\n");
}