Merge branch 'master' into refactor/KHR_material_specular

pull/4786/head
Adam Beili 2022-11-29 17:35:52 +01:00 committed by GitHub
commit 54068637ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 109 additions and 11 deletions

View File

@ -115,7 +115,7 @@ jobs:
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }} ${{ steps.hunter_extra_cmake_args.outputs.args }}' cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }} ${{ steps.hunter_extra_cmake_args.outputs.args }}'
buildWithCMakeArgs: '-- -j 24 -v' buildWithCMakeArgs: '--parallel 24 -v'
buildDirectory: '${{ github.workspace }}/build/' buildDirectory: '${{ github.workspace }}/build/'
- name: Exclude certain tests in Hunter specific builds - name: Exclude certain tests in Hunter specific builds

26
.github/workflows/cifuzz.yml vendored 100644
View File

@ -0,0 +1,26 @@
name: CIFuzz
on: [pull_request]
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'assimp'
dry-run: false
language: c++
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'assimp'
fuzz-seconds: 300
dry-run: false
language: c++
- name: Upload Crash
uses: actions/upload-artifact@v3
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts

View File

@ -27,7 +27,7 @@ pip install pyassimp
## Manual build instructions ## Manual build instructions
### Install CMake ### Install CMake
Asset-Importer-Lib can be build for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via Asset-Importer-Lib can be built for a lot of different platforms. We are using cmake to generate the build environment for these via cmake. So you have to make sure that you have a working cmake-installation on your system. You can download it at https://cmake.org/ or for linux install it via
```bash ```bash
sudo apt-get install cmake sudo apt-get install cmake
``` ```
@ -46,12 +46,12 @@ cmake --build .
### Build instructions for Windows with Visual-Studio ### Build instructions for Windows with Visual-Studio
First you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/ First, you have to install Visual-Studio on your windows-system. You can get the Community-Version for free here: https://visualstudio.microsoft.com/de/downloads/
To generate the build environment for your IDE open a command prompt, navigate to your repo and type: To generate the build environment for your IDE open a command prompt, navigate to your repo and type:
```bash ```bash
cmake CMakeLists.txt cmake CMakeLists.txt
``` ```
This will generate the project files for the visual studio. All dependencies used to build Asset-IMporter-Lib shall be part of the repo. If you want to use you own zlib.installation this is possible as well. Check the options for it. This will generate the project files for the visual studio. All dependencies used to build Asset-Importer-Lib shall be part of the repo. If you want to use you own zlib installation this is possible as well. Check the options for it.
### Build instructions for Windows with UWP ### Build instructions for Windows with UWP
See <https://stackoverflow.com/questions/40803170/cmake-uwp-using-cmake-to-build-universal-windows-app> See <https://stackoverflow.com/questions/40803170/cmake-uwp-using-cmake-to-build-universal-windows-app>
@ -63,9 +63,9 @@ Open a terminal and got to your repository. You can generate the makefiles and b
cmake CMakeLists.txt cmake CMakeLists.txt
make -j4 make -j4
``` ```
The option -j descripes the number of parallel processes for the build. In this case make will try to use 4 cores for the build. The option -j describes the number of parallel processes for the build. In this case make will try to use 4 cores for the build.
If you want to use a IDE for linux you can try QTCreator for instance. If you want to use an IDE for linux you can try QTCreator for instance.
### Build instructions for MinGW ### Build instructions for MinGW
Older versions of MinGW's compiler (e.g. 5.1.0) do not support the -mbig_obj flag Older versions of MinGW's compiler (e.g. 5.1.0) do not support the -mbig_obj flag
@ -93,8 +93,8 @@ The cmake-build-environment provides options to configure the build. The followi
- **ASSIMP_ANDROID_JNIIOSYSTEM (default OFF)**: Android JNI IOSystem support is active. - **ASSIMP_ANDROID_JNIIOSYSTEM (default OFF)**: Android JNI IOSystem support is active.
- **ASSIMP_NO_EXPORT (default OFF)**: Disable Assimp's export functionality. - **ASSIMP_NO_EXPORT (default OFF)**: Disable Assimp's export functionality.
- **ASSIMP_BUILD_ZLIB (default OFF)**: Build our own zlib. - **ASSIMP_BUILD_ZLIB (default OFF)**: Build our own zlib.
- **ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all exporter senabled. - **ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all exporters enabled.
- **ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all importer senabled. - **ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT (default ON)**: Build Assimp with all importers enabled.
- **ASSIMP_BUILD_ASSIMP_TOOLS (default OFF)**: If the supplementary tools for Assimp are built in addition to the library. - **ASSIMP_BUILD_ASSIMP_TOOLS (default OFF)**: If the supplementary tools for Assimp are built in addition to the library.
- **ASSIMP_BUILD_SAMPLES (default OFF)**: If the official samples are built as well (needs Glut). - **ASSIMP_BUILD_SAMPLES (default OFF)**: If the official samples are built as well (needs Glut).
- **ASSIMP_BUILD_TESTS (default ON)**: If the test suite for Assimp is built in addition to the library. - **ASSIMP_BUILD_TESTS (default ON)**: If the test suite for Assimp is built in addition to the library.

