2013-05-18 6 views
5

Beginnend mit einem einzelnen Würfel, habe ich einige Eigenschaften (Material, Farbe, Reflexionsattribute) geändert und dann das Objekt in ein Dutzend Würfel dupliziert und sie in die Szene gelegt. Nach dem Rendern möchte ich die Farbe von allen ändern. Wie mache ich das effizient?Wie kann ich denselben Parameter für mehrere Objekte in Blender effizient ändern?

ich gefunden habe mehrere Möglichkeiten, bereits:

  1. Im Objektmodus, wählen Sie alle Objekte (B, dann rechteckig wählen), kommen Sie mit den Maschen ctrl-j, ändern die Farbe, tab in den Bearbeitungsmodus, P die trennen Objekte wieder. Dies ist durchaus möglich, da sich die Maschen aller meiner Objekte nicht berühren. Basics docs
  2. Jemand schrieb ein Python-Skript ähnliche Dinge zu tun, here

Nummer 1 fehleranfällig ist und zu langweilig für den regelmäßigen Gebrauch. Nummer 2 ist spezialisierter und viel schlimmer. Das Auswählen mehrerer Objekte und das Ändern des Werts funktionieren nicht, da die Eigenschaftsauswahl nur für das aktive Objekt gilt, das nur eines der ausgewählten Objekte ist.

Da dies ein häufiger Anwendungsfall ist, vermisse ich wahrscheinlich den einfachen Weg. Was ist es?

+1

Für diejenigen von euch, die in dieser Frage wie ich frage mich, hier ist die aktualisierte Version: https: // Mixer. stackexchange.com/questions/6015/applying-numeric-input-attribute-changes-on-multiple-objects-at-the-same-time –

Antwort

9

Während ich die vielbevorzugte einfache Schaltfläche oder GUI-Lösung nicht gefunden habe, stellte sich heraus, dass das Hacken Ihres eigenen Python-Codes in Blender einfacher ist als man denkt.

Die Würfel, mit denen ich arbeite, sind eher Dominosteine. Anschließend haben alle Objekte, die wie Dominosteine ​​aussehen, einen Namen, der mit "Domino" beginnt. Es ist sehr einfach, alle Objekte in einer Szene zu verändern, basierend auf ihren Namen:

for o in bpy.data.objects: 
    if not "Domino" in o.name: 
     continue 
    o.rigid_body.mass = 500 
    o.rigid_body.friction = 0.4 
    o.rigid_body.restitution = 0.95 
    o.rigid_body.angular_damping = 0.2 
    o.rigid_body.linear_damping = 0.05 

diesen Code zu verwenden, habe ich einfach ein neues Fenster geöffnet (ziehen Sie das kleine obere rechte Dreieck-Symbol auf jedem vorhandenen Blender Fenster), die geändert Wählen Sie als Fenstertyp "Python-Konsole" aus (wählen Sie das Symbol für den unteren linken Fenstertyp), und fügen Sie den obigen Code ein.

Der Code kann in einem externen Texteditor bearbeitet werden. Alternativ kann man in Blender auch ein Texteditorfenster öffnen. Beim Speichern einer Szene werden sowohl die Python-Konsole als auch der interne Texteditor entlang des 3D-Modells gespeichert, was für einen sehr schönen Arbeitsablauf sorgt.

Das Finden der korrekten Objektnamen - wie bpy.data.objects["Domino.033"].rigid_body.mass ist sehr einfach, weil Blender diese zeigt, wenn Sie mit dem Mauszeiger über irgendein Formulareingabefeld fahren. Wenn Sie ein Objekt identifiziert haben, verwenden Sie die Funktion dir() von Python, um eine Liste aller bekannten Methoden und Attribute eines Objekts zu erhalten. Es kann mehr geben, als die GUI zu ändern oder zu verwenden erlaubt.

