[BUG] Rhino unwelds some mesh edges during obj import

It’s at least the second time this is happening to me, but now I catch it. However, I can’t make a minimal file where this can be reproduced so as an example I will use a slightly bigger file. The problem is visible on many mesh parts but for simplicity, I will focus on one of the wheels.

Can you please take look at it? @Jussi_Aaltonen

System Info

Rhino 7 SR14 2021-12-14 (Rhino 7, 7.14.21348.13001, Git hash:master @ 5ab502b613f84488d00228948505c6f28ebfe598)
License type: Edukacyjna, build 2021-12-14
License details: Cloud Zoo

Windows 10.0.19042 SR0.0 or greater (Physical RAM: 32Gb)

Computer platform: LAPTOP - Plugged in [97% battery remaining]

Non-hybrid graphics configuration.
Primary display and OpenGL: NVIDIA GeForce GTX 1070 (NVidia) Memory: 8GB, Driver date: 12-6-2021 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 472.84
> Integrated accelerated graphics device with 4 adapter port(s)
- Secondary monitor is laptop’s integrated screen or built-in port
- Windows Main Display attached to adapter port #1

OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)

Anti-alias mode: 4x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High

Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 12-6-2021
Driver Version: 30.0.14.7284
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 8 GB

Rhino plugins that do not ship with Rhino
C:\Program Files\Rhino WIP\Plug-ins\Karamba\License\Karamba3D_LicensePlugin_Rhino7.rhp “Karamba3DLicense”
C:\Program Files\Rhino WIP\Plug-ins\Crayon1.1.1\Crayon.rhp “Crayon” 1.1.0.0
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\7.0\Plug-ins\ClippingBox (4dfff1df-5f09-43ae-a044-77b115244b02)\1.0.0.0\Rhino 6\ClippingBox.rhp “ClippingBox” 1.0.0.0
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\7.0\Plug-ins\SpeckleRhino2 (8dd5f30b-a13d-4a24-abdc-3e05c8c87143)\SpeckleConnectorRhino.rhp “ConnectorRhino7” 2.2.2.7060
C:\ProgramData\McNeel\Rhinoceros\7.0\Plug-ins\Datasmith Rhino Exporter (d1fdc795-b334-4933-b680-088119cdc6bb)\DatasmithRhino7.rhp “Datasmith Exporter” 4.27.2.0
C:\Program Files\SimLab\Plugins\SimLab USDZ From Rhino\SimLabUSDZExporter.rhp “SimLab USDZ Exporter”
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\7.0\Plug-ins\Notilus_Clipper (eccc432b-7947-4008-a2ac-6c7e27f58a93)\1.0.0.0\NotilusClipper\Rhino 6\Notilus_Clipper.rhp “Notilus_Clipper” 1.0.0.0
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\ColorPicker\6.0.0\ColorPicker.rhp “ColorPicker”
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\IntelDenoiser\0.6.3\IntelDenoiser.Windows.rhp “IntelDenoiser.Windows” 0.6.3.0
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\NVIDIADenoiser\0.4.1\NVIDIADenoiser.Windows.rhp “NVIDIADenoiser.Windows” 0.4.1.0
C:\Users\USER\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\SubstanceImporter\2.0.1\Substance.Win.rhp “SubstanceImporter” 2.0.1.0

Rhino plugins that ship with Rhino
C:\Program Files\Rhino 7\Plug-ins\Commands.rhp “Commands” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\WebBrowser.rhp “WebBrowser”
C:\Program Files\Rhino 7\Plug-ins\rdk.rhp “Renderer Development Kit”
C:\Program Files\Rhino 7\Plug-ins\RhinoScript.rhp “RhinoScript”
C:\Program Files\Rhino 7\Plug-ins\IdleProcessor.rhp “IdleProcessor”
C:\Program Files\Rhino 7\Plug-ins\export_OBJ.rhp “export_OBJ” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\RhinoRenderCycles.rhp “Rhino Render” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\rdk_etoui.rhp “RDK_EtoUI” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\rdk_ui.rhp “Renderer Development Kit UI”
C:\Program Files\Rhino 7\Plug-ins\NamedSnapshots.rhp “Snapshots”
C:\Program Files\Rhino 7\Plug-ins\Alerter.rhp “Alerter”
C:\Program Files\Rhino 7\Plug-ins\RhinoCycles.rhp “RhinoCycles” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\Toolbars\Toolbars.rhp “Toolbars” 7.14.21348.13001
C:\Program Files\Rhino 7\Plug-ins\3dxrhino.rhp “3Dconnexion 3D Mouse”
C:\Program Files\Rhino 7\Plug-ins\Displacement.rhp “Displacement”
C:\Program Files\Rhino 7\Plug-ins\import_OBJ.rhp “Import_OBJ” 7.14.21348.13001

