Blenderforum
Alternative zu Boolean Modifier im Select Mode - Druckversion

+- Blenderforum (https://blender-forum.de/forum)
+-- Forum: Blender Hilfe (https://blender-forum.de/forum/forumdisplay.php?fid=4)
+--- Forum: Support (https://blender-forum.de/forum/forumdisplay.php?fid=5)
+--- Thema: Alternative zu Boolean Modifier im Select Mode (/showthread.php?tid=815)



Alternative zu Boolean Modifier im Select Mode - phoeph - 17.12.2024

Liebes Forum, 

ich habe Folgendes vor, und brauche Eure Hilfe: 

Das ganze läuft in 2 Schritten. 
  • 1. Schritt: Eine organische (nicht rechtwinklige) Form, in diesem Beispiel nehme ich eine Sphäre, wird zuerst aus "Würfeln" nachgebaut, etwa wie bei Minecraft. In wirklichkeit sind die Formen aber sehr viel komplexer, und bestehen aus etwa 10.000 bis 50.000 Würfeln. 
  • Die Formen haben immer eine Wandstärke, sind also nicht massiv (mach ich mit dem Solidify Modifier)
  • Die organische Form wird also aus Würfeln nachgebaut, die in einem festen Raster eingeordnet sind. Bis hier hab ich alles unter Kontrolle, das Zwischenergebnis sieht dann etwa so aus: 
  • Ausgangs-Objekt: [Bild: p.png?is_prewarmed=true]
  • Zwischenstand aus Würfeln: [Bild: p.png?is_prewarmed=true]
  • Jetzt zu meinem Problem, der zweite Schritt
  • 2. Schritt: Anschließend, sollen diese in einem festen Raster aufgebauten Würfel aber von der Oberfläche der Sphäre beschnitten werden, so dass alle Würfel, die mit den Oberflächen der Sphäre in Kontakt sind nun beschnitten sind. Nur innerhalb der Wände der Sphäre sind dann noch vollständige Würfel. Hier ein Bild, um zu veranschaulichen, was ich meine, auf diesem habe ich ein beschnittenes Würfelsegment herausgenommen, um alles zu verdeutlichen: [Bild: p.png?is_prewarmed=true]
  • Für diesen 2. Schritt hatte ich ein Script geschrieben, was den Boolean Modifier im Intersect-Modus nutzt, und das mit jedem einzelnen Würfel. Bei bis zu etwa 500 bis 1000 Würfeln funktioniert das super. Aber mein letztes Objekt war etwa 17.000 Würfel. 
  • Bei dieser Menge von Würfeln dauert der Prozess nur nicht einfach proportional länger, sondern auf einmal dauert jedes einzelne Intersect bis zu 4 Sekunden, wo ich vorher etwa 5 Intersects pro Sekunde hatte. Ich denke das liegt daran, dass natürlich das Hauptobjekt bei 17.000 Würfeln auch sehr viel größer ist und eben komplexer als eine Sphäre. 

Ich habe gelesen, dass der Boolean Modifier einfach nicht besonders performant ist. Daher die Frage: 

Wie würdet ihr das lösen? 

Noch eine relevante Info: Die Ergebnisse der beiden oben benannten Schritte brauche ich beide als Zwischenergebnis. 

Und noch ein paar Ansätze, die ich gerade verfolge, gebt mir da gerne auch Feedback bzw. Anregungen: 
  • Statt die Würfel mit dem komplexen organischen Objekt zu beschneiden, könnte ich einfach das komplexe organische Objekt in Würfel "zerschneiden", ein bisschen so, wie wenn man es in alle Richtungen durch ein "Gitter" pressen würde. Ich weiß allerdings nicht wie ich das am besten angehen würde, ich vermute aber mit Knife Project. Damit würde ich es zwar aus allen Perspektiven geschnitten bekommen, aber wie mache ich aus diesen dann wiederum einzelne Würfel?
  • Ich hatte bereits versucht das komplexe große organische Objekt in mehrere kleinere Teile zu zerschneiden, und diese dann mit dem Boolean-Modifier und den Würfel zu "intersecten", aber das hat die Performance nur kaum verbessert. 

Ich hoffe, das lässt sich lösen Lächeln


RE: Alternative zu Boolean Modifier im Select Mode - troggel - 18.12.2024

Ich denke du iterierst durch die Würfel mit einer Schleife? Dann könntest du in jedem Schleifendurchlauf den Boolean applien. Ist dann aber halt destruktiv. Wenn du den vorher und nachher Zustand brauchst, vorher die Objekte kopieren. Mit 17.000 Boolean Modifiern habe ich noch nicht hantiert...


RE: Alternative zu Boolean Modifier im Select Mode - phoeph - 18.12.2024

Ja, genau, ich mach das mit einer Schleife. Und genau dein Vorschlag mach ich auch schon: Mach jeder Runde direkt den Modifier anwenden. Ich habe das in der Zwischenzeit auch schon weiter untersucht, und rausgefunden, dass das Hinzufügen des Modifiers am längsten dauert. Hier mal mein Code:

Code:
import bpy


counter = 0

active_object = bpy.data.collections['Objects'].objects[0]


def boolean(mode, mainObj, otherObj):
    bpy.context.view_layer.objects.active=mainObj
    mainObj.select_set(True)
    
    bpy.ops.object.modifier_add(type='BOOLEAN')
    bpy.context.object.modifiers["Boolean"].object = otherObj
    bpy.context.object.modifiers["Boolean"].operation = mode
    bpy.context.object.modifiers["Boolean"].solver = 'FAST'
    bpy.ops.object.modifier_apply(modifier="Boolean")
    mainObj.select_set(False)


for objcol in bpy.data.collections['CubeSlicedObject'].objects:
  
    boolean("INTERSECT",objcol, active_object)
    print ("Cube", counter, " of ", totalCubes)
    
    counter+=1



RE: Alternative zu Boolean Modifier im Select Mode - troggel - 19.12.2024

Versuch doch mal die Cubes vorher in ein Objekt zu "joinen". Einen Versuch wäre es wert. Dann brauchst du nur einen Boolean.


RE: Alternative zu Boolean Modifier im Select Mode - phoeph - 20.12.2024

So, liebe Leute, ich hab die Lösung jetzt so weit, dass ich etwa 30 Minuten für die gesamte Verarbeitung aller 20.000 Würfel brauche. Für alle die es interessiert, hier mein funktionierender Ansatz:

- Ich nutze Bisect um das Objekt aus auf allen Achsen jeweils in der Würfelgröße zu zerschneiden.
- Auf der Y Achse ergeben sich dadurch erstmal "Scheiben" mit einer Dicke von 20 mm
- auf der X Achse ergeben sich dann "Stangen" mit einer Dicke von 20x20 mm
- auf der Z-Achse ergeben sich dann die Würfel

Dabei nutze ich den Vorteil, dass ich je Achse einfach alle Objekte gleichzeitig in den Edit-Mode versetze, und dann Bisect auf alle alle Objekte anwenden kann.

Den Code würde ich euch gerne ersparen, weil er Kraut und Rüben ist, kann ich aber gerne schicken, wenn jamand direkt anfragt.