View File

@ -404,8 +404,13 @@ void MDLImporter::InternReadFile_Quake1() {
this->CreateTextureARGB8_3DGS_MDL3(szCurrent + iNumImages * sizeof(float)); this->CreateTextureARGB8_3DGS_MDL3(szCurrent + iNumImages * sizeof(float));
} }
// go to the end of the skin section / the beginning of the next skin // go to the end of the skin section / the beginning of the next skin
szCurrent += pcHeader->skinheight * pcHeader->skinwidth + bool overflow = false;
sizeof(float) * iNumImages; if ((pcHeader->skinheight > INT_MAX / pcHeader->skinwidth) || (pcHeader->skinwidth > INT_MAX / pcHeader->skinheight)){
overflow = true;
}
if (!overflow) {
szCurrent += pcHeader->skinheight * pcHeader->skinwidth +sizeof(float) * iNumImages;
}
} }
} else { } else {
szCurrent += sizeof(uint32_t); szCurrent += sizeof(uint32_t);

View File

@ -52,6 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* KHR_materials_transmission full * KHR_materials_transmission full
* KHR_materials_volume full * KHR_materials_volume full
* KHR_materials_ior full * KHR_materials_ior full
* KHR_materials_emissive_strength full
*/ */
#ifndef GLTF2ASSET_H_INC #ifndef GLTF2ASSET_H_INC
#define GLTF2ASSET_H_INC #define GLTF2ASSET_H_INC
@ -813,6 +814,13 @@ struct MaterialIOR {
void SetDefaults(); void SetDefaults();
}; };
struct MaterialEmissiveStrength {
float emissiveStrength = 0.f;
MaterialEmissiveStrength() { SetDefaults(); }
void SetDefaults();
};
//! The material appearance of a primitive. //! The material appearance of a primitive.
struct Material : public Object { struct Material : public Object {
//PBR metallic roughness properties //PBR metallic roughness properties
@ -848,6 +856,9 @@ struct Material : public Object {
//extension: KHR_materials_ior //extension: KHR_materials_ior
Nullable<MaterialIOR> materialIOR; Nullable<MaterialIOR> materialIOR;
//extension: KHR_materials_emissive_strength
Nullable<MaterialEmissiveStrength> materialEmissiveStrength;
//extension: KHR_materials_unlit //extension: KHR_materials_unlit
bool unlit; bool unlit;
@ -1122,6 +1133,7 @@ public:
bool KHR_materials_transmission; bool KHR_materials_transmission;
bool KHR_materials_volume; bool KHR_materials_volume;
bool KHR_materials_ior; bool KHR_materials_ior;
bool KHR_materials_emissive_strength;
bool KHR_draco_mesh_compression; bool KHR_draco_mesh_compression;
bool FB_ngon_encoding; bool FB_ngon_encoding;
bool KHR_texture_basisu; bool KHR_texture_basisu;
@ -1137,6 +1149,7 @@ public:
KHR_materials_transmission(false), KHR_materials_transmission(false),
KHR_materials_volume(false), KHR_materials_volume(false),
KHR_materials_ior(false), KHR_materials_ior(false),
KHR_materials_emissive_strength(false),
KHR_draco_mesh_compression(false), KHR_draco_mesh_compression(false),
FB_ngon_encoding(false), FB_ngon_encoding(false),
KHR_texture_basisu(false) { KHR_texture_basisu(false) {

View File

@ -1326,6 +1326,16 @@ inline void Material::Read(Value &material, Asset &r) {
} }
} }
if (r.extensionsUsed.KHR_materials_emissive_strength) {
if (Value *curMaterialEmissiveStrength = FindObject(*extensions, "KHR_materials_emissive_strength")) {
MaterialEmissiveStrength emissiveStrength;
ReadMember(*curMaterialEmissiveStrength, "emissiveStrength", emissiveStrength.emissiveStrength);
this->materialEmissiveStrength = Nullable<MaterialEmissiveStrength>(emissiveStrength);
}
}
unlit = nullptr != FindObject(*extensions, "KHR_materials_unlit"); unlit = nullptr != FindObject(*extensions, "KHR_materials_unlit");
} }
} }
@ -1374,6 +1384,11 @@ inline void MaterialIOR::SetDefaults() {
ior = 1.5f; ior = 1.5f;
} }
inline void MaterialEmissiveStrength::SetDefaults() {
//KHR_materials_emissive_strength properties
emissiveStrength = 0.f;
}
inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) { inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) {
Value *curName = FindMember(pJSON_Object, "name"); Value *curName = FindMember(pJSON_Object, "name");
if (nullptr != curName && curName->IsString()) { if (nullptr != curName && curName->IsString()) {
@ -2046,6 +2061,7 @@ inline void Asset::ReadExtensionsUsed(Document &doc) {
CHECK_EXT(KHR_materials_transmission); CHECK_EXT(KHR_materials_transmission);
CHECK_EXT(KHR_materials_volume); CHECK_EXT(KHR_materials_volume);
CHECK_EXT(KHR_materials_ior); CHECK_EXT(KHR_materials_ior);
CHECK_EXT(KHR_materials_emissive_strength);
CHECK_EXT(KHR_draco_mesh_compression); CHECK_EXT(KHR_draco_mesh_compression);
CHECK_EXT(KHR_texture_basisu); CHECK_EXT(KHR_texture_basisu);

View File

@ -52,6 +52,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* KHR_materials_transmission: full * KHR_materials_transmission: full
* KHR_materials_volume: full * KHR_materials_volume: full
* KHR_materials_ior: full * KHR_materials_ior: full
* KHR_materials_emissive_strength: full
*/ */
#ifndef GLTF2ASSETWRITER_H_INC #ifndef GLTF2ASSETWRITER_H_INC
#define GLTF2ASSETWRITER_H_INC #define GLTF2ASSETWRITER_H_INC

View File

@ -531,6 +531,20 @@ namespace glTF2 {
} }
} }
if (m.materialEmissiveStrength.isPresent) {
Value materialEmissiveStrength(rapidjson::Type::kObjectType);
MaterialEmissiveStrength &emissiveStrength = m.materialEmissiveStrength.value;
if (emissiveStrength.emissiveStrength != 0.f) {
WriteFloat(materialEmissiveStrength, emissiveStrength.emissiveStrength, "emissiveStrength", w.mAl);
}
if (!materialEmissiveStrength.ObjectEmpty()) {
exts.AddMember("KHR_materials_emissive_strength", materialEmissiveStrength, w.mAl);
}
}
if (!exts.ObjectEmpty()) { if (!exts.ObjectEmpty()) {
obj.AddMember("extensions", exts, w.mAl); obj.AddMember("extensions", exts, w.mAl);
} }
@ -959,6 +973,10 @@ namespace glTF2 {
exts.PushBack(StringRef("KHR_materials_ior"), mAl); exts.PushBack(StringRef("KHR_materials_ior"), mAl);
} }
if (this->mAsset.extensionsUsed.KHR_materials_emissive_strength) {
exts.PushBack(StringRef("KHR_materials_emissive_strength"), mAl);
}
if (this->mAsset.extensionsUsed.FB_ngon_encoding) { if (this->mAsset.extensionsUsed.FB_ngon_encoding) {
exts.PushBack(StringRef("FB_ngon_encoding"), mAl); exts.PushBack(StringRef("FB_ngon_encoding"), mAl);
} }

View File

@ -754,6 +754,10 @@ bool glTF2Exporter::GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior) {
return mat.Get(AI_MATKEY_REFRACTI, ior.ior) == aiReturn_SUCCESS; return mat.Get(AI_MATKEY_REFRACTI, ior.ior) == aiReturn_SUCCESS;
} }
bool glTF2Exporter::GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength) {
return mat.Get(AI_MATKEY_EMISSIVE_INTENSITY, emissiveStrength.emissiveStrength) == aiReturn_SUCCESS;
}
void glTF2Exporter::ExportMaterials() { void glTF2Exporter::ExportMaterials() {
aiString aiName; aiString aiName;
for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) { for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) {
@ -889,6 +893,12 @@ void glTF2Exporter::ExportMaterials() {
mAsset->extensionsUsed.KHR_materials_ior = true; mAsset->extensionsUsed.KHR_materials_ior = true;
m->materialIOR = Nullable<MaterialIOR>(ior); m->materialIOR = Nullable<MaterialIOR>(ior);
} }
MaterialEmissiveStrength emissiveStrength;
if (GetMatEmissiveStrength(mat, emissiveStrength)) {
mAsset->extensionsUsed.KHR_materials_emissive_strength = true;
m->materialEmissiveStrength = Nullable<MaterialEmissiveStrength>(emissiveStrength);
}
} }
} }
} }

