Split the nodes Remesh and PostProcess + added dual_contouring_resolution parameter + updated wheels

This commit is contained in:
Bruno Fargnoli
2025-12-20 16:10:10 +01:00
parent 7b7c73f87e
commit 4a5808b014
10 changed files with 1077 additions and 805 deletions
+177 -125
View File
@@ -1,8 +1,8 @@
{
"id": "440427ce-0c6a-4462-af51-639ed2f16dec",
"revision": 0,
"last_node_id": 40,
"last_link_id": 78,
"last_node_id": 41,
"last_link_id": 80,
"nodes": [
{
"id": 39,
@@ -13,7 +13,7 @@
],
"size": [
301.7261859434295,
90.65259616638991
130
],
"flags": {},
"order": 0,
@@ -36,7 +36,9 @@
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn"
"flash_attn",
"cuda",
true
]
},
{
@@ -84,19 +86,173 @@
"image"
]
},
{
"id": 40,
"type": "Trellis2MeshWithVoxelAdvancedGenerator",
"pos": [
555.1619459582687,
700.5135710436982
],
"size": [
413.1841796875,
438
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 75
},
{
"name": "image",
"type": "IMAGE",
"link": 76
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
79
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "022090e3d6df179ab463d33da445e57ba3891211",
"Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
723525328,
"randomize",
"1024_cascade",
12,
7.5,
0.7,
5,
12,
7.5,
0.5,
3,
12,
7.5,
0.5,
3,
100000
]
},
{
"id": 41,
"type": "Trellis2SimplifyMesh",
"pos": [
873.1780893119785,
547.9097136148278
],
"size": [
270,
82
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 79
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
80
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "7b7c73f87eb65a3ff1fd5c28bdd7d097e57eb9dc",
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2SimplifyMesh"
},
"widgets_values": [
5000000,
"Meshlib"
]
},
{
"id": 38,
"type": "Trellis2PostProcessAndUnWrapAndRasterizer",
"pos": [
997.3126942209559,
703.70828486086
],
"size": [
419.15234375,
370
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 80
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
73
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer",
"widget_ue_connectable": {}
},
"widgets_values": [
90,
0,
1,
1,
2048,
true,
1,
0,
1000000,
"Meshlib",
true,
0.03,
"OPAQUE",
"Auto"
]
},
{
"id": 19,
"type": "Trellis2ExportMesh",
"pos": [
1445.610740061347,
502.94502603344927
1360.0462953298393,
514.4818209219691
],
"size": [
270,
106
],
"flags": {},
"order": 4,
"order": 5,
"mode": 0,
"inputs": [
{
@@ -130,15 +286,15 @@
"id": 10,
"type": "Preview3D",
"pos": [
1550.8319924776888,
699.2361408227106
1457.5762924746616,
705.9659231712205
],
"size": [
626.8865556299502,
658.2643216794061
],
"flags": {},
"order": 5,
"order": 6,
"mode": 0,
"inputs": [
{
@@ -201,118 +357,6 @@
"Home_2K_00001_.glb",
""
]
},
{
"id": 38,
"type": "Trellis2PostProcessAndUnWrapAndRasterizer",
"pos": [
1052.1124699414247,
699.8626572251001
],
"size": [
419.15234375,
346
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 78
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
73
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer",
"widget_ue_connectable": {}
},
"widgets_values": [
90,
0,
1,
1,
2048,
true,
1,
0,
1000000,
"Meshlib",
true,
0.03,
"OPAQUE"
]
},
{
"id": 40,
"type": "Trellis2MeshWithVoxelAdvancedGenerator",
"pos": [
555.1619459582687,
700.5135710436982
],
"size": [
413.1841796875,
438
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 75
},
{
"name": "image",
"type": "IMAGE",
"link": 76
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
78
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "022090e3d6df179ab463d33da445e57ba3891211",
"Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
723525328,
"randomize",
"1024_cascade",
12,
7.5,
0.7,
5,
12,
7.5,
0.5,
3,
12,
7.5,
0.5,
3,
100000
]
}
],
"links": [
@@ -349,9 +393,17 @@
"IMAGE"
],
[
78,
79,
40,
0,
41,
0,
"MESHWITHVOXEL"
],
[
80,
41,
0,
38,
0,
"MESHWITHVOXEL"
@@ -365,8 +417,8 @@
"ds": {
"scale": 0.6934334949441419,
"offset": [
33.42173835045634,
-244.1074188775531
46.88139106623601,
-242.18464906905308
]
},
"links_added_by_ue": [],
+221 -170
View File
@@ -1,57 +1,142 @@
{
"id": "440427ce-0c6a-4462-af51-639ed2f16dec",
"revision": 0,
"last_node_id": 45,
"last_link_id": 89,
"last_node_id": 47,
"last_link_id": 95,
"nodes": [
{
"id": 43,
"type": "Trellis2MeshWithVoxelToTrimesh",
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
1737.4763650560913,
612.3235144153165
172.34044277137122,
635.2670381050675
],
"size": [
289.41171875,
26
301.7261859434295,
130
],
"flags": {},
"order": 5,
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
87
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn",
"cuda",
true
]
},
{
"id": 6,
"type": "Trellis2LoadImageWithTransparency",
"pos": [
134.7157262503816,
834.9720915725163
],
"size": [
378.59551697974155,
463.3598024362732
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": null
},
{
"name": "mask",
"type": "MASK",
"links": null
},
{
"name": "image_with_alpha",
"type": "IMAGE",
"links": [
88
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "e7f9b30df7a09bcedf1c955e176754c73f983254",
"Node name for S&R": "Trellis2LoadImageWithTransparency",
"widget_ue_connectable": {}
},
"widgets_values": [
"Image_2048_00002_.png",
"image"
]
},
{
"id": 47,
"type": "Trellis2SimplifyMesh",
"pos": [
866.4482629540897,
386.39471720369016
],
"size": [
270,
82
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 83
"link": 93
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
84
95
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelToTrimesh",
"widget_ue_connectable": {}
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2SimplifyMesh"
},
"widgets_values": []
"widgets_values": [
5000000,
"Meshlib"
]
},
{
"id": 42,
"type": "Trellis2SimplifyMesh",
"id": 46,
"type": "Trellis2Remesh",
"pos": [
1357.7233866110491,
681.5441957276756
1000.0828330856959,
557.5238047089168
],
"size": [
270,
82
316.630859375,
154
],
"flags": {},
"order": 4,
@@ -60,7 +145,51 @@
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 86
"link": 95
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
92
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "7b7c73f87eb65a3ff1fd5c28bdd7d097e57eb9dc",
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2Remesh"
},
"widgets_values": [
1,
0,
true,
0.03,
"Auto"
]
},
{
"id": 42,
"type": "Trellis2SimplifyMesh",
"pos": [
1351.9548131292695,
558.4851235990978
],
"size": [
270,
82
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 92
}
],
"outputs": [
@@ -83,63 +212,19 @@
"Meshlib"
]
},
{
"id": 44,
"type": "Trellis2PostProcessMesh",
"pos": [
1018.3493663133462,
680.5829868609449
],
"size": [
303.833984375,
154
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 89
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
86
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2PostProcessMesh",
"widget_ue_connectable": {}
},
"widgets_values": [
true,
1,
0,
true,
0.03
]
},
{
"id": 10,
"type": "Preview3D",
"pos": [
1114.3566445411961,
898.2458966590575
1009.5641496496474,
763.6500296419599
],
"size": [
626.8865556299502,
658.2643216794061
],
"flags": {},
"order": 7,
"order": 8,
"mode": 0,
"inputs": [
{
@@ -203,19 +288,57 @@
""
]
},
{
"id": 43,
"type": "Trellis2MeshWithVoxelToTrimesh",
"pos": [
1648.0662046700654,
567.1377197654879
],
"size": [
336.5202391989493,
26
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 83
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
84
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelToTrimesh",
"widget_ue_connectable": {}
},
"widgets_values": []
},
{
"id": 19,
"type": "Trellis2ExportMesh",
"pos": [
1763.834116428031,
704.8389365825459
1678.2694956590033,
644.2707634178166
],
"size": [
270,
106
],
"flags": {},
"order": 6,
"order": 7,
"mode": 0,
"inputs": [
{
@@ -245,92 +368,12 @@
true
]
},
{
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
172.34044277137122,
635.2670381050675
],
"size": [
301.7261859434295,
90.65259616638991
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
87
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn"
]
},
{
"id": 6,
"type": "Trellis2LoadImageWithTransparency",
"pos": [
134.7157262503816,
834.9720915725163
],
"size": [
378.59551697974155,
463.3598024362732
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": null
},
{
"name": "mask",
"type": "MASK",
"links": null
},
{
"name": "image_with_alpha",
"type": "IMAGE",
"links": [
88
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "e7f9b30df7a09bcedf1c955e176754c73f983254",
"Node name for S&R": "Trellis2LoadImageWithTransparency",
"widget_ue_connectable": {}
},
"widgets_values": [
"Image_2048_00002_.png",
"image"
]
},
{
"id": 45,
"type": "Trellis2MeshWithVoxelAdvancedGenerator",
"pos": [
571.2986524019634,
681.544283746436
561.6847153407034,
553.6781550684681
],
"size": [
413.1841796875,
@@ -356,15 +399,15 @@
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
89
93
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator"
"Node name for S&R": "Trellis2MeshWithVoxelAdvancedGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
0,
@@ -411,14 +454,6 @@
0,
"TRIMESH"
],
[
86,
44,
0,
42,
0,
"MESHWITHVOXEL"
],
[
87,
39,
@@ -436,10 +471,26 @@
"IMAGE"
],
[
89,
92,
46,
0,
42,
0,
"MESHWITHVOXEL"
],
[
93,
45,
0,
44,
47,
0,
"MESHWITHVOXEL"
],
[
95,
47,
0,
46,
0,
"MESHWITHVOXEL"
]
@@ -452,8 +503,8 @@
"ds": {
"scale": 0.6934334949441419,
"offset": [
27.65334090619644,
-339.286108735981
16.116546017676637,
-239.3006263844426
]
},
"links_added_by_ue": [],
+285 -234
View File
@@ -1,231 +1,22 @@
{
"id": "440427ce-0c6a-4462-af51-639ed2f16dec",
"revision": 0,
"last_node_id": 44,
"last_link_id": 86,
"last_node_id": 46,
"last_link_id": 91,
"nodes": [
{
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
172.34044277137122,
635.2670381050675
],
"size": [
301.7261859434295,
90.65259616638991
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
79
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn"
]
},
{
"id": 41,
"type": "Trellis2MeshWithVoxelGenerator",
"pos": [
625.1369992088025,
700.7722458877151
],
"size": [
342.2818359375,
222
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 79
},
{
"name": "image",
"type": "IMAGE",
"link": 80
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
85
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
1903714208,
"randomize",
"1024_cascade",
12,
12,
12,
60000
]
},
{
"id": 43,
"type": "Trellis2MeshWithVoxelToTrimesh",
"pos": [
1737.4763650560913,
612.3235144153165
],
"size": [
289.41171875,
26
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 83
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
84
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelToTrimesh",
"widget_ue_connectable": {}
},
"widgets_values": []
},
{
"id": 42,
"type": "Trellis2SimplifyMesh",
"pos": [
1357.7233866110491,
681.5441957276756
],
"size": [
270,
82
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 86
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
83
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2SimplifyMesh",
"widget_ue_connectable": {}
},
"widgets_values": [
1000000,
"Meshlib"
]
},
{
"id": 44,
"type": "Trellis2PostProcessMesh",
"pos": [
1018.3493663133462,
680.5829868609449
],
"size": [
303.833984375,
154
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 85
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
86
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2PostProcessMesh",
"widget_ue_connectable": {}
},
"widgets_values": [
true,
1,
0,
true,
0.03
]
},
{
"id": 10,
"type": "Preview3D",
"pos": [
1114.3566445411961,
898.2458966590575
591.355422959564,
842.4847360343381
],
"size": [
626.8865556299502,
658.2643216794061
],
"flags": {},
"order": 7,
"order": 8,
"mode": 0,
"inputs": [
{
@@ -255,7 +46,7 @@
"ver": "0.4.0",
"Node name for S&R": "Preview3D",
"widget_ue_connectable": {},
"Last Time Model File": "Cyborg_NoTexture_00001_.glb",
"Last Time Model File": "OrcShaman_OnlyMesh_00003_.glb",
"Scene Config": {
"showGrid": true,
"backgroundColor": "#282828",
@@ -267,9 +58,9 @@
"fov": 35,
"state": {
"position": {
"x": 2.100849689958477,
"y": 3.0394995290713793,
"z": 11.18496965925252
"x": -0.19116400345772733,
"y": 4.145193779904209,
"z": 8.909632339388065
},
"target": {
"x": 0,
@@ -285,7 +76,7 @@
}
},
"widgets_values": [
"Cyborg_NoTexture_00001_.glb",
"OrcShaman_OnlyMesh_00003_.glb",
""
]
},
@@ -294,14 +85,14 @@
"type": "Trellis2LoadImageWithTransparency",
"pos": [
134.7157262503816,
834.9720915725163
886.8876685708556
],
"size": [
378.59551697974155,
463.3598024362732
],
"flags": {},
"order": 1,
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
@@ -330,23 +121,98 @@
"widget_ue_connectable": {}
},
"widgets_values": [
"Image_2048_00002_.png",
"a_stylized_orc_sorcerer_3d_game_asset.png",
"image"
]
},
{
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
205.0280576284307,
686.2212301991564
],
"size": [
301.7261859434295,
130
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
79
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn",
"cuda",
true
]
},
{
"id": 43,
"type": "Trellis2MeshWithVoxelToTrimesh",
"pos": [
1321.1903201557482,
699.8108609834646
],
"size": [
289.41171875,
26
],
"flags": {},
"order": 6,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 83
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
84
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelToTrimesh",
"widget_ue_connectable": {}
},
"widgets_values": []
},
{
"id": 19,
"type": "Trellis2ExportMesh",
"pos": [
1763.834116428031,
704.8389365825459
1316.7833144978897,
782.7123460894339
],
"size": [
270,
106
],
"flags": {},
"order": 6,
"order": 7,
"mode": 0,
"inputs": [
{
@@ -371,10 +237,187 @@
"widget_ue_connectable": {}
},
"widgets_values": [
"Cyborg_NoTexture",
"OrcShaman_OnlyMesh",
"glb",
true
]
},
{
"id": 42,
"type": "Trellis2SimplifyMesh",
"pos": [
1320.2288912421195,
554.6394079445778
],
"size": [
270,
82
],
"flags": {},
"order": 5,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 89
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
83
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2SimplifyMesh",
"widget_ue_connectable": {}
},
"widgets_values": [
1000000,
"Meshlib"
]
},
{
"id": 41,
"type": "Trellis2MeshWithVoxelGenerator",
"pos": [
586.6809869074832,
548.871098519077
],
"size": [
342.2818359375,
222
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 79
},
{
"name": "image",
"type": "IMAGE",
"link": 80
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
90
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
1751130007,
"fixed",
"1024_cascade",
12,
12,
12,
60000
]
},
{
"id": 45,
"type": "Trellis2Remesh",
"pos": [
963.5497666303972,
551.7554072646574
],
"size": [
303.833984375,
154
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 91
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
89
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "7b7c73f87eb65a3ff1fd5c28bdd7d097e57eb9dc",
"Node name for S&R": "Trellis2Remesh",
"widget_ue_connectable": {}
},
"widgets_values": [
1,
0,
true,
0.03,
"Auto"
]
},
{
"id": 46,
"type": "Trellis2SimplifyMesh",
"pos": [
823.1853261315196,
404.66131644540985
],
"size": [
270,
82
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 90
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
91
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2SimplifyMesh",
"widget_ue_connectable": {}
},
"widgets_values": [
5000000,
"Meshlib"
]
}
],
"links": [
@@ -419,18 +462,26 @@
"TRIMESH"
],
[
85,
41,
89,
45,
0,
44,
42,
0,
"MESHWITHVOXEL"
],
[
86,
44,
90,
41,
0,
42,
46,
0,
"MESHWITHVOXEL"
],
[
91,
46,
0,
45,
0,
"MESHWITHVOXEL"
]
@@ -443,8 +494,8 @@
"ds": {
"scale": 0.6934334949441419,
"offset": [
27.65334090619644,
-339.286108735981
61.30242868626569,
-266.21968976441246
]
},
"links_added_by_ue": [],
+246 -194
View File
@@ -1,22 +1,249 @@
{
"id": "440427ce-0c6a-4462-af51-639ed2f16dec",
"revision": 0,
"last_node_id": 41,
"last_link_id": 81,
"last_node_id": 42,
"last_link_id": 83,
"nodes": [
{
"id": 6,
"type": "Trellis2LoadImageWithTransparency",
"pos": [
134.7157262503816,
834.9720915725163
],
"size": [
378.59551697974155,
463.3598024362732
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": null
},
{
"name": "mask",
"type": "MASK",
"links": null
},
{
"name": "image_with_alpha",
"type": "IMAGE",
"links": [
80
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "e7f9b30df7a09bcedf1c955e176754c73f983254",
"Node name for S&R": "Trellis2LoadImageWithTransparency",
"widget_ue_connectable": {}
},
"widgets_values": [
"Image_04291_.png",
"image"
]
},
{
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
181.9544238420111,
635.2670381050675
],
"size": [
301.7261859434295,
130
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
79
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn",
"cuda",
true
]
},
{
"id": 42,
"type": "Trellis2SimplifyMesh",
"pos": [
780.8837302038206,
544.0641299884478
],
"size": [
270,
82
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 82
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
83
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "7b7c73f87eb65a3ff1fd5c28bdd7d097e57eb9dc",
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2SimplifyMesh"
},
"widgets_values": [
5000000,
"Meshlib"
]
},
{
"id": 38,
"type": "Trellis2PostProcessAndUnWrapAndRasterizer",
"pos": [
928.0919248898376,
696.0170735987202
],
"size": [
419.15234375,
370
],
"flags": {},
"order": 4,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 83
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
73
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer",
"widget_ue_connectable": {}
},
"widgets_values": [
90,
0,
1,
1,
2048,
true,
1,
0,
1000000,
"Meshlib",
true,
0.03,
"OPAQUE",
"Auto"
]
},
{
"id": 41,
"type": "Trellis2MeshWithVoxelGenerator",
"pos": [
559.7618575134443,
695.0038484434552
],
"size": [
342.2818359375,
222
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 79
},
{
"name": "image",
"type": "IMAGE",
"link": 80
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
82
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"Node name for S&R": "Trellis2MeshWithVoxelGenerator",
"widget_ue_connectable": {}
},
"widgets_values": [
0,
"randomize",
"1024_cascade",
12,
12,
12,
49152
]
},
{
"id": 19,
"type": "Trellis2ExportMesh",
"pos": [
1445.610740061347,
502.94502603344927
1258.1376470853816,
507.7520825828392
],
"size": [
270,
106
],
"flags": {},
"order": 4,
"order": 5,
"mode": 0,
"inputs": [
{
@@ -50,15 +277,15 @@
"id": 10,
"type": "Preview3D",
"pos": [
1550.8319924776888,
699.2361408227106
1374.8958704277616,
691.5449295605706
],
"size": [
626.8865556299502,
658.2643216794061
],
"flags": {},
"order": 5,
"order": 6,
"mode": 0,
"inputs": [
{
@@ -121,189 +348,6 @@
"Home_2K_00001_.glb",
""
]
},
{
"id": 38,
"type": "Trellis2PostProcessAndUnWrapAndRasterizer",
"pos": [
1052.1124699414247,
699.8626572251001
],
"size": [
419.15234375,
346
],
"flags": {},
"order": 3,
"mode": 0,
"inputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"link": 81
}
],
"outputs": [
{
"name": "trimesh",
"type": "TRIMESH",
"links": [
73
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2PostProcessAndUnWrapAndRasterizer",
"widget_ue_connectable": {}
},
"widgets_values": [
90,
0,
1,
1,
2048,
true,
1,
0,
1000000,
"Meshlib",
true,
0.03,
"OPAQUE"
]
},
{
"id": 39,
"type": "Trellis2LoadModel",
"pos": [
172.34044277137122,
635.2670381050675
],
"size": [
301.7261859434295,
90.65259616638991
],
"flags": {},
"order": 0,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"links": [
79
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "c5d66aa46bf1bbf903fd4fe9ff086ac774bb7e03",
"Node name for S&R": "Trellis2LoadModel",
"widget_ue_connectable": {}
},
"widgets_values": [
"TRELLIS.2-4B",
"flash_attn"
]
},
{
"id": 6,
"type": "Trellis2LoadImageWithTransparency",
"pos": [
134.7157262503816,
834.9720915725163
],
"size": [
378.59551697974155,
463.3598024362732
],
"flags": {},
"order": 1,
"mode": 0,
"inputs": [],
"outputs": [
{
"name": "image",
"type": "IMAGE",
"links": null
},
{
"name": "mask",
"type": "MASK",
"links": null
},
{
"name": "image_with_alpha",
"type": "IMAGE",
"links": [
80
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "e7f9b30df7a09bcedf1c955e176754c73f983254",
"Node name for S&R": "Trellis2LoadImageWithTransparency",
"widget_ue_connectable": {}
},
"widgets_values": [
"Image_04291_.png",
"image"
]
},
{
"id": 41,
"type": "Trellis2MeshWithVoxelGenerator",
"pos": [
625.1369992088025,
700.7722458877151
],
"size": [
342.2818359375,
222
],
"flags": {},
"order": 2,
"mode": 0,
"inputs": [
{
"name": "pipeline",
"type": "TRELLIS2PIPELINE",
"link": 79
},
{
"name": "image",
"type": "IMAGE",
"link": 80
}
],
"outputs": [
{
"name": "mesh",
"type": "MESHWITHVOXEL",
"links": [
81
]
}
],
"properties": {
"aux_id": "visualbruno/ComfyUI-Trellis2",
"ver": "a28d6cf93b0cf24aa9e7d3dccfd14f406227fbd0",
"widget_ue_connectable": {},
"Node name for S&R": "Trellis2MeshWithVoxelGenerator"
},
"widgets_values": [
0,
"randomize",
"1024_cascade",
12,
12,
12,
49152
]
}
],
"links": [
@@ -340,9 +384,17 @@
"IMAGE"
],
[
81,
82,
41,
0,
42,
0,
"MESHWITHVOXEL"
],
[
83,
42,
0,
38,
0,
"MESHWITHVOXEL"
@@ -356,8 +408,8 @@
"ds": {
"scale": 0.6934334949441419,
"offset": [
33.42173835045634,
-244.1074188775531
100.71973787307515,
-285.44762990100236
]
},
"links_added_by_ue": [],
+148 -82
View File
@@ -366,15 +366,13 @@ class Trellis2PostProcessMesh:
return {
"required": {
"mesh": ("MESHWITHVOXEL",),
# "mesh_cluster_threshold_cone_half_angle_rad": ("FLOAT",{"default":90.0,"min":0.0,"max":359.9}),
# "mesh_cluster_refine_iterations": ("INT",{"default":0}),
# "mesh_cluster_global_iterations": ("INT",{"default":1}),
# "mesh_cluster_smooth_strength": ("INT",{"default":1}),
"remesh": ("BOOLEAN",{"default":True}),
"remesh_band": ("FLOAT",{"default":1.0}),
"remesh_project": ("FLOAT",{"default":0.0}),
"fill_holes": ("BOOLEAN", {"default":True}),
"fill_holes_max_perimeter": ("FLOAT",{"default":0.03,"min":0.001,"max":99.999,"step":0.001}),
"remove_duplicate_faces": ("BOOLEAN",{"default":True}),
"repair_non_manifold_edges": ("BOOLEAN", {"default":True}),
"remove_non_manifold_faces": ("BOOLEAN", {"default":True}),
"remove_small_connected_components": ("BOOLEAN", {"default":True}),
"remove_small_connected_components_size": ("FLOAT", {"default":0.00001,"min":0.00001,"max":9.99999,"step":0.00001}),
},
}
@@ -384,39 +382,9 @@ class Trellis2PostProcessMesh:
CATEGORY = "Trellis2Wrapper"
OUTPUT_NODE = True
def process(self, mesh, remesh, remesh_band, remesh_project, fill_holes, fill_holes_max_perimeter):
aabb = [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]]
def process(self, mesh, fill_holes, fill_holes_max_perimeter, remove_duplicate_faces, repair_non_manifold_edges, remove_non_manifold_faces, remove_small_connected_components, remove_small_connected_components_size):
vertices = mesh.vertices
faces = mesh.faces
attr_volume = mesh.attrs
coords = mesh.coords
attr_layout = mesh.layout
voxel_size = mesh.voxel_size
# --- Input Normalization (AABB, Voxel Size, Grid Size) ---
if isinstance(aabb, (list, tuple)):
aabb = np.array(aabb)
if isinstance(aabb, np.ndarray):
aabb = torch.tensor(aabb, dtype=torch.float32, device=coords.device)
# Calculate grid dimensions based on AABB and voxel size
if voxel_size is not None:
if isinstance(voxel_size, float):
voxel_size = [voxel_size, voxel_size, voxel_size]
if isinstance(voxel_size, (list, tuple)):
voxel_size = np.array(voxel_size)
if isinstance(voxel_size, np.ndarray):
voxel_size = torch.tensor(voxel_size, dtype=torch.float32, device=coords.device)
grid_size = ((aabb[1] - aabb[0]) / voxel_size).round().int()
else:
if isinstance(grid_size, int):
grid_size = [grid_size, grid_size, grid_size]
if isinstance(grid_size, (list, tuple)):
grid_size = np.array(grid_size)
if isinstance(grid_size, np.ndarray):
grid_size = torch.tensor(grid_size, dtype=torch.int32, device=coords.device)
voxel_size = (aabb[1] - aabb[0]) / grid_size
# Move data to GPU
vertices = vertices.cuda()
@@ -427,52 +395,28 @@ class Trellis2PostProcessMesh:
cumesh.init(vertices, faces)
print(f"Current vertices: {cumesh.num_vertices}, faces: {cumesh.num_faces}")
# --- Initial Mesh Cleaning ---
# Fills holes as much as we can before processing
if fill_holes:
cumesh.fill_holes(max_hole_perimeter=fill_holes_max_perimeter)
print(f"After filling holes: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
if remove_duplicate_faces:
print('Removing duplicate faces ...')
mesh.remove_duplicate_faces()
if repair_non_manifold_edges:
print('Repairing non manifold edges ...')
mesh.repair_non_manifold_edges()
if remove_non_manifold_faces:
print('Removing non manifold faces ...')
mesh.remove_non_manifold_faces()
if remove_small_connected_components:
print('Removing small connected components ...')
mesh.remove_small_connected_components(remove_small_connected_components_size)
vertices, faces = cumesh.read()
# Build BVH for the current mesh to guide remeshing
print(f"Building BVH for current mesh...")
bvh = CuMesh.cuBVH(vertices, faces)
print("Cleaning mesh...")
# --- Branch 1: Standard Pipeline (Simplification & Cleaning) ---
if not remesh:
# Step 1: Clean up topology (duplicates, non-manifolds, isolated parts)
cumesh.remove_duplicate_faces()
cumesh.repair_non_manifold_edges()
cumesh.remove_small_connected_components(1e-5)
if fill_holes:
cumesh.fill_holes(max_hole_perimeter=fill_holes_max_perimeter)
print(f"After initial cleanup: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
print(f"After initial cleanup: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
# --- Branch 2: Remeshing Pipeline ---
else:
center = aabb.mean(dim=0)
scale = (aabb[1] - aabb[0]).max().item()
resolution = grid_size.max().item()
# Perform Dual Contouring remeshing (rebuilds topology)
cumesh.init(*CuMesh.remeshing.remesh_narrow_band_dc(
vertices, faces,
center = center,
scale = (resolution + 3 * remesh_band) / resolution * scale,
resolution = resolution,
band = remesh_band,
project_back = remesh_project, # Snaps vertices back to original surface
verbose = True,
bvh = bvh,
))
print(f"After remeshing: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
# Step 2: Unify face orientations
cumesh.unify_face_orientations()
new_vertices, new_faces = cumesh.read()
@@ -745,6 +689,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
"fill_holes": ("BOOLEAN", {"default":True}),
"fill_holes_max_perimeter": ("FLOAT",{"default":0.03,"min":0.001,"max":99.999,"step":0.001}),
"texture_alpha_mode": (["OPAQUE","MASK","BLEND"],{"default":"OPAQUE"}),
"dual_contouring_resolution": (["Auto","128","256","512","1024","2048"],{"default":"Auto"}),
},
}
@@ -754,7 +699,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
CATEGORY = "Trellis2Wrapper"
OUTPUT_NODE = True
def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size, remesh, remesh_band, remesh_project, target_face_num, simplify_method, fill_holes, fill_holes_max_perimeter, texture_alpha_mode):
def process(self, mesh, mesh_cluster_threshold_cone_half_angle_rad, mesh_cluster_refine_iterations, mesh_cluster_global_iterations, mesh_cluster_smooth_strength, texture_size, remesh, remesh_band, remesh_project, target_face_num, simplify_method, fill_holes, fill_holes_max_perimeter, texture_alpha_mode, dual_contouring_resolution):
aabb = [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]]
vertices = mesh.vertices
@@ -830,7 +775,12 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
else:
center = aabb.mean(dim=0)
scale = (aabb[1] - aabb[0]).max().item()
resolution = grid_size.max().item()
if dual_contouring_resolution == "Auto":
resolution = grid_size.max().item()
print(f"Dual Contouring resolution: {resolution}")
else:
resolution = int(dual_contouring_resolution)
print(f"Dual Contouring resolution: {resolution}")
# Perform Dual Contouring remeshing (rebuilds topology)
@@ -973,7 +923,121 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
torch.cuda.empty_cache()
gc.collect()
return (textured_mesh,)
return (textured_mesh,)
class Trellis2Remesh:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"mesh": ("MESHWITHVOXEL",),
"remesh_band": ("FLOAT",{"default":1.0}),
"remesh_project": ("FLOAT",{"default":0.0}),
"fill_holes": ("BOOLEAN", {"default":True}),
"fill_holes_max_perimeter": ("FLOAT",{"default":0.03,"min":0.001,"max":99.999,"step":0.001}),
"dual_contouring_resolution": (["Auto","128","256","512","1024","2048"],{"default":"Auto"}),
},
}
RETURN_TYPES = ("MESHWITHVOXEL",)
RETURN_NAMES = ("mesh",)
FUNCTION = "process"
CATEGORY = "Trellis2Wrapper"
OUTPUT_NODE = True
def process(self, mesh, remesh_band, remesh_project, fill_holes, fill_holes_max_perimeter, dual_contouring_resolution):
aabb = [[-0.5, -0.5, -0.5], [0.5, 0.5, 0.5]]
vertices = mesh.vertices
faces = mesh.faces
attr_volume = mesh.attrs
coords = mesh.coords
attr_layout = mesh.layout
voxel_size = mesh.voxel_size
# --- Input Normalization (AABB, Voxel Size, Grid Size) ---
if isinstance(aabb, (list, tuple)):
aabb = np.array(aabb)
if isinstance(aabb, np.ndarray):
aabb = torch.tensor(aabb, dtype=torch.float32, device=coords.device)
# Calculate grid dimensions based on AABB and voxel size
if voxel_size is not None:
if isinstance(voxel_size, float):
voxel_size = [voxel_size, voxel_size, voxel_size]
if isinstance(voxel_size, (list, tuple)):
voxel_size = np.array(voxel_size)
if isinstance(voxel_size, np.ndarray):
voxel_size = torch.tensor(voxel_size, dtype=torch.float32, device=coords.device)
grid_size = ((aabb[1] - aabb[0]) / voxel_size).round().int()
else:
if isinstance(grid_size, int):
grid_size = [grid_size, grid_size, grid_size]
if isinstance(grid_size, (list, tuple)):
grid_size = np.array(grid_size)
if isinstance(grid_size, np.ndarray):
grid_size = torch.tensor(grid_size, dtype=torch.int32, device=coords.device)
voxel_size = (aabb[1] - aabb[0]) / grid_size
# Move data to GPU
vertices = vertices.cuda()
faces = faces.cuda()
# Initialize CUDA mesh handler
cumesh = CuMesh.CuMesh()
cumesh.init(vertices, faces)
print(f"Current vertices: {cumesh.num_vertices}, faces: {cumesh.num_faces}")
# --- Initial Mesh Cleaning ---
# Fills holes as much as we can before processing
if fill_holes:
cumesh.fill_holes(max_hole_perimeter=fill_holes_max_perimeter)
print(f"After filling holes: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
vertices, faces = cumesh.read()
# Build BVH for the current mesh to guide remeshing
print(f"Building BVH for current mesh...")
bvh = CuMesh.cuBVH(vertices, faces)
print("Cleaning mesh...")
center = aabb.mean(dim=0)
scale = (aabb[1] - aabb[0]).max().item()
if dual_contouring_resolution == "Auto":
resolution = grid_size.max().item()
print(f"Dual Contouring resolution: {resolution}")
else:
resolution = int(dual_contouring_resolution)
# Perform Dual Contouring remeshing (rebuilds topology)
cumesh.init(*CuMesh.remeshing.remesh_narrow_band_dc(
vertices, faces,
center = center,
scale = (resolution + 3 * remesh_band) / resolution * scale,
resolution = resolution,
band = remesh_band,
project_back = remesh_project, # Snaps vertices back to original surface
verbose = True,
bvh = bvh,
))
print(f"After remeshing: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
# Step 2: Unify face orientations
cumesh.unify_face_orientations()
new_vertices, new_faces = cumesh.read()
mesh.vertices = new_vertices.to(mesh.device)
mesh.faces = new_faces.to(mesh.device)
del cumesh
mm.soft_empty_cache()
torch.cuda.empty_cache()
gc.collect()
return (mesh,)
NODE_CLASS_MAPPINGS = {
"Trellis2LoadModel": Trellis2LoadModel,
@@ -986,6 +1050,7 @@ NODE_CLASS_MAPPINGS = {
"Trellis2UnWrapAndRasterizer": Trellis2UnWrapAndRasterizer,
"Trellis2MeshWithVoxelAdvancedGenerator": Trellis2MeshWithVoxelAdvancedGenerator,
"Trellis2PostProcessAndUnWrapAndRasterizer": Trellis2PostProcessAndUnWrapAndRasterizer,
"Trellis2Remesh": Trellis2Remesh,
}
NODE_DISPLAY_NAME_MAPPINGS = {
@@ -999,4 +1064,5 @@ NODE_DISPLAY_NAME_MAPPINGS = {
"Trellis2UnWrapAndRasterizer": "Trellis2 - UV Unwrap and Rasterize",
"Trellis2MeshWithVoxelAdvancedGenerator": "Trellis2 - Mesh With Voxel Advanced Generator",
"Trellis2PostProcessAndUnWrapAndRasterizer": "Trellis2 - Post Process/UnWrap and Rasterize",
"Trellis2Remesh": "Trellis2 - Remesh",
}