Opened 2 years ago
Last modified 2 years 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 , 2 years 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