View File

@ -82,6 +82,7 @@ struct MaterialClearcoat;
struct MaterialTransmission; struct MaterialTransmission;
struct MaterialVolume; struct MaterialVolume;
struct MaterialIOR; struct MaterialIOR;
struct MaterialEmissiveStrength;
// Vec/matrix types, as raw float arrays // Vec/matrix types, as raw float arrays
typedef float(vec2)[2]; typedef float(vec2)[2];
@ -123,6 +124,7 @@ protected:
bool GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTransmission &transmission); bool GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTransmission &transmission);
bool GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume); bool GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume);
bool GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior); bool GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior);
bool GetMatEmissiveStrength(const aiMaterial &mat, glTF2::MaterialEmissiveStrength &emissiveStrength);
void ExportMetadata(); void ExportMetadata();
void ExportMaterials(); void ExportMaterials();
void ExportMeshes(); void ExportMeshes();

View File

@ -370,6 +370,13 @@ static aiMaterial *ImportMaterial(std::vector<int> &embeddedTexIdxs, Asset &r, M
aimat->AddProperty(&ior.ior, 1, AI_MATKEY_REFRACTI); aimat->AddProperty(&ior.ior, 1, AI_MATKEY_REFRACTI);
} }
// KHR_materials_emissive_strength
if (mat.materialEmissiveStrength.isPresent) {
MaterialEmissiveStrength &emissiveStrength = mat.materialEmissiveStrength.value;
aimat->AddProperty(&emissiveStrength.emissiveStrength, 1, AI_MATKEY_EMISSIVE_INTENSITY);
}
return aimat; return aimat;
} catch (...) { } catch (...) {
delete aimat; delete aimat;