Hi,
I am unable to import textures applied on a 3D model FBX file, if it has a version below FBX version 7.0. Other geometry is imported properly but the textures go missing. If file with FBX version 7.0 and above used, textures do get imported.
The Supported Formats list for import mentions that version 6.0 and 6.1 are supported.
This looks to be a regression as an earlier version of FBX SDK like 2019.2 is in fact able to convert textures from such files.
Is there any other way of getting textures? Or if this is an issue with the current version, can we get a timeframe when will it be fixed?
Reporting for -
FBX SDK version : 2020.1.1
Please find attached -
Text dump of output provided by ImportScene sample shipped with FBX SDK version 2020.1.1 and 2019.2. The FBX file (FBX version 6.1) is also attached. It can be seen that the texture information is missing.
Hi,
I am unable to import textures applied on a 3D model FBX file, if it has a version below FBX version 7.0. Other geometry is imported properly but the textures go missing. If file with FBX version 7.0 and above used, textures do get imported.
The Supported Formats list for import mentions that version 6.0 and 6.1 are supported.
This looks to be a regression as an earlier version of FBX SDK like 2019.2 is in fact able to convert textures from such files.
Is there any other way of getting textures? Or if this is an issue with the current version, can we get a timeframe when will it be fixed?
Reporting for -
FBX SDK version : 2020.1.1
Please find attached -
Text dump of output provided by ImportScene sample shipped with FBX SDK version 2020.1.1 and 2019.2. The FBX file (FBX version 6.1) is also attached. It can be seen that the texture information is missing.
We observe the same issue. To be a little more specific we can read textures from FBX files with version 6.1 but not with version 6.0.
I compared the binary FBX files but couldn't make out any obvious reasons from the node hiearachy. But as binary FBX files are not easily edited I didn't get a chance at trying what might be the reason.
If it's interesting for anyone I could also upload the node hierarchies (as .txt) of a 6.0 and a 6.1 file for comparison.
We observe the same issue. To be a little more specific we can read textures from FBX files with version 6.1 but not with version 6.0.
I compared the binary FBX files but couldn't make out any obvious reasons from the node hiearachy. But as binary FBX files are not easily edited I didn't get a chance at trying what might be the reason.
If it's interesting for anyone I could also upload the node hierarchies (as .txt) of a 6.0 and a 6.1 file for comparison.
Oh man... I just found a workaround.
In fbxiosettingspath.h there is the flag IMP_RELAXED_FBX_CHECK. If you set this to true in your FbxIOSettings it will still read the texture for me.
I don't think this is the intended use as the flag is listed under "interal" but it works nonetheless.
Oh man... I just found a workaround.
In fbxiosettingspath.h there is the flag IMP_RELAXED_FBX_CHECK. If you set this to true in your FbxIOSettings it will still read the texture for me.
I don't think this is the intended use as the flag is listed under "interal" but it works nonetheless.
We have already fixed this issue and the next release of the FBX SDK will work as expected.
The regression was introduced during the last pass to strengthen the security of the FBX SDK. You can use the IMP_RELAXED_FBX_CHECK to instruct the SDK to skip all theses tests and disable the detection of corrupted or malformed files. If you know for sure that the FBX files you are reading are all "clean", it is 100% safe to use it! 🙂
We have already fixed this issue and the next release of the FBX SDK will work as expected.
The regression was introduced during the last pass to strengthen the security of the FBX SDK. You can use the IMP_RELAXED_FBX_CHECK to instruct the SDK to skip all theses tests and disable the detection of corrupted or malformed files. If you know for sure that the FBX files you are reading are all "clean", it is 100% safe to use it! 🙂
Hi Regalir
Thanks for aknowledging the regression and the fix.
We cannot guarantee that the FBX files are 100% valid. Our clients can use any FBX files they have lying around.
Is there any workaround to get the textures and the correctness guarantees?
Best,
Stefan
Hi Regalir
Thanks for aknowledging the regression and the fix.
We cannot guarantee that the FBX files are 100% valid. Our clients can use any FBX files they have lying around.
Is there any workaround to get the textures and the correctness guarantees?
Best,
Stefan
Unfortunately, until we release the new version of the FBX SDK, there is no alternative solution. I don't have an official date for this release but, at the moment, it looks like it will probably happen Dec. 2020.
As I said earlier, using the flag is still safe for the majority of the files. Practically, the flag switches the SDK behavior to what it was on previous versions (only concerning the validation checks!).
Unfortunately, until we release the new version of the FBX SDK, there is no alternative solution. I don't have an official date for this release but, at the moment, it looks like it will probably happen Dec. 2020.
As I said earlier, using the flag is still safe for the majority of the files. Practically, the flag switches the SDK behavior to what it was on previous versions (only concerning the validation checks!).
Ok. Thanks! We'll check which way we will go then.
Ok. Thanks! We'll check which way we will go then.
Hey Regalir
I have another question related to this problem.
Is there any way to collect information on what was discarded when reading/checking a file?
E.g. a logging mechanism or such...
We're trying to tell our users why some aspects of a file are not imported and such functionality would help with that.
Thanks a lot,
Stefan
Hey Regalir
I have another question related to this problem.
Is there any way to collect information on what was discarded when reading/checking a file?
E.g. a logging mechanism or such...
We're trying to tell our users why some aspects of a file are not imported and such functionality would help with that.
Thanks a lot,
Stefan
Yes there is! 😉
If you look at the common.cxx file (in the samples code) you will notice a block of code that dumps all the errors that occurred during the import of the file using the FbxStatus class:
FbxArray<FbxString*> history;
lImporter->GetStatus().GetErrorStringHistory(history);
...
If you disable the checks (as we discussed earlier) using the RELAXED check flag, you can then "scan" the scene graph after it gets imported to validate the data. You can do this using the FbxSceneCheckUtility class:
lResult = mImporter->Import(mScene);
if (lResult)
{
// Check the scene integrity!
FbxStatus status;
FbxArray< FbxString*> details;
FbxSceneCheckUtility sceneCheck(mScene), &status, &details);
bool lNotify = (!sceneCheck.Validate(FbxSceneCheckUtility::eCkeckData) && details.GetCount() > 0) || (mImporter->GetStatus().GetCode() != FbxStatus::eSuccess);
if (lNotify)
{
...
Yes there is! 😉
If you look at the common.cxx file (in the samples code) you will notice a block of code that dumps all the errors that occurred during the import of the file using the FbxStatus class:
FbxArray<FbxString*> history;
lImporter->GetStatus().GetErrorStringHistory(history);
...
If you disable the checks (as we discussed earlier) using the RELAXED check flag, you can then "scan" the scene graph after it gets imported to validate the data. You can do this using the FbxSceneCheckUtility class:
lResult = mImporter->Import(mScene);
if (lResult)
{
// Check the scene integrity!
FbxStatus status;
FbxArray< FbxString*> details;
FbxSceneCheckUtility sceneCheck(mScene), &status, &details);
bool lNotify = (!sceneCheck.Validate(FbxSceneCheckUtility::eCkeckData) && details.GetCount() > 0) || (mImporter->GetStatus().GetCode() != FbxStatus::eSuccess);
if (lNotify)
{
...
Can't find what you're looking for? Ask the community or share your knowledge.