Add support for bump -bm (bump/normal multiplier)
parent
dff3620138
commit
17123ed4a1
|
@ -195,6 +195,9 @@ struct Material {
|
||||||
//! PBR Anisotropy
|
//! PBR Anisotropy
|
||||||
ai_real anisotropy;
|
ai_real anisotropy;
|
||||||
|
|
||||||
|
//! bump map multipler (normal map scalar)(-bm)
|
||||||
|
ai_real bump_multiplier;
|
||||||
|
|
||||||
//! Constructor
|
//! Constructor
|
||||||
Material() :
|
Material() :
|
||||||
diffuse(ai_real(0.6), ai_real(0.6), ai_real(0.6)),
|
diffuse(ai_real(0.6), ai_real(0.6), ai_real(0.6)),
|
||||||
|
@ -208,7 +211,8 @@ struct Material {
|
||||||
sheen(ai_real(1.0), ai_real(1.0), ai_real(1.0)),
|
sheen(ai_real(1.0), ai_real(1.0), ai_real(1.0)),
|
||||||
clearcoat_thickness(ai_real(0.0)),
|
clearcoat_thickness(ai_real(0.0)),
|
||||||
clearcoat_roughness(ai_real(0.0)),
|
clearcoat_roughness(ai_real(0.0)),
|
||||||
anisotropy(ai_real(0.0)) {
|
anisotropy(ai_real(0.0)),
|
||||||
|
bump_multiplier(ai_real(1.0)) {
|
||||||
std::fill_n(clamp, static_cast<unsigned int>(TextureTypeCount), false);
|
std::fill_n(clamp, static_cast<unsigned int>(TextureTypeCount), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#include <assimp/scene.h>
|
#include <assimp/scene.h>
|
||||||
#include <assimp/DefaultLogger.hpp>
|
#include <assimp/DefaultLogger.hpp>
|
||||||
#include <assimp/Importer.hpp>
|
#include <assimp/Importer.hpp>
|
||||||
|
#include <assimp/ObjMaterial.h>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
static const aiImporterDesc desc = {
|
static const aiImporterDesc desc = {
|
||||||
|
@ -657,6 +658,9 @@ void ObjFileImporter::createMaterials(const ObjFile::Model *pModel, aiScene *pSc
|
||||||
if (0 != pCurrentMaterial->textureBump.length) {
|
if (0 != pCurrentMaterial->textureBump.length) {
|
||||||
mat->AddProperty(&pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0));
|
mat->AddProperty(&pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0));
|
||||||
mat->AddProperty(&uvwIndex, 1, AI_MATKEY_UVWSRC_HEIGHT(0));
|
mat->AddProperty(&uvwIndex, 1, AI_MATKEY_UVWSRC_HEIGHT(0));
|
||||||
|
if (pCurrentMaterial->bump_multiplier != 1.0) {
|
||||||
|
mat->AddProperty(&pCurrentMaterial->bump_multiplier, 1, AI_MATKEY_OBJ_BUMPMULT_HEIGHT(0));
|
||||||
|
}
|
||||||
if (pCurrentMaterial->clamp[ObjFile::Material::TextureBumpType]) {
|
if (pCurrentMaterial->clamp[ObjFile::Material::TextureBumpType]) {
|
||||||
addTextureMappingModeProperty(mat, aiTextureType_HEIGHT);
|
addTextureMappingModeProperty(mat, aiTextureType_HEIGHT);
|
||||||
}
|
}
|
||||||
|
@ -665,6 +669,9 @@ void ObjFileImporter::createMaterials(const ObjFile::Model *pModel, aiScene *pSc
|
||||||
if (0 != pCurrentMaterial->textureNormal.length) {
|
if (0 != pCurrentMaterial->textureNormal.length) {
|
||||||
mat->AddProperty(&pCurrentMaterial->textureNormal, AI_MATKEY_TEXTURE_NORMALS(0));
|
mat->AddProperty(&pCurrentMaterial->textureNormal, AI_MATKEY_TEXTURE_NORMALS(0));
|
||||||
mat->AddProperty(&uvwIndex, 1, AI_MATKEY_UVWSRC_NORMALS(0));
|
mat->AddProperty(&uvwIndex, 1, AI_MATKEY_UVWSRC_NORMALS(0));
|
||||||
|
if (pCurrentMaterial->bump_multiplier != 1.0) {
|
||||||
|
mat->AddProperty(&pCurrentMaterial->bump_multiplier, 1, AI_MATKEY_OBJ_BUMPMULT_NORMALS(0));
|
||||||
|
}
|
||||||
if (pCurrentMaterial->clamp[ObjFile::Material::TextureNormalType]) {
|
if (pCurrentMaterial->clamp[ObjFile::Material::TextureNormalType]) {
|
||||||
addTextureMappingModeProperty(mat, aiTextureType_NORMALS);
|
addTextureMappingModeProperty(mat, aiTextureType_NORMALS);
|
||||||
}
|
}
|
||||||
|
|
|
@ -472,7 +472,11 @@ void ObjFileMtlImporter::getTextureOption(bool &clamp, int &clampIndex, aiString
|
||||||
}
|
}
|
||||||
|
|
||||||
skipToken = 2;
|
skipToken = 2;
|
||||||
} else if (!ASSIMP_strincmp(pPtr, BlendUOption.c_str(), static_cast<unsigned int>(BlendUOption.size())) || !ASSIMP_strincmp(pPtr, BlendVOption.c_str(), static_cast<unsigned int>(BlendVOption.size())) || !ASSIMP_strincmp(pPtr, BoostOption.c_str(), static_cast<unsigned int>(BoostOption.size())) || !ASSIMP_strincmp(pPtr, ResolutionOption.c_str(), static_cast<unsigned int>(ResolutionOption.size())) || !ASSIMP_strincmp(pPtr, BumpOption.c_str(), static_cast<unsigned int>(BumpOption.size())) || !ASSIMP_strincmp(pPtr, ChannelOption.c_str(), static_cast<unsigned int>(ChannelOption.size()))) {
|
} else if (!ASSIMP_strincmp(pPtr, BumpOption.c_str(), static_cast<unsigned int>(BumpOption.size()))) {
|
||||||
|
DataArrayIt it = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
|
||||||
|
getFloat(it, m_DataItEnd, m_pModel->m_pCurrentMaterial->bump_multiplier);
|
||||||
|
skipToken = 2;
|
||||||
|
} else if (!ASSIMP_strincmp(pPtr, BlendUOption.c_str(), static_cast<unsigned int>(BlendUOption.size())) || !ASSIMP_strincmp(pPtr, BlendVOption.c_str(), static_cast<unsigned int>(BlendVOption.size())) || !ASSIMP_strincmp(pPtr, BoostOption.c_str(), static_cast<unsigned int>(BoostOption.size())) || !ASSIMP_strincmp(pPtr, ResolutionOption.c_str(), static_cast<unsigned int>(ResolutionOption.size())) || !ASSIMP_strincmp(pPtr, ChannelOption.c_str(), static_cast<unsigned int>(ChannelOption.size()))) {
|
||||||
skipToken = 2;
|
skipToken = 2;
|
||||||
} else if (!ASSIMP_strincmp(pPtr, ModifyMapOption.c_str(), static_cast<unsigned int>(ModifyMapOption.size()))) {
|
} else if (!ASSIMP_strincmp(pPtr, ModifyMapOption.c_str(), static_cast<unsigned int>(ModifyMapOption.size()))) {
|
||||||
skipToken = 3;
|
skipToken = 3;
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2022, assimp team
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
with or without modification, are permitted provided that the following
|
||||||
|
conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior
|
||||||
|
written permission of the assimp team.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @file OBJMATERIAL.h
|
||||||
|
* @brief Obj-specific material macros
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef AI_OBJMATERIAL_H_INC
|
||||||
|
#define AI_OBJMATERIAL_H_INC
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
# pragma GCC system_header
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <assimp/material.h>
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
// Pure key names for all obj texture-related properties
|
||||||
|
//! @cond MATS_DOC_FULL
|
||||||
|
|
||||||
|
// support for bump -bm
|
||||||
|
#define _AI_MATKEY_OBJ_BUMPMULT_BASE "$tex.bumpmult"
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
#define AI_MATKEY_OBJ_BUMPMULT(type, N) _AI_MATKEY_OBJ_BUMPMULT_BASE, type, N
|
||||||
|
|
||||||
|
//! @cond MATS_DOC_FULL
|
||||||
|
#define AI_MATKEY_OBJ_BUMPMULT_NORMALS(N) \
|
||||||
|
AI_MATKEY_OBJ_BUMPMULT(aiTextureType_NORMALS, N)
|
||||||
|
|
||||||
|
#define AI_MATKEY_OBJ_BUMPMULT_HEIGHT(N) \
|
||||||
|
AI_MATKEY_OBJ_BUMPMULT(aiTextureType_HEIGHT, N)
|
||||||
|
|
||||||
|
//! @endcond
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue