SubD to Nurbs

Hi guys!

I’m working on this big statue that we’re going to mill in a robot arm. The original file is a triangle mesh STL file that I quadremeshed in rhino and I’m trying to convert it to nurbs but I’m getting this holes where 3 or 5 quads meet. Any ideas on what’s happening here?

Hello - there is an open bug in the works that is this exact thing I believe - the item is not set as public right now, I think that is an error, I’ll verify with the developer and set it to be public if I can.

Yep - RH-62751 ToNURBS: SubD with 450k faces fails to convert to NURBS, missing faces around extraordinary vertices

-Pascal

1 Like

Hi @JBAngel , can you share the file with us, or at least some details (the output of the _What command) on the failing SubD?

If you don’t want to share them publicly, you can send them to pierre@mcneel.com or through the Rhino - Upload to Support page.

What do you want to do with the Brep output, send it to the CNC mill? It will be a very big object, probably not very edit-friendly, or difficult to export to other software. Is a mesh output acceptable in your usecase?

2 Likes

@JBAngel: looks like there’s been a level of detail that has been lost when the conversion happened or is that level of detail enough?

Thanks for that info, @pascal !

@pierrec I uploaded a file through the Rhino Upload to Support. I’m not allowed to send the whole file so I just sent a part of it (lowest part). The statue is split in 4 parts and this is the output of the _What command for each one of them:

01 Face:

SubD

ID: d61b1721-2325-4f45-b7ce-e0bccd44010d (27)
Object name: (not named)
Layer name: SubD::Face
Render Material:
source = from layer
index = -1

Geometry:
SubD[4]: 5088 vertices, 10061 edges, 4974 faces
Texture coordinate settings:
TextureCoordinateType() = Packed
Inactive TextureMappingTag() = ON_MappingTag::Unset
TextureSettingsHash() = ON_SHA1_Hash::C4EA21BB365BBEEAF5F2C654883E56D11E43C44E
FragmentTextureCoordinatesTextureSettingsHash() = TextureSettingsHash()
FragmentColorsSettingsHash() = ON_SHA1_Hash::EmptyContentHash
Geometry content serial number = 13
Render content serial number = 14
Heap use:
Total = 39.9 MB.
Mesh fragments = 35.3 MB.
Reserved but ununsed = 1.0% of total) (399 KB).
Levels:
SubD level 0 topology: 5088 vertices, 10061 edges (227 boundary, 9834 interior), 4974 faces
1 triangles
4973 quads
Level SubD geometry SHA1 = 38AB94F76F56FD3065DD50DDA8F3944C1B92AEB6
Vertices SHA1 = 6EE91A510B2B1A1C875ECCF4D5B7139D6A7AA859
Edges SHA1 = 3F041F26C752E8FABC27C19AEC36F872EFE8F34D
Faces SHA1 = EA541DF2DBE4C4AE02EFD761F828E6ED3FB7FC61
Faces pack rectangles SHA1 = 38E08820FD829249944399603C18BF4BADB92170
Faces fragment texture coordinates SHA1 = CF1FA1088A2D57436E423474E1114962F6DC8E61
Faces fragment vertex colors SHA1 = EmptyContentSHA1
Faces fragment vertex curvatures SHA1 = EmptyContentSHA1
Maximum vertex id = 5093. Next id = 5094.
Maximum edge id = 10073. Next id = 10074.
Maximum face id = 4981. Next id = 4982.
No topology inconsistencies.
Bounding box: (-7.315,4.115,104.367) to (6.532,11.641,119.828)
Render mesh: SubD default
Analysis mesh: SubD default

02 Head to Chest:

SubD

ID: cca13115-fbdb-40e7-905d-3a1152326a43 (26)
Object name: STL File created by netfabb - http://www.netfabb.com UNITS=MM
Layer name: SubD::01
Render Material:
source = from layer
index = -1

Geometry:
SubD[3]: 38413 vertices, 76584 edges, 38171 faces
Texture coordinate settings:
TextureCoordinateType() = Packed
Inactive TextureMappingTag() = ON_MappingTag::Unset
TextureSettingsHash() = ON_SHA1_Hash::C4EA21BB365BBEEAF5F2C654883E56D11E43C44E
FragmentTextureCoordinatesTextureSettingsHash() = TextureSettingsHash()
FragmentColorsSettingsHash() = ON_SHA1_Hash::EmptyContentHash
Geometry content serial number = 10
Render content serial number = 11
Heap use:
Total = 91.4 MB.
Mesh fragments = 58.0 MB.
Reserved but ununsed = negligable (12.3 KB).
Levels:
SubD level 0 topology: 38413 vertices, 76584 edges (484 boundary, 76100 interior), 38171 quads
Level SubD geometry SHA1 = D05AA2407787FAE654771D5E215F71F8F7E3A4A4
Vertices SHA1 = 5753B505503F9505349590FF3E10706B4CEC0E11
Edges SHA1 = 65D5E74ED4ACED842AA20BF11EB11267783ED13C
Faces SHA1 = B2C8BA4C2913140C83FEEC44BD20EA6317BBB025
Faces pack rectangles SHA1 = 73C1A725103001FBCADAFFA5C1720495618EA650
Faces fragment texture coordinates SHA1 = 226CA356AF7DCC48AC406A3704E1B5FB73C22138
Faces fragment vertex colors SHA1 = EmptyContentSHA1
Faces fragment vertex curvatures SHA1 = EmptyContentSHA1
Maximum vertex id = 38413. Next id = 38414.
Maximum edge id = 76584. Next id = 76585.
Maximum face id = 38171. Next id = 38172.
No topology inconsistencies.
Bounding box: (-20.150,4.630,86.000) to (20.124,31.499,129.709)
Render mesh: SubD default
Analysis mesh: SubD default

03 Chest to Lower Leg (part sent):

SubD

ID: 2d565ea1-d51f-41e9-ae10-83893f651fe1 (16)
Object name: STL File created by netfabb - http://www.netfabb.com UNITS=MM
Layer name: SubD::02
Render Material:
source = from layer
index = -1

Geometry:
SubD[2]: 70277 vertices, 140133 edges, 69856 faces
Texture coordinate settings:
TextureCoordinateType() = Packed
Inactive TextureMappingTag() = ON_MappingTag::Unset
TextureSettingsHash() = ON_SHA1_Hash::C4EA21BB365BBEEAF5F2C654883E56D11E43C44E
FragmentTextureCoordinatesTextureSettingsHash() = TextureSettingsHash()
FragmentColorsSettingsHash() = ON_SHA1_Hash::EmptyContentHash
Geometry content serial number = 7
Render content serial number = 8
Heap use:
Total = 167 MB.
Mesh fragments = 106 MB.
Reserved but ununsed = negligable (46.8 KB).
Levels:
SubD level 0 topology: 70277 vertices, 140133 edges (842 boundary, 139291 interior), 69856 quads
Level SubD geometry SHA1 = D2CB976E0BA8580AB0818C37DA990359B00B89B3
Vertices SHA1 = A3E88C21097F2C301B50BF005BACE49CC722F625
Edges SHA1 = 294A7693A08C09D429AEC45EDF977B0CDD63485F
Faces SHA1 = 188E0EE35D7A42550C556637ABDE59FEEB07315B
Faces pack rectangles SHA1 = AAD6959CE19F7A37EB3D6D7430C14AEA8299B40F
Faces fragment texture coordinates SHA1 = 56C6B34C262F095F361C319F05D8D9167F5B357F
Faces fragment vertex colors SHA1 = EmptyContentSHA1
Faces fragment vertex curvatures SHA1 = EmptyContentSHA1
Maximum vertex id = 70277. Next id = 70278.
Maximum edge id = 140133. Next id = 140134.
Maximum face id = 69856. Next id = 69857.
No topology inconsistencies.
Bounding box: (-19.671,-15.790,43.000) to (19.889,31.499,86.000)
Render mesh: SubD default
Analysis mesh: SubD default

04 Lower leg to feet to floor:

SubD

ID: 454968bf-dbd2-467e-82f2-39f543fcc243 (14)
Object name: STL File created by netfabb - http://www.netfabb.com UNITS=MM
Layer name: SubD::03
Render Material:
source = from layer
index = -1

Geometry:
SubD[1]: 32917 vertices, 65681 edges, 32765 faces
Texture coordinate settings:
TextureCoordinateType() = Packed
Inactive TextureMappingTag() = ON_MappingTag::Unset
TextureSettingsHash() = ON_SHA1_Hash::C4EA21BB365BBEEAF5F2C654883E56D11E43C44E
FragmentTextureCoordinatesTextureSettingsHash() = TextureSettingsHash()
FragmentColorsSettingsHash() = ON_SHA1_Hash::EmptyContentHash
Geometry content serial number = 4
Render content serial number = 5
Heap use:
Total = 78.6 MB.
Mesh fragments = 49.9 MB.
Reserved but ununsed = 0.1% of total) (95.5 KB).
Levels:
SubD level 0 topology: 32917 vertices, 65681 edges (303 boundary, 65378 interior), 32765 faces
1 triangles
32764 quads
Level SubD geometry SHA1 = FF406C5A9F0E09DD1B58A4C8B0F9EC32CA157C7D
Vertices SHA1 = C0D87A5D5FDD65FBE026B43C3B36AFFC2CA03858
Edges SHA1 = 3BE5B7DE64EABF1EA41A6914B5475C0E12950466
Faces SHA1 = ADE18DFAF89DFA0305E950DD9D9E363CA7659124
Faces pack rectangles SHA1 = 32E15EAAB5FD82A35C00C056D7719F2DDFDDE38A
Faces fragment texture coordinates SHA1 = 338DA4203DBD17C59DF2658E6249827A9CDD1326
Faces fragment vertex colors SHA1 = EmptyContentSHA1
Faces fragment vertex curvatures SHA1 = EmptyContentSHA1
Maximum vertex id = 32917. Next id = 32918.
Maximum edge id = 65681. Next id = 65682.
Maximum face id = 32765. Next id = 32766.
No topology inconsistencies.
Bounding box: (-16.140,-31.499,-0.035) to (17.010,31.185,43.000)
Render mesh: SubD default
Analysis mesh: SubD default

@pierrec did you have time to take a look at the file?

@JBAngel Yes I did, also see the same missing faces as you do. Thanks for sharing the file with us, this is filed with the bug and I’ll make sure to let you know when it is fixed.

For now, it seems that you have just a tiny bit more faces than what is needed to “trigger” this bug, so if you remove some of them before ToNURBS you should be back to a working conversion. For example splitting your statue in more pieces vertically, or reducing the face count target in QuadRemesh, could help.

I was able to get ToNURBS to work properly on your model by removing the top 3 rows of faces, _What reports these counts:

Geometry:
    SubD[22]: 32008 vertices, 63863 edges, 31856 faces
1 Like

I’m trying a different approach because it’s still too much. The other sections (not showed in the file) are 70k and 45k faces so subd to nurbs is not going to work for me this time. I really hope this bug’s fixed soon.

Thanks a lot, @pierrec !

RH-62751 is fixed in Rhino 7 Service Release 20

1 Like