Das war viel einfacher als ich dachte. Es erklärt wahrscheinlich, warum man sich eine komplexe Manipulation vorstellen kann, für die es kein GUI-Element gibt - es ist einfach viel einfacher im Code zu handhaben. Ich werde das wahrscheinlich verwenden, um Objekte entlang von Linien, Kreisen und Spiralen zu duplizieren und zu positionieren, anstatt Blenders eigene Array-Attribute zu verwenden. Es wird leichter spätere Positionseinstellungen ermöglichen.

1

Ich bin gespannt, warum Sie nicht einfach ein Material tunen konnten. Blender macht es sehr einfach, die Elemente eines Objekts wiederzuverwenden. Sie können 100 Objekte haben, die sich ein einzelnes Netz teilen. Sie können 100 Meshes haben, die sich ein Set aus 4 Materialien teilen.

Ich stelle mir vor, eine Reihe von Dominos hätte 21 Maschen (für alle 1-6 x 1-6 Kombinationen).Diese Netze hätten 2 oder 3 Materialien (eines für die Kerne und ein oder zwei mehr für den Körper). Wenn Sie richtig verknüpft sind, können Sie die Farbe aller Pips ändern, indem Sie das Material ändern, das von allen Gittern verwendet wird.

Die Verwendung von Python zum Bulk-Modify-Objekt ist sehr leistungsfähig und für sehr viele Probleme geeignet, aber manchmal ist die Lösung einfacher.

+0

Vielen Dank für die Benachrichtigung über die Fähigkeit, Materialdefinitionen über Objekte hinweg zu teilen. Das muss ich mal testen. Die tatsächliche Anwendung hier ist viel einfacher als das, was Sie sich vorstellten, weil dies im Grunde nur Boxen für Domino-Kippen sind, nicht die Schwarz-Weiß-Typ Dominos mit Pips auf ihnen. Ein Problem bei den Simulationen besteht darin, dass sich die Reibung für ruhende und sich bewegende Objekte unterschiedlich verhält, und was ich simuliert habe, ist ein bisschen zu weit außerhalb der Realität (wahrscheinlich auch Benutzerfehler). Schließlich habe ich dieses spezielle Projekt vorerst aufgegeben. – cfi

+0

Wie weisen Sie ein Material am Anfang mehreren Objekten zu? Wenn verschiedene Objekte ausgewählt sind, kann nur das aktive Objekt das Material zugewiesen bekommen. – mins

+0

Wählen Sie mehrere Objekte aus, stellen Sie sicher, dass das Objekt mit den gewünschten Materialien das aktive Objekt ist. Verwenden Sie Ctrl-L, um das Make LInk-Menü aufzurufen und den Material-Operator zu wählen. –

2

Hier ist ein Blender 3D Tipp kopieren möchten : Um an einer Reihe von Objekten gleichzeitig zu arbeiten, aktivieren Sie das Plugin "Attribute kopieren", das mit Blender ausgeliefert wird, aber nicht standardmäßig aktiviert ist: Öffnen Sie "Benutzereinstellungen", klicken Sie auf "Addons" und suchen Sie nach "Attribute kopieren" finde das Plugin "3D-Ansicht: Attribute kopieren". Aktivieren Sie das Plugin und schließen Sie die Einstellungen.

So verwenden Sie :, in der 3D-Ansicht ein oder mehrere TARGET-Objekte auswählen und dann das SOURCE-Objekt auswählen. Drücken Sie "Strg-C" auf der Tastatur und sehen Sie sich das Menü aller Attributtypen an, die Sie kopieren können. Klicken Sie auf eine (z. B. Skala), und Sie sehen, dass die Skalierung des Quellobjekts auf die zuvor ausgewählten Objekte angewendet wird.

Hier ist die manuelle Eingabe http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Copy_Attributes_Menu

Dies als Antwort auf:

http://obasandbox.wordpress.com/2011/10/23/cg-blender-setting-properties-on-multiple-objects/

Verwandte Themen