Split the nodes Remesh and PostProcess + added dual_contouring_resolution parameter + updated wheels
This commit is contained in:
+177
-125
@@ -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": [],
|
||||
|
||||
@@ -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": [],
|
||||
|
||||
@@ -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
@@ -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": [],
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user