Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assimp format (fbx, dae, ...) provide empty metadata #1945

Closed
Tracked by #1929
mwestphal opened this issue Jan 24, 2025 · 6 comments
Closed
Tracked by #1929

Assimp format (fbx, dae, ...) provide empty metadata #1945

mwestphal opened this issue Jan 24, 2025 · 6 comments
Assignees
Milestone

Comments

@mwestphal
Copy link
Contributor

Describe the bug
F3D support many formats through the assimp plugin, however the meta data provided for these formats is empty

To Reproduce
Steps to reproduce the behavior:

  1. Open the file using f3d --no-config -m 16bit.fbx

Image

Expected behavior
Meta data should contain information

System Information:

  • OS: Any
  • GPU and GPU driver: Ant

F3D Information
Paste the content of f3d --version: 3.0.0

Additional context
F3D uses vtkF3DMetaImporter::GetMetaDataDescription() to recover that information, something must be going wrong there.

@mwestphal
Copy link
Contributor Author

Point sprites also do not work with assimp, I think this is related.

@mwestphal mwestphal added this to the 3.1.0 milestone Jan 24, 2025
@mwestphal mwestphal moved this to Investigate in F3D Jan 24, 2025
@mwestphal mwestphal mentioned this issue Feb 27, 2025
35 tasks
@exbluesbreaker
Copy link
Contributor

I will work on this issue :)

@exbluesbreaker
Copy link
Contributor

I haven't found a fix yet, but I believe I've identified the root cause.

To gather all necessary information, F3D first requires actors, which it retrieves using:

vtkActorCollection* actorCollection = importer->GetImportedActors();

in bool vtkF3DMetaImporter::Update().

The issue is that vtkF3DAssimpImporter does not update the field accessed by GetImportedActors. Instead, it performs the following operation:

void vtkF3DAssimpImporter::ImportActors(vtkRenderer* renderer)
{
  this->Internals->ImportRoot(renderer);
}

This means that it updates Internals, which maintains its own structures for tracking actors. As a result, this->Internals is aware of the actors, but this itself is not, leading to "invisible" actors.

Probably vtkF3DAssimpImporter::ImportActors should also somehow update its own ActorCollection together with Internals but I do not have an implementation yet.

@mwestphal
Copy link
Contributor Author

Yes, you are absolutely right. The importer needs to be reworked to populate the actor collection.

@exbluesbreaker
Copy link
Contributor

I tried adding copying of data from internals into importer itself. Pull request is #2058

Now you can see this with 16bit.fbx, hope it is correct:

Image

@mwestphal
Copy link
Contributor Author

Fixed by #2058

@github-project-automation github-project-automation bot moved this from Investigate to Done in F3D Mar 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Done
Development

No branches or pull requests

2 participants