Files:
unweld Start.obj (6.4 MB) - start file

blender export to OBJ.obj (5.7 MB) - file re-exported in Blender

two meshes.3dm (4.7 MB) - both meshes in Rhino file

I’m working with Rhino 7 and RizomUV 2022.
Rhino unwelds some of the mesh edges. Once they are unwelded further “unfolding” in RizomUV produces bad results which break my work.

This is a work in progress file where I do unwrapping, many parts of this mesh object show this behavior but please focus on one of the wheels.

Example

RizomUV
Please take a look at which edges are unwelded.

Exported from RizomUV as obj and imported to Rhino 7
Rhino during import unwelded some random mesh edges

Exported from RizomUV as obj, imported in Blender, exported again to obj and imported in Rhino
Importing the obj file in Blender 2.83 first and then proceeding to Rhino made me avoid this problem and it shows that there is something strange on the Rhino side.

1 Like

Hi @Czaja, Is the unweld_Start.obj the file exported from RizomUV?

Hi,
Yes, it’s exported from RizomUV.

Ok, I checked one of the strange unwelded edges that appear in Rhino - the edge between these points:
(-0.12942000000000001, 0.027762999999999999, -0.157661)
(-0.12942000000000001, 0.026979, -0.15798599999999999)

In the obj file those points correspond to vertices 5971 and 5973:
row 5974: v -0.12942 0.027763 -0.157661 (v5971)
row 5976: v -0.12942 0.026979 -0.157986 (v5973)

There are 2 faces that reference both of those vertices:
row 129006: f 5971/5971/3008 5970/5970/3007 5972/5972/3009 5973/5973/3010
row 129646: f 6668/6668/3731 5971/5971/3730 5973/5973/3732 6669/6669/5274

Both of those faces use same texture coordinates for both of the vertices:
Vertex 5971 uses texture coordinate 5971 and vertex 5973 uses texture coordinate 5973.
So there is no discontinuity as expected.

However the vertex normals are different:
Vertex 5971 uses vertex normals 3008 and 3730 which are on rows 87305 and 88027:
row 87305: vn 0.8572 0.1591 -0.4899 (vn3008)
row 88027: vn 0.8571 0.1592 -0.4899 (vn3730)
That difference is enough to cause the edge in Rhino to be unwelded.

1 Like

Thanks for the detailed answer.
The original file was created in some other program than Rhino.

I consider it as a bug because moving this OBJ from RizomUV (where I did unwrapping) to Blender and then to Rhino gives me expected results.
Is this something that can work differently in Rhino?

In blender export to OBJ.obj the vertices at

(-0.12942000000000001, 0.027762999999999999, -0.157661)
(-0.12942000000000001, 0.026979, -0.15798599999999999)

correspond to:

row 5975: v -0.129420 0.027763 -0.157661 (v5971)
row 5977: v -0.129420 0.026979 -0.157986 (v5973)

Those vertices are both used by these face elements:

row 128519: f 5971/6077/2744 5970/6076/5392 5972/6078/5393 5973/6079/5394
row 129159: f 6668/6774/3441 5971/6077/2744 5973/6079/5394 6669/6775/3442

So there the edge is fully welded because

  • for v5971 both faces have vt6077 and vn2744
  • for v5973 both faces have vt6079 and vn5394

So it seems like something you did in Blender welded that edge. Or maybe Blender welded it automatically.

I don’t think we have that sort of functionality in Rhino. Automatic welds need to be carefully considered to avoid intentionally separated mesh parts from being connected.

1 Like

Sorry, now I can’t follow. I thought this all had to do with importing OBJ files into Rhino.

@Czaja
I used another colour to inspect and visualize the differences.

Thanks, your graphic shows the issue much better.

1 Like

Do you think that the original file has these unwelded edges and Blender fixed the problem?

I don’t think it had any unwelded edges at the start.
I received some mesh geometry without any UV mapping whatsoever and unwrapped it in Rizom.
I don’t remember the details of this case. But I’m pretty sure that Jumping back and forth Rizom and Blender produces expected results, but between Rhino and Rizom, often not.