Assimp-based model import and the MonkeyWrench library

original glb is 45MB
the saved j3o is 152MB

Does .glb never have a separate .bin file?

Anyway, we might need to know more about the model, embedded textures, etc…

This is the model (glb):

I’m not sure what is the bin file. When I export from blender it saves everything in a single glb file

I will try to load it (the glb) without MonkeyWrench and then save it as j3o to see if it’s MW that causes it to be so big. Then, I’ll try several other files (all glb in my case) and see if it’s consistent. If the converted j3o files always way bigger than the glbs maybe I’ll prefer using glbs after all.

Hi @sgold ,
I am doing some testing with MonkeyWrench. I noticed that compared to the stock jme3-gltf-loader, MonkeyWrench does not load gltf files having an AnimComposer, but no skeleton. Could this be fixed please?

Here is how the gltf file containing only the animation is displayed in the SDK:

Here is the stacktrace from MonkeyWrench:

Info,  T15144: Load Models/Zombiegirl/Running.gltf
Debug, T15144: Assimp 5.2.2250552897 amd64 msvc shared singlethreadedsingle : 
Info,  T15144: Found a possible importer: glTF Importer; trying signature-based detection
Info,  T15144: Found a possible importer: glTF2 Importer; trying signature-based detection
Debug, T15144: Loading GLTF2 asset
Debug, T15144: Parsing GLTF2 JSON
Info,  T15144: Found a matching importer for this file format: glTF2 Importer.
Info,  T15144: Import root directory is 'Models/Zombiegirl\'
Debug, T15144: Reading GLTF2 file
Debug, T15144: Loading GLTF2 asset
Debug, T15144: Parsing GLTF2 JSON
Debug, T15144: Importing 0 materials
Debug, T15144: Importing 0 meshes
Debug, T15144: Importing nodes
Debug, T15144: Importing 1 animations
Debug, T15144: Importing metadata
Debug, T15144: UpdateImporterScale scale set: 1
Debug, T15144: ValidateDataStructureProcess begin
Debug, T15144: ValidateDataStructureProcess end
Info,  T15144: Entering post processing pipeline
Debug, T15144: RemoveRedundantMatsProcess begin
Error, T15144: No materials remaining
Info,  T15144: Leaving post processing pipeline
java.io.IOException: Assimp failed to import an asset from "Models/Zombiegirl/Running.gltf":
 No materials remaining
	at com.github.stephengold.wrench.LwjglAssetLoader.loadScene(LwjglAssetLoader.java:144)
	at com.github.stephengold.wrench.LwjglAssetLoader.load(LwjglAssetLoader.java:95)
	at com.jme3.asset.DesktopAssetManager.loadLocatedAsset(DesktopAssetManager.java:272)
	at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:388)
	at com.jme3.asset.DesktopAssetManager.loadModel(DesktopAssetManager.java:439)
	at com.capdevon.test.Test_AssetManager.simpleInitApp(Test_AssetManager.java:69)
	at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:240)
	at com.jme3.system.lwjgl.LwjglWindow.initInThread(LwjglWindow.java:607)
	at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:710)
	at java.base/java.lang.Thread.run(Thread.java:834)
gen 19, 2024 6:50:43 PM com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.asset.AssetLoadException: An exception has occurred while loading asset: Models/Zombiegirl/Running.gltf
	at com.jme3.asset.DesktopAssetManager.loadLocatedAsset(DesktopAssetManager.java:274)
	at com.jme3.asset.DesktopAssetManager.loadAsset(DesktopAssetManager.java:388)
	at com.jme3.asset.DesktopAssetManager.loadModel(DesktopAssetManager.java:439)
	at com.capdevon.test.Test_AssetManager.simpleInitApp(Test_AssetManager.java:69)
	at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:240)
	at com.jme3.system.lwjgl.LwjglWindow.initInThread(LwjglWindow.java:607)
	at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:710)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Assimp failed to import an asset from "Models/Zombiegirl/Running.gltf":
 No materials remaining
	at com.github.stephengold.wrench.LwjglAssetLoader.loadScene(LwjglAssetLoader.java:144)
	at com.github.stephengold.wrench.LwjglAssetLoader.load(LwjglAssetLoader.java:95)
	at com.jme3.asset.DesktopAssetManager.loadLocatedAsset(DesktopAssetManager.java:272)
	... 7 more

