Merge branch 'master' into master
commit
d678fb7406
|
@ -411,6 +411,7 @@ struct Object {
|
||||||
std::string name; //!< The user-defined name of this object
|
std::string name; //!< The user-defined name of this object
|
||||||
|
|
||||||
CustomExtension customExtensions;
|
CustomExtension customExtensions;
|
||||||
|
CustomExtension extras;
|
||||||
|
|
||||||
//! Objects marked as special are not exported (used to emulate the binary body buffer)
|
//! Objects marked as special are not exported (used to emulate the binary body buffer)
|
||||||
virtual bool IsSpecial() const { return false; }
|
virtual bool IsSpecial() const { return false; }
|
||||||
|
@ -428,6 +429,7 @@ struct Object {
|
||||||
inline Value *FindExtension(Value &val, const char *extensionId);
|
inline Value *FindExtension(Value &val, const char *extensionId);
|
||||||
|
|
||||||
inline void ReadExtensions(Value &val);
|
inline void ReadExtensions(Value &val);
|
||||||
|
inline void ReadExtras(Value &val);
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -372,6 +372,12 @@ inline void Object::ReadExtensions(Value &val) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void Object::ReadExtras(Value &val) {
|
||||||
|
if (Value *curExtras = FindObject(val, "extras")) {
|
||||||
|
this->extras = glTF2::ReadExtensions("extras", *curExtras);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef ASSIMP_ENABLE_DRACO
|
#ifdef ASSIMP_ENABLE_DRACO
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -612,6 +618,7 @@ Ref<T> LazyDict<T>::Retrieve(unsigned int i) {
|
||||||
ReadMember(obj, "name", inst->name);
|
ReadMember(obj, "name", inst->name);
|
||||||
inst->Read(obj, mAsset);
|
inst->Read(obj, mAsset);
|
||||||
inst->ReadExtensions(obj);
|
inst->ReadExtensions(obj);
|
||||||
|
inst->ReadExtras(obj);
|
||||||
|
|
||||||
Ref<T> result = Add(inst.release());
|
Ref<T> result = Add(inst.release());
|
||||||
mRecursiveReferenceCheck.erase(i);
|
mRecursiveReferenceCheck.erase(i);
|
||||||
|
@ -1661,9 +1668,9 @@ inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Value *extras = FindObject(pJSON_Object, "extras");
|
Value *curExtras = FindObject(pJSON_Object, "extras");
|
||||||
if (nullptr != extras) {
|
if (nullptr != curExtras) {
|
||||||
if (Value *curTargetNames = FindArray(*extras, "targetNames")) {
|
if (Value *curTargetNames = FindArray(*curExtras, "targetNames")) {
|
||||||
this->targetNames.resize(curTargetNames->Size());
|
this->targetNames.resize(curTargetNames->Size());
|
||||||
for (unsigned int i = 0; i < curTargetNames->Size(); ++i) {
|
for (unsigned int i = 0; i < curTargetNames->Size(); ++i) {
|
||||||
Value &targetNameValue = (*curTargetNames)[i];
|
Value &targetNameValue = (*curTargetNames)[i];
|
||||||
|
|
|
@ -778,19 +778,17 @@ void glTF2Exporter::ExportMaterials()
|
||||||
mat.Get(AI_MATKEY_TWOSIDED, m->doubleSided);
|
mat.Get(AI_MATKEY_TWOSIDED, m->doubleSided);
|
||||||
mat.Get(AI_MATKEY_GLTF_ALPHACUTOFF, m->alphaCutoff);
|
mat.Get(AI_MATKEY_GLTF_ALPHACUTOFF, m->alphaCutoff);
|
||||||
|
|
||||||
|
float opacity;
|
||||||
aiString alphaMode;
|
aiString alphaMode;
|
||||||
|
|
||||||
|
if (mat.Get(AI_MATKEY_OPACITY, opacity) == AI_SUCCESS) {
|
||||||
|
if (opacity < 1) {
|
||||||
|
m->alphaMode = "BLEND";
|
||||||
|
m->pbrMetallicRoughness.baseColorFactor[3] *= opacity;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (mat.Get(AI_MATKEY_GLTF_ALPHAMODE, alphaMode) == AI_SUCCESS) {
|
if (mat.Get(AI_MATKEY_GLTF_ALPHAMODE, alphaMode) == AI_SUCCESS) {
|
||||||
m->alphaMode = alphaMode.C_Str();
|
m->alphaMode = alphaMode.C_Str();
|
||||||
} else {
|
|
||||||
float opacity;
|
|
||||||
|
|
||||||
if (mat.Get(AI_MATKEY_OPACITY, opacity) == AI_SUCCESS) {
|
|
||||||
if (opacity < 1) {
|
|
||||||
m->alphaMode = "BLEND";
|
|
||||||
m->pbrMetallicRoughness.baseColorFactor[3] *= opacity;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -267,6 +267,7 @@ static aiMaterial *ImportMaterial(std::vector<int> &embeddedTexIdxs, Asset &r, M
|
||||||
SetMaterialColorProperty(r, mat.emissiveFactor, aimat, AI_MATKEY_COLOR_EMISSIVE);
|
SetMaterialColorProperty(r, mat.emissiveFactor, aimat, AI_MATKEY_COLOR_EMISSIVE);
|
||||||
|
|
||||||
aimat->AddProperty(&mat.doubleSided, 1, AI_MATKEY_TWOSIDED);
|
aimat->AddProperty(&mat.doubleSided, 1, AI_MATKEY_TWOSIDED);
|
||||||
|
aimat->AddProperty(&mat.pbrMetallicRoughness.baseColorFactor[3], 1, AI_MATKEY_OPACITY);
|
||||||
|
|
||||||
aiString alphaMode(mat.alphaMode);
|
aiString alphaMode(mat.alphaMode);
|
||||||
aimat->AddProperty(&alphaMode, AI_MATKEY_GLTF_ALPHAMODE);
|
aimat->AddProperty(&alphaMode, AI_MATKEY_GLTF_ALPHAMODE);
|
||||||
|
@ -998,6 +999,14 @@ void ParseExtensions(aiMetadata *metadata, const CustomExtension &extension) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ParseExtras(aiMetadata *metadata, const CustomExtension &extension) {
|
||||||
|
if (extension.mValues.isPresent) {
|
||||||
|
for (size_t i = 0; i < extension.mValues.value.size(); ++i) {
|
||||||
|
ParseExtensions(metadata, extension.mValues.value[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
aiNode *ImportNode(aiScene *pScene, glTF2::Asset &r, std::vector<unsigned int> &meshOffsets, glTF2::Ref<glTF2::Node> &ptr) {
|
aiNode *ImportNode(aiScene *pScene, glTF2::Asset &r, std::vector<unsigned int> &meshOffsets, glTF2::Ref<glTF2::Node> &ptr) {
|
||||||
Node &node = *ptr;
|
Node &node = *ptr;
|
||||||
|
|
||||||
|
@ -1016,9 +1025,14 @@ aiNode *ImportNode(aiScene *pScene, glTF2::Asset &r, std::vector<unsigned int> &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (node.customExtensions) {
|
if (node.customExtensions || node.extras) {
|
||||||
ainode->mMetaData = new aiMetadata;
|
ainode->mMetaData = new aiMetadata;
|
||||||
ParseExtensions(ainode->mMetaData, node.customExtensions);
|
if (node.customExtensions) {
|
||||||
|
ParseExtensions(ainode->mMetaData, node.customExtensions);
|
||||||
|
}
|
||||||
|
if (node.extras) {
|
||||||
|
ParseExtras(ainode->mMetaData, node.extras);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
GetNodeTransform(ainode->mTransformation, node);
|
GetNodeTransform(ainode->mTransformation, node);
|
||||||
|
|
Loading…
Reference in New Issue