Opened 2 years ago
Last modified 23 months ago
#10108 assigned enhancement
Make GLTF output so that importing into Blender sets the center of rotation at center of scene
Reported by: | Owned by: | Tom Goddard | |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Input/Output | Version: | |
Keywords: | Cc: | ||
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: Windows-10-10.0.19045 ChimeraX Version: 1.6.1 (2023-05-09 17:57:07 UTC) Description When Exporting as GLTF with default settings (so centering enabled) the centering does not work properly. The "centering" objects gets the (mostly non zero) position of the 3D structure and the structure gets the position set to 0/0/0. It should be the other way around to create a proper centering of the pivot point. I created a little video to show what is going on: https://www.youtube.com/watch?v=QLPA_oTZDUw I tested multiple Files with different 3D Programs and the Unity Game Engine. So it's probably the mentioned swapped X/Y/Z Position. A non zero pivot point makes working with the 3D Model really annoying and the "centering = true" should probably create a properly centered pivot point. OpenGL version: 3.3.0 NVIDIA 531.41 OpenGL renderer: NVIDIA GeForce RTX 2070 with Max-Q Design/PCIe/SSE2 OpenGL vendor: NVIDIA Corporation Python: 3.9.11 Locale: de_DE.cp1252 Qt version: PyQt6 6.4.2, Qt 6.4.2 Qt runtime version: 6.4.3 Qt platform: windows Manufacturer: LENOVO Model: 82EH OS: Microsoft Windows 10 Pro (Build 19045) Memory: 16,971,386,880 MaxProcessMemory: 137,438,953,344 CPU: 16 Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz OSLanguage: de-DE Installed Packages: alabaster: 0.7.13 appdirs: 1.4.4 asttokens: 2.2.1 Babel: 2.12.1 backcall: 0.2.0 beautifulsoup4: 4.11.2 blockdiag: 3.0.0 build: 0.10.0 certifi: 2023.5.7 cftime: 1.6.2 charset-normalizer: 3.1.0 ChimeraX-AddCharge: 1.5.9.1 ChimeraX-AddH: 2.2.5 ChimeraX-AlignmentAlgorithms: 2.0.1 ChimeraX-AlignmentHdrs: 3.3.1 ChimeraX-AlignmentMatrices: 2.1 ChimeraX-Alignments: 2.9.3 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.0.3 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.1 ChimeraX-Atomic: 1.43.10 ChimeraX-AtomicLibrary: 10.0.6 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.3.2 ChimeraX-BasicActions: 1.1.2 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 2.1.2 ChimeraX-BondRot: 2.0.1 ChimeraX-BugReporter: 1.0.1 ChimeraX-BuildStructure: 2.8 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.2.2 ChimeraX-ButtonPanel: 1.0.1 ChimeraX-CageBuilder: 1.0.1 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.3.2 ChimeraX-ChangeChains: 1.0.2 ChimeraX-CheckWaters: 1.3.1 ChimeraX-ChemGroup: 2.0.1 ChimeraX-Clashes: 2.2.4 ChimeraX-ColorActions: 1.0.3 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.3 ChimeraX-CommandLine: 1.2.5 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0.1 ChimeraX-Core: 1.6.1 ChimeraX-CoreFormats: 1.1 ChimeraX-coulombic: 1.4.2 ChimeraX-Crosslinks: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0.1 ChimeraX-DataFormats: 1.2.3 ChimeraX-Dicom: 1.2 ChimeraX-DistMonitor: 1.4 ChimeraX-DockPrep: 1.1.1 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ESMFold: 1.0 ChimeraX-FileHistory: 1.0.1 ChimeraX-FunctionKey: 1.0.1 ChimeraX-Geometry: 1.3 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.1.1 ChimeraX-Hbonds: 2.4 ChimeraX-Help: 1.2.1 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.1 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-Label: 1.1.7 ChimeraX-ListInfo: 1.1.1 ChimeraX-Log: 1.1.5 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.8.2 ChimeraX-Map: 1.1.4 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0.1 ChimeraX-MapFilter: 2.0.1 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1.1 ChimeraX-Markers: 1.0.1 ChimeraX-Mask: 1.0.2 ChimeraX-MatchMaker: 2.0.12 ChimeraX-MDcrds: 2.6 ChimeraX-MedicalToolbar: 1.0.2 ChimeraX-Meeting: 1.0.1 ChimeraX-MLP: 1.1.1 ChimeraX-mmCIF: 2.12 ChimeraX-MMTF: 2.2 ChimeraX-Modeller: 1.5.9 ChimeraX-ModelPanel: 1.3.7 ChimeraX-ModelSeries: 1.0.1 ChimeraX-Mol2: 2.0 ChimeraX-Mole: 1.0 ChimeraX-Morph: 1.0.2 ChimeraX-MouseModes: 1.2 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nifti: 1.0 ChimeraX-NRRD: 1.0 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.10.1 ChimeraX-PDB: 2.7.2 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0.2 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0.1 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1 ChimeraX-PubChem: 2.1 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-RenderByAttr: 1.1 ChimeraX-RenumberResidues: 1.1 ChimeraX-ResidueFit: 1.0.1 ChimeraX-RestServer: 1.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 3.0 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.5.1 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0.1 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0.1 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.8.3 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.1.1 ChimeraX-ShowSequences: 1.0.1 ChimeraX-SideView: 1.0.1 ChimeraX-Smiles: 2.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.10.3 ChimeraX-STL: 1.0.1 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.1.2 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0.1 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.2.1 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.1.2 ChimeraX-ToolshedUtils: 1.2.1 ChimeraX-Topography: 1.0 ChimeraX-Tug: 1.0.1 ChimeraX-UI: 1.28.4 ChimeraX-uniprot: 2.2.2 ChimeraX-UnitCell: 1.0.1 ChimeraX-ViewDockX: 1.2 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0.1 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0.2 ChimeraX-WebServices: 1.1.1 ChimeraX-Zone: 1.0.1 colorama: 0.4.6 comm: 0.1.3 comtypes: 1.1.14 contourpy: 1.0.7 cxservices: 1.2.2 cycler: 0.11.0 Cython: 0.29.33 debugpy: 1.6.7 decorator: 5.1.1 docutils: 0.19 executing: 1.2.0 filelock: 3.9.0 fonttools: 4.39.3 funcparserlib: 1.0.1 grako: 3.16.5 h5py: 3.8.0 html2text: 2020.1.16 idna: 3.4 ihm: 0.35 imagecodecs: 2022.9.26 imagesize: 1.4.1 importlib-metadata: 6.6.0 ipykernel: 6.21.1 ipython: 8.10.0 ipython-genutils: 0.2.0 ipywidgets: 8.0.6 jedi: 0.18.2 Jinja2: 3.1.2 jupyter-client: 8.0.2 jupyter-core: 5.3.0 jupyterlab-widgets: 3.0.7 kiwisolver: 1.4.4 line-profiler: 4.0.2 lxml: 4.9.2 lz4: 4.3.2 MarkupSafe: 2.1.2 matplotlib: 3.6.3 matplotlib-inline: 0.1.6 msgpack: 1.0.4 nest-asyncio: 1.5.6 netCDF4: 1.6.2 networkx: 2.8.8 nibabel: 5.0.1 nptyping: 2.5.0 numexpr: 2.8.4 numpy: 1.23.5 openvr: 1.23.701 packaging: 23.1 ParmEd: 3.4.3 parso: 0.8.3 pep517: 0.13.0 pickleshare: 0.7.5 Pillow: 9.3.0 pip: 23.0 pkginfo: 1.9.6 platformdirs: 3.5.0 prompt-toolkit: 3.0.38 psutil: 5.9.4 pure-eval: 0.2.2 pycollada: 0.7.2 pydicom: 2.3.0 Pygments: 2.14.0 pynrrd: 1.0.0 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 3.0.9 pyproject-hooks: 1.0.0 PyQt6-commercial: 6.4.2 PyQt6-Qt6: 6.4.3 PyQt6-sip: 13.4.1 PyQt6-WebEngine-commercial: 6.4.0 PyQt6-WebEngine-Qt6: 6.4.3 python-dateutil: 2.8.2 pytz: 2023.3 pywin32: 305 pyzmq: 25.0.2 qtconsole: 5.4.0 QtPy: 2.3.1 RandomWords: 0.4.0 requests: 2.28.2 scipy: 1.9.3 setuptools: 67.4.0 sfftk-rw: 0.7.3 six: 1.16.0 snowballstemmer: 2.2.0 sortedcontainers: 2.4.0 soupsieve: 2.4.1 sphinx: 6.1.3 sphinx-autodoc-typehints: 1.22 sphinxcontrib-applehelp: 1.0.4 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 1.0.2 sphinxcontrib-htmlhelp: 2.0.1 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 1.0.3 sphinxcontrib-serializinghtml: 1.1.5 stack-data: 0.6.2 tables: 3.7.0 tcia-utils: 1.2.0 tifffile: 2022.10.10 tinyarray: 1.2.4 tomli: 2.0.1 tornado: 6.3.1 traitlets: 5.9.0 typing-extensions: 4.5.0 tzdata: 2023.3 urllib3: 1.26.15 wcwidth: 0.2.6 webcolors: 1.12 wheel: 0.38.4 wheel-filename: 1.4.1 widgetsnbextension: 4.0.7 WMI: 1.5.1 zipp: 3.15.0
Attachments (1)
Change History (8)
comment:1 by , 2 years ago
Component: | Unassigned → Input/Output |
---|---|
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → GLTF centering |
comment:2 by , 2 years ago
Thanks Lukas for making the video showing the problem.
I don't think this is a bug in the ChimeraX GLTF export. The GLTF file format does not define a pivot point. It is Blender and Unity that are defining the pivot point. You correctly observe that the GLTF node named "center" has the translation that moves the scene so that 0,0,0 becomes the center of the bounding box of the child models. The surface you show is a child node of the "center" node so it is supposed to be transformed using both its own transform (which has 0,0,0 translation) and the center node transform. This works correctly when used in a Unity application I wrote (LookSee, https://www.rbvi.ucsf.edu/chimerax/data/looksee-mar2023/looksee.html) with the GLTF imported with GLTFast.
So my feeling is that issue is how Blender and the Unity Editor are choosing to place the pivot point. If the placed it at 0,0,0 in the top level scene coordinates of the GLTF then I believe it would rotate about the center of your surface. I don't know why it is not doing that. I don't use Blender. I can try it in Unity.
The reason ChimeraX GLTF export is adding the "center" node is because all the submodels (you have just one) should be centered and it made most sense to not modify all their translations, but instead put them under a parent "center" node that adjusts the coordinates so that 0,0,0 is at the middle of the displayed objects. I still think that is the most sensible approach.
comment:3 by , 2 years ago
I tried adding a ChimeraX .glb file to a Unity (2023.1.16f1) scene and it does not appear Unity natively handles GLTF files. So I'm not sure what you mean by it doesn't get the right pivot in Unity. I guess you are using some third party GLTF Unity asset.
comment:4 by , 2 years ago
We are indeed using a third party Asset because the Khronos Group abandoned the GLTF plugin for Unity. https://github.com/Siccity/GLTFUtility But I also tested the gLTFast Plugin used in "LookSee". It shows the same weird placement of the pivot in Unity (screenshot attached). I've wrote a little script to create a bounding box from all the mesh bounding boxes to check if our model has some weirdly placed parts. The bounding box looks fine but the pivot is still way off (screenshot attached). All "subobjects" also have the pivot on the exact same position (no matter if in a Unity Prefab or not). I don't understand why the pivot is off or why Unity and Blender create it that way. But files from other 3D modelling programs don't have that issue if exported correctly. Is it possible that the Protein is translated in ChimeraX and this translation is carried into the export? That's a problem in other 3D modelling programs. The user has to select single object export and not whole scene export since that would export the global position (which might not be 0/0/0). Just a guess. I'm new to ChimeraX and I'm just a media informatics student on an internship, trying to get some 3D models out of ChimeraX. So I might be missing something. Link to the protein: https://www.rcsb.org/structure/7lwv Lukas Sandhop (u34216, MINF-18) Hochschule Harz ----- Ursprüngliche Mail ----- Von: "ChimeraX" <ChimeraX-bugs-admin@cgl.ucsf.edu> An: goddard@cgl.ucsf.edu, "Lukas Sandhop" <u34216@hs-harz.de> Gesendet: Dienstag, 7. November 2023 22:22:24 Betreff: Re: [ChimeraX] #10108: GLTF centering #10108: GLTF centering -----------------------------------+------------------------- Reporter: u34216@… | Owner: Tom Goddard Type: defect | Status: assigned Priority: normal | Milestone: Component: Input/Output | Version: Resolution: | Keywords: Blocked By: | Blocking: Notify when closed: | Platform: all Project: ChimeraX | -----------------------------------+------------------------- Comment (by Tom Goddard): I tried adding a ChimeraX .glb file to a Unity (2023.1.16f1) scene and it does not appear Unity natively handles GLTF files. So I'm not sure what you mean by it doesn't get the right pivot in Unity. I guess you are using some third party GLTF Unity asset.
comment:5 by , 2 years ago
The problem you describe is that Blender and Unity don't put the rotation pivot point at the center of the molecular surface from the ChimeraX GLTF. The pivot point is not specified in the GLTF file as far as I know. The world space coordinates 0,0,0 will be centered at the center of the molecular surface, but apparently Blender and Unity are not using that position for the pivot. To resolve this we would first need to know where Blender and Unity are placing the pivot point. Perhaps you can figure out where they have placed the pivot point. If it is at 0,0,0 then the problem would seem to be the import by Blender and Unity. I believe GLTFast correctly opens these files programmatically (not by dragging and dropping) within C# Unity code. I can check that.
comment:6 by , 2 years ago
I verified that ChimeraX saved .glb file opened with GLTFast in Unity in C# code reports the center of the bounding box of the model at 0,0,0 in world coordinates. So it appears the GLTF centering is working correctly.
That suggests that the method Unity is using to set the pivot is the problem. Perhaps we could fix this if we knew the method Unity uses to position the pivot.
comment:7 by , 23 months ago
Summary: | GLTF centering → Make GLTF output so that importing into Blender sets the center of rotation at center of scene |
---|---|
Type: | defect → enhancement |
Reported by Lukas Sandhop