Let me know if you need more information, or if you need the gltf file for testing.
Thank you.

1 Like

Thanks for reporting the issue.

I’m up to my ears in physics code right now, but I’ve created a GitHub issue as a reminder to investigate at a later date.

I’m unsure whether I’ll want the glTF file. I’ll get back to you if I do.

2 Likes

@capdevon
It seems I’d begun re-writing the relevant part of MonkeyWrench when I stopped work in December. It would be helpful if I had a copy of your “Running.gltf” model to experiment with.

2 Likes

Hi @sgold , thanks for your time. Here is the file:

2 Likes

Thank you @capdevon for pointing me to this interesting bug!

The error message “No materials remaining” is generated by Assimp’s “RemoveRedundantMaterials” post-processing step. I believe it indicates a bug in this code:

For a workaround, try skipping the buggy step by configuring the AssetKey without the Assimp.aiProcess_RemoveRedundantMaterials flag, like so:

    int ppFlags = Assimp.aiProcess_CalcTangentSpace
            | Assimp.aiProcess_JoinIdenticalVertices
            | Assimp.aiProcess_Triangulate
            | Assimp.aiProcess_ValidateDataStructure
            | Assimp.aiProcess_SortByPType;
    LwjglAssetKey key = new LwjglAssetKey("Models/Zombiegirl/Running.gltf", ppFlags);
    Spatial m = assetManager.loadModel(key);

Let me know whether (or not) that works for you.

I’ll submit an issue to the Assimp project and perhaps attempt a fix.

EDIT:

3 Likes

Thank you @sgold , your explanations are always clear and technically accurate!
I configured the flags as you suggested and now it works.

The interesting result is that the 3D model loaded with MW contains both AnimComposer and SkinningControl, while using jme’s default gltf plugin the resulting 3D model contains only AnimComposer. This is not a problem for my pipeline, since jme3 handles both Node and Joint animation targets and therefore I can extract information from both structures.

PS: I hope your solution will be accepted by the Assimp project.

I am testing MonkeyWrench to see what structural differences there are with the jme3-core series loader.
Here are the structural differences between the SDK and my Model Viewer:

  • SDK (left) - My Model Viewer (right)

1 Like

Status update for the MonkeyWrench project:

  • Regarding the issue of incorrect positioning of Erika’s eyeballs:

I remain convinced this is caused by a bug in Mixamo’s DAE conversion.

To work around that bug, I began implementing bind-pose editing in Maud, but it proved much harder than I expected. Then (in December) I took a break from software development, due to health issues. When I returned (in January) I chose to work on Minie instead, which largely explains why there’s been so little progress here.

  • Regarding the crash while importing @capdevon’s model:

My efforts to solve Assimp issue 5438 haven’t been very successful.

After opening the issue on 25 January, I submitted a solution (PR 5439) that same day. I never got any feedback on that PR.

There seems to be only one person at the Assimp project who integrates PRs: kimkulling. On 1 February, Kim wrote and integrated his own solution (PR 5451) for the issue. Due to the resulting merge conflicts, my solution could no longer be integrated. Furthermore, the issue it addressed was officially closed, so I abandoned PR 5439.

When I tested the merged code on @capdevon’s file, the test application crashed due to an inconsistency created by PR 5451. On 11 February, I opened issue (5461) for the new crash. After some encouragement from kimkulling, I submitted a one-line fix (PR 5467) for the new crash, on 17 February.

Kim reviewed PR 5467 the next day. During the review, he found and solved a couple memory leaks. (Those leaks were introduced by PR 5451, not by me.) His changes to solve the leaks caused the project’s automated tests to be re-run and they failed.

I don’t understand the reason(s) for the test failures. Both Kim and I tried to reproduce them and were unsuccessful. On 28 February and again on 5 March, I triggered merges from “master” into my PR 5467 branch. The first merge seemed to resolve the test failures, but they returned after the second merge. The PR process at Assimp drags on.

It seems it may be a long time before Assimp can correctly process capdevon’s model. I can only hope the fix gets integrated in time for the 3.3.4 release of LWJGL. (So far there have been 3 snapshot builds; I have no idea how close LWJGL project is to a release.)

5 Likes

