** * Blender-Version ist 2.80 **
Einige Modellierungen in Blender können mithilfe von Python-Skripten zeitlich katastrophal reduziert werden. Die Anordnung einer großen Anzahl von Objekten ist die beste. Ich werde Ihnen ein Beispiel zeigen.
Ordnen Sie die Grundelemente (einfache Figuren) an.
Wenn Sie das Fenster teilen und mit dem Cursor auf einer Seite Umschalt + F11 drücken, ist dies wie folgt.
Drücken Sie "Neu", um ein neues Skript zu erstellen.
Kopieren Sie den folgenden Text.
import bpy
#reset objects
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)
max = 20
for i in range(0,max):
for j in range(0,max):
bpy.ops.mesh.primitive_cone_add(
radius1=.7,
location=(i,j,0)
)
Klicken Sie auf "Skript ausführen" oder geben Sie "Alt + P" ein, um das folgende Bild zu erstellen.
Sie können die Wiederholungsbreite angeben, indem Sie mit dem Wert "max" spielen. Wenn es um "20" geht, denke ich, dass es mit den meisten Computern in Ordnung ist, aber wenn es "100" ist, kann es für ein paar Minuten einfrieren. radius1
gibt den Radius des Bodens an, und 0.7
gibt einen Wert nahe $ \ frac {1} {\ sqrt {2}} $ an, so dass sich die Böden kaum berühren. Machen.
import bpy
import math
#reset objects
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)
max = 20
for i in range(0,max):
for j in range(0,max):
height = 2+math.sin(i+j)
bpy.ops.mesh.primitive_cone_add(
radius1=.7,
location=(i,j,height/2),
depth = height)
Fügen Sie der Höhe des Kegels eine Variation hinzu. Verwenden Sie eine Dreiecksfunktion, um die Höhe regelmäßig zu ändern. Wenn Sie der z-Position nicht die Hälfte der in "Tiefe" angegebenen Höhe hinzufügen, stimmt die Höhe des Bodens nicht überein, also "Tiefe = Höhe", "Ort = (i, j, Höhe / 2)" Ich werde.
import bpy
#reset objects
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)
max = 5
for i in range(-max,max):
for j in range(-max,max):
for k in range(-max,max):
bpy.ops.mesh.primitive_cone_add(
location=(i*4,j*4,k*4)
)
Fühle das Universum. Für zukünftige Berechnungen reicht der Iterationsbereich von "0" <"max" bis "-max" <"max".
import bpy
import numpy
#reset objects
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)
max = 5
for i in range(-max,max):
for j in range(-max,max):
for k in range(-max,max):
bpy.ops.mesh.primitive_cone_add(
location=(i*4,j*4,k*4),
rotation=numpy.random.rand(3)*3,
)
Für "Rotation" wird eine Zufallszahl angegeben. Das ist schön damit.
import bpy
import math
#reset objects
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(True)
max = 5
for i in range(-max,max):
for j in range(-max,max):
for k in range(-max,max):
dist = math.sqrt(i*i+j*j)
zx = math.atan2(j,i)
zy = -math.pi/2-math.atan2(k,dist)
bpy.ops.mesh.primitive_cone_add(
location=(i*8,j*8,k*8),
depth=dist*2,
rotation=(0,zy,zx)
)
Alle Zapfen sind zentriert. $ \ Tan ^ {-1} (\ frac {j} {i}) $ für Längengrad, $ \ tan ^ {-1} (\ frac {k} {\ sqrt {i ^ 2 + j ^ 2}}) Der Breitengrad wird mit $ berechnet. Die "Tiefe" wird auch angepasst, um ein Gefühl der Mitte zu erzeugen.
Es ist langweilig, wenn es sich nur um Grundelemente handelt. Kopieren Sie also beliebige Objekte und ordnen Sie sie an. Wir werden dies tun, indem wir diejenige arrangieren, auswählen, die die Kopierquelle sein wird, und sie ernsthaft kopieren.
Das ist,
So was.
import bpy
import numpy
for i in range(0,500):
bpy.ops.object.duplicate()
bpy.context.object.location = numpy.random.rand(3)*40-20
bpy.context.object.rotation_euler = numpy.random.rand(3)*3
Wenn Sie weitere Änderungen an der Abbildung vornehmen möchten, können Sie fbx, obj oder ply im Voraus vorbereiten und eine große Menge davon importieren. Kurz zuvor (https://qiita.com/hibit/items/f78b8a167cc75ce749dc) Wir haben eine große Anzahl menschlicher Körpermodelle generiert. Importieren Sie sie also alle auf einmal und ordnen Sie sie an. Es ist erforderlich, eine große Anzahl von Dateien in einem bestimmten Ordner im Voraus vorzubereiten und vorzubereiten, damit sie gemeinsam anhand der Seriennummer verarbeitet werden können.
Ist es Neo Exdes?
import bpy
import numpy
#Geben Sie hier den Dateipfad (bis kurz vor die Seriennummer) ein
dir = r'~~~'
for i in range(0,500):
#Geben Sie die Seriennummer und die Nebenstelle an (obj mit diesem Code)
path = dir + str(i) + '.obj'
bpy.ops.import_scene.obj(filepath=path)
for i in range(0,500):
bpy.data.objects[i].location = numpy.random.rand(3)*20-10
Recommended Posts