Fixed "Vertical Lines" bug - Removed "fill_holes" parameters
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
|
||||
| Date | Description |
|
||||
| --- | --- |
|
||||
| **2026-02-21** | Fixed "Vertical lines" bug |
|
||||
| **2026-02-17** | Disabled Triton Cache (trying to fix vertical lines bug)<br>Fixed "Weld Vertices"<br>Added "Reconstruct Mesh with Quad" node |
|
||||
| **2026-02-13** | Added the node "Weld Vertices"<br>Added the resolution 1536 for "Mesh Texturing" |
|
||||
| **2026-02-12** | Added the node "Mesh With Voxel Multi-View Generator" |
|
||||
@@ -45,19 +46,9 @@
|
||||
||Applied latest fixes from Microsoft|
|
||||
| **2026-01-05** |Implemented "Tiled" Decoder|
|
||||
||Updated Cumesh and O_voxel|
|
||||
|
||||
---
|
||||
|
||||
## WARNING ##
|
||||
|
||||
Many users reported that their is a bug with mesh generation like on this picture:
|
||||
<img width="666" height="752" alt="image" src="https://github.com/user-attachments/assets/ce11c61d-a1c2-40c9-a698-b6330dd19953" />
|
||||
|
||||
I did not find yet the root cause of this problem.
|
||||
|
||||
For the moment, the only solution is to restart ComfyUI.
|
||||
|
||||
---
|
||||
|
||||
## REQUIREMENTS ##
|
||||
|
||||
You need to have access to facebook dinov3 models in order to use Trellis.2
|
||||
|
||||
@@ -779,9 +779,7 @@ class Trellis2PostProcessMesh:
|
||||
def INPUT_TYPES(s):
|
||||
return {
|
||||
"required": {
|
||||
"mesh": ("MESHWITHVOXEL",),
|
||||
"fill_holes": ("BOOLEAN", {"default":False}),
|
||||
"fill_holes_max_perimeter": ("FLOAT",{"default":0.03,"min":0.001,"max":99.999,"step":0.001}),
|
||||
"mesh": ("MESHWITHVOXEL",),
|
||||
"remove_duplicate_faces": ("BOOLEAN",{"default":False}),
|
||||
"repair_non_manifold_edges": ("BOOLEAN", {"default":False}),
|
||||
"remove_non_manifold_faces": ("BOOLEAN", {"default":False}),
|
||||
@@ -804,8 +802,6 @@ class Trellis2PostProcessMesh:
|
||||
|
||||
def process(self,
|
||||
mesh,
|
||||
fill_holes,
|
||||
fill_holes_max_perimeter,
|
||||
remove_duplicate_faces,
|
||||
repair_non_manifold_edges,
|
||||
remove_non_manifold_faces,
|
||||
@@ -836,10 +832,6 @@ class Trellis2PostProcessMesh:
|
||||
cumesh = CuMesh.CuMesh()
|
||||
cumesh.init(vertices, faces)
|
||||
print(f"Current vertices: {cumesh.num_vertices}, faces: {cumesh.num_faces}")
|
||||
|
||||
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 ...')
|
||||
@@ -1523,20 +1515,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
|
||||
# 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()
|
||||
|
||||
# BVH is coming from MeshWithVoxel Generator node
|
||||
# print(f"Building BVH for current mesh...")
|
||||
# bvh = CuMesh.cuBVH(vertices, faces)
|
||||
# bvh.vertices = vertices
|
||||
# bvh.faces = faces
|
||||
print(f"Current vertices: {cumesh.num_vertices}, faces: {cumesh.num_faces}")
|
||||
|
||||
pbar.update(1)
|
||||
|
||||
@@ -1555,9 +1534,6 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
|
||||
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)
|
||||
|
||||
if simplify_method == 'Cumesh':
|
||||
cumesh.simplify(target_face_num, verbose=True)
|
||||
elif simplify_method == 'Meshlib':
|
||||
@@ -1568,10 +1544,7 @@ class Trellis2PostProcessAndUnWrapAndRasterizer:
|
||||
|
||||
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)
|
||||
cumesh.remove_small_connected_components(1e-5)
|
||||
|
||||
print(f"After initial cleanup: {cumesh.num_vertices} vertices, {cumesh.num_faces} faces")
|
||||
|
||||
@@ -1899,8 +1872,6 @@ class Trellis2Remesh:
|
||||
"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"}),
|
||||
"remove_floaters": ("BOOLEAN",{"default":True}),
|
||||
"remove_inner_faces": ("BOOLEAN",{"default":False}),
|
||||
@@ -1913,7 +1884,7 @@ class Trellis2Remesh:
|
||||
CATEGORY = "Trellis2Wrapper"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def process(self, mesh, remesh_band, remesh_project, fill_holes, fill_holes_max_perimeter, dual_contouring_resolution, remove_floaters, remove_inner_faces):
|
||||
def process(self, mesh, remesh_band, remesh_project, dual_contouring_resolution, remove_floaters, remove_inner_faces):
|
||||
reset_cuda()
|
||||
|
||||
mesh_copy = copy.deepcopy(mesh)
|
||||
@@ -1961,13 +1932,7 @@ class Trellis2Remesh:
|
||||
# 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")
|
||||
print(f"Current vertices: {cumesh.num_vertices}, faces: {cumesh.num_faces}")
|
||||
|
||||
vertices, faces = cumesh.read()
|
||||
|
||||
@@ -2764,8 +2729,6 @@ class Trellis2RemeshWithQuad:
|
||||
"mesh": ("MESHWITHVOXEL",),
|
||||
"remesh_band": ("FLOAT",{"default":1.0}),
|
||||
"remesh_project": ("FLOAT",{"default":0.0}),
|
||||
"fill_holes": ("BOOLEAN", {"default":False}),
|
||||
"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"}),
|
||||
"remove_floaters": ("BOOLEAN",{"default":True}),
|
||||
"remove_inner_faces": ("BOOLEAN",{"default":True}),
|
||||
@@ -2778,7 +2741,7 @@ class Trellis2RemeshWithQuad:
|
||||
CATEGORY = "Trellis2Wrapper"
|
||||
OUTPUT_NODE = True
|
||||
|
||||
def process(self, mesh, remesh_band, remesh_project, fill_holes, fill_holes_max_perimeter, dual_contouring_resolution, remove_floaters, remove_inner_faces):
|
||||
def process(self, mesh, remesh_band, remesh_project, dual_contouring_resolution, remove_floaters, remove_inner_faces):
|
||||
reset_cuda()
|
||||
|
||||
mesh_copy = copy.deepcopy(mesh)
|
||||
@@ -2828,12 +2791,6 @@ class Trellis2RemeshWithQuad:
|
||||
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()
|
||||
|
||||
del cumesh
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
[project]
|
||||
name = "trellis2"
|
||||
description = "ComfyUI Wrapper for Microsoft Trellis.2 - Native and Compact Structured Latents for 3D Generation"
|
||||
version = "1.0.10"
|
||||
version = "1.0.11"
|
||||
license = {file = "LICENSE"}
|
||||
# classifiers = [
|
||||
# # For OS-independent nodes (works on all operating systems)
|
||||
|
||||
@@ -818,7 +818,6 @@ class Trellis2ImageTo3DPipeline(Pipeline):
|
||||
self._cleanup_cuda()
|
||||
out_mesh = []
|
||||
for m in meshes:
|
||||
m.fill_holes()
|
||||
out_mesh.append(
|
||||
MeshWithVoxel(
|
||||
m.vertices, m.faces,
|
||||
@@ -838,7 +837,6 @@ class Trellis2ImageTo3DPipeline(Pipeline):
|
||||
self._cleanup_cuda()
|
||||
out_mesh = []
|
||||
for m, v in zip(meshes, tex_voxels):
|
||||
m.fill_holes()
|
||||
out_mesh.append(
|
||||
MeshWithVoxel(
|
||||
m.vertices, m.faces,
|
||||
|
||||
Reference in New Issue
Block a user