Thanks for the update @sgold , the quality of your explanations is something we should all strive for.
I noticed that Erika’s model on the Mixamo site has been changed in the last few months, I couldn’t say exactly when. They updated the model by adding a bow and arrow.

This is the model before:

This is the model after (with Bow/Arrow):
The arrow is at the base of the model, between the legs.

Comparing the new model with the old one, I noticed some imperfections when applying the ‘Idle’ animation that were already there before. The fingers of the hands are strangely distorted by the animation.

image

Left Hand:

Right Hand:

The ‘Idle’ animation on the YBot has no defect.

This may support your hypothesis that the eye problem is dependent on the dae model. Sometimes the original models already have problems.

Note: All screenshots are from the Mixamo website

3 Likes

Thank you @capdevon for your observations regarding Erika.
Despite the many difficulties, I plan to return to the MonkeyWrench project soon.

3 Likes

Hi @sgold ,
I am doing some tests with MonkeyWrench and an fbx file downloaded from Mixamo. The model loads correctly, but the process can’t find the textures.

The textures are embedded in the fbx file.
eg:

 "$tex.file 1 0" with string value "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1003_Diffuse.png"
 "$tex.file 2 0" with string value "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1003_Glossiness.png"
 "$tex.file 7 0" with string value "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1003_Glossiness.png"
 "$tex.file 8 0" with string value "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1003_Diffuse.png"

Here is the code and the application log:

        assetManager.registerLoader(LwjglAssetLoader.class, 
                "3ds", "3mf", "blend", "bvh", "dae", "fbx", "glb", "gltf",
                "lwo", "meshxml", "mesh.xml", "obj", "ply", "stl");

            int ppFlags = Assimp.aiProcess_CalcTangentSpace
                    | Assimp.aiProcess_JoinIdenticalVertices
                    | Assimp.aiProcess_Triangulate
                    | Assimp.aiProcess_ValidateDataStructure
                    | Assimp.aiProcess_SortByPType;

//            TextureLoader textureLoader = new TextureLoader(PathEdit.LastComponent, "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/%2$s%3$s");
//            LwjglAssetKey key = new LwjglAssetKey("Models/Astra.fbx", textureLoader, ppFlags);
            LwjglAssetKey key = new LwjglAssetKey("Models/Astra.fbx", ppFlags);
            key.setVerboseLogging(true);
            
            Spatial model = assetManager.loadModel(key);
            model.setLocalScale(0.01f);
            rootNode.attachChild(model);
Building "Ch48_body1" material for the "Ch48" mesh...
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.MaterialBuilder slotTexture
INFO: Skipped texture "*2" in "Ch48_body1" with Unknown semantics.
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.MaterialBuilder slotTexture
INFO: Skipped texture "*0" in "Ch48_body1" with Unknown semantics.
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.MaterialBuilder slotTexture
INFO: Skipped texture "*3" in "Ch48_body1" with Unknown semantics.
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.MaterialBuilder slotTexture
INFO: Skipped texture "*1" in "Ch48_body1" with Unknown semantics.
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.MaterialBuilder slotTexture
INFO: Skipped texture "*4" in "Ch48_body1" with Unknown semantics.
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png":
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png (Flipped) (Mipmapped)
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.TextureLoader load
WARNING: Replaced texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Diffuse.png" with a placeholder.
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png":
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png (Flipped) (Mipmapped)
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.TextureLoader load
WARNING: Replaced texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Specular.png" with a placeholder.
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png":
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png (Flipped) (Mipmapped)
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.TextureLoader load
WARNING: Replaced texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Emissive.png" with a placeholder.
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png":
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png (Flipped) (Mipmapped)
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.TextureLoader load
WARNING: Replaced texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Normal.png" with a placeholder.
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png":
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png (Flipped) (Mipmapped)
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "Models/../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" is outside the asset manager root
mar 26, 2024 8:04:25 PM com.github.stephengold.wrench.TextureLoader load
WARNING: Replaced texture "../../../../home/app/mixamo-mini/tmp/skins_d98a155f-ffb4-4d4a-b565-e41126a930c7.fbm/Ch48_1002_Glossiness.png" with a placeholder.

Reading the instructions in the README file of the MonkeyWrench project, I didn’t quite understand how to configure the TextureLoader to specify the path where the process should look for textures.

