[FBX-SDK 2020.1.1] Unable to import texture information from FBX file of version below 7.0

wppdev
Contributor
Contributor

[FBX-SDK 2020.1.1] Unable to import texture information from FBX file of version below 7.0

wppdev
Contributor
Contributor

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.

Reply
1,511 Views
8 Replies
Replies (8)

Anonymous
Not applicable

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.

0 Likes

Anonymous
Not applicable

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.

0 Likes

regalir
Autodesk
Autodesk

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! 🙂

0 Likes

Anonymous
Not applicable

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

0 Likes

regalir
Autodesk
Autodesk

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!).

0 Likes

Anonymous
Not applicable

Ok. Thanks! We'll check which way we will go then.

0 Likes

Anonymous
Not applicable

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

0 Likes

regalir
Autodesk
Autodesk

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)
    {
        ...

 

0 Likes