Can you please help me ?

Let me know if you need any further information.
Thanks.

2 Likes

Textures are frequently stumbling block when attempting to import downloaded 3-D models. I’d be glad to advise you.

Based the log messages, the model appears to use both embedded and external textures, which is unusual. A TextureLoader can only help with external textures.

Also I’d like to analyze the FBX file to determine what format its embedded textures are in. MonkeyWrench handles quite a few formats already, but it might (or might not) be easy to add another one.

Could you please provide me with an exact copy of the file you’re trying to import?

1 Like

Sure! Unfortunately, Astra’s fbx model is about 100 MB and I have trouble uploading it to github. For the sake of simplicity, I uploaded Erika’s fbx model to github, which is smaller (about 18 MB), but has exactly the same problem with embedded textures. It can be found here:

Thanks

1 Like

The first thing to note about “Erika Archer.fbx” is that it’s in version 7700 (aka v7.7) of the FBX format:

$ file Erika\ Archer.fbx
Erika Archer.fbx: Kaydara FBX model, version 7700
$

As noted in the MonkeyWrench README, Assimp only supports version 7100 through 7400 (a.k.a. v7.1 through v7.4) of FBX format.

Back in November, I added helpful code to the library to log warnings regarding unsupported FBX versions. However, the change was committed after the most recent (v0.5.3) release of the MonkeyWrench library, so you probably haven’t benefited from it.

I uploaded Erika’s fbx model to github, which is smaller (about 18 MB), but has exactly the same problem with embedded textures.

The Erika model you uploaded contains 5 embedded textures, but I don’t see any issues with them. All 5 are in PNG format, which MonkeyWrench should handle easily. I don’t see any log messages similar to

INFO: Skipped texture "*2" in "Ch48_body1" with Unknown semantics.

like you got from the Astra model. I still have no idea what format Astra’s embedded textures are in.

Most of the serious log messages I’m seeing from Erika are regarding external textures, for instance:

Mar 28, 2024 10:52:13 AM com.jme3.asset.AssetKey reducePath
SEVERE: Asset path "textures/../../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png.png" is outside the asset manager root

Didn't find texture "../../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png":
  com.jme3.asset.AssetNotFoundException: ../../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.jpeg (Flipped) (Mipmapped)
  com.jme3.asset.AssetNotFoundException: ../../../home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm/FemaleFitA_eyelash_diffuse.png.png (Flipped) (Mipmapped)

External textures reside in files other than the FBX file. Since you didn’t upload any texture files, I don’t know the actual names of the texture files or in what folders they reside, so I can’t advise you on how to configure the TextureLoader.

For Mixamo models, I generally get better results with DAE format than I do with FBX format. That’s why the ImportMixamo example app always uses DAE.

MonkeyWrench is long overdue for a new release. I’ll publish one and report back.

2 Likes

Version 0.6.0 has been published and the README has been updated accordingly:

3 Likes

Hi @sgold ,
I have updated my gradle project with the latest version of MonkeyWrench 0.6.0.

Regarding the fbx model, the textures are all embedded in the file. There are no external textures. Probably the fbx file contains paths (…/…/…/…/home/app/mixamo-mini/tmp/skins_88a70c99-721e-4e07-bcbc-5adf67384834.fbm) related to the pc of the person who created the 3d models, they are not exist on my pc. If you want, you can download both Erika’s and Astra’s fbx models from the Mixamo site to do a test. Do you think Assimp/MonkeyWrench can handle this case? Or since Assimp does not support fbx version 7.7 maybe the problem does not have a solution (???).

Doing more testing I found another problem:
I created an avatar in glb format through the ReadyPlayerMe site. Reading the file, MonkeyWrench creates a MorphControl instead of an AnimComposer. While the JME series loader reads the glb file and correctly creates an AnimComposer. Here are some explanatory images:

You can find the RPM glb file here.

Thanks as always for your help.

1 Like

Do you think Assimp/MonkeyWrench can handle this case? Or since Assimp does not support fbx version 7.7 maybe the problem does not have a solution (???).

In this case, the best solution is to download the model in Collada (DAE) format instead of FBX. (I’m curious why you downloaded FBX in the first place.)

I found another problem:

You can find the RPM glb file here.

I’ll take a look at it.

1 Like