[PYTHON] Erstellen Sie ein Sternensystem mit Blender 2.80-Skript

untitled.png

Dies ist ein Artikel über das Erstellen eines Sternsystems (sieht aus wie) mit dem Blender-Skript, das jeder liebt. Voll kompatibel mit Blender 2.80!

Im Grunde ist es ein Skript, das eine Iteration dreht und eine große Menge auf ein Objekt legt, aber diesmal setze ich auch Materialien.

1. Platzieren Sie eine große Anzahl von Kugeln

Vorerst aus einem einfachen Code. Lassen Sie uns die primitiven Kugeln automatisch anordnen.

image.png

import bpy
import numpy as np

#Setzen Sie den Status Quo zurück
for mat in bpy.data.materials:
    bpy.data.materials.remove(mat)
for obj in bpy.data.objects:
        bpy.data.objects.remove(obj)
for obj in bpy.context.scene.objects:
    bpy.data.objects.remove(obj)

#Zahlen, die Kugeln erzeugen
number = 10

for i in range(number):
    x = np.random.rand()*number*10-50
    y = np.random.rand()*number*10-50
    bpy.ops.mesh.primitive_uv_sphere_add(radius=np.random.rand()+1,location=(x,y,0))

2. Was für eine Planetenbahn hinzugefügt

Wenn Sie für jede Kugel, die durch die Kugel geht, einen Ring mit dem Ursprung als Mittelpunkt festlegen, sieht dies wie ein Sternensystem aus. Ursprünglich wurden die Koordinaten durch "x" und "y" angegeben, aber für zukünftige Berechnungen werden die Koordinaten durch die Polarkoordinaten von "r" und "Theta" angegeben.

image.png

import bpy
import numpy as np

#Setzen Sie den Status Quo zurück
for mat in bpy.data.materials:
    bpy.data.materials.remove(mat)
for obj in bpy.data.objects:
        bpy.data.objects.remove(obj)
for obj in bpy.context.scene.objects:
    bpy.data.objects.remove(obj)

#Zahlen, die Kugeln erzeugen
number = 10

bpy.data.materials.new(name = 'orbit')
mat = bpy.data.materials['orbit']
mat.use_nodes = False
mat.diffuse_color = (1,1,0,1)

for i in range(number):
    #In Polarkoordinaten berechnet
    r = np.random.rand()*number*10+10
    theta = np.random.rand()*np.pi*2
    x = r*np.cos(theta)
    y = r*np.sin(theta)

    #Dies ist ein Planet
    bpy.ops.mesh.primitive_uv_sphere_add(radius=np.random.rand()+1,location=(x,y,0))
    
    #Dies ist die Umlaufbahn
    bpy.ops.mesh.primitive_torus_add(major_radius=256,minor_radius=.1)
    bpy.context.object.scale = (r/256,r/256,1)

Hier wird die API von bpy.ops.mesh.primitive_torus_add verwendet. Die Referenz lautet hier. Der Radius des Donutrings wird durch "major_radius" angegeben, und der Radius des Querschnitts des Donuts wird durch "minor_radius" angegeben. Der Grund, warum major_radius hier auf 0 gesetzt wird, ist, dass es eine unklare Angabe gibt, dass ** 257 oder mehr mit dieser API nicht angegeben werden können ** (ich war zuerst süchtig danach), also habe ich einen Donut mit einem Radius von 256 gewählt. Es wird durch Skalieren mit "bpy.context.object.scale" an "r" angepasst.

3. Materialspezifikation

image.png

Dieses Mal werden wir auch das Material einstellen. Seit Blender 2.80 sind Shader beim Einstellen von Materialien fast unverzichtbar geworden, aber ** ich habe mich nicht so sehr mit dem Studium von Skripten beschäftigt **, daher werde ich diesmal in einem Modus erklären, in dem keine Shader verwendet werden. Ich werde. Wenn Sie Materialien mit einem Skript festlegen, fügen Sie nach dem Erstellen von Materialdaten mit bpy.data.materials.new dem Zielobjekt mit bpy.ops.object.material_slot_add () einen Materialschlitz hinzu und fügen Sie diesen Schlitz hinzu. Der Ablauf besteht darin, das Material mit "bpy.context.object.active_material" für das Ziel festzulegen.

Die Materialreferenz lautet hier, dies ist jedoch nur der Anfang bei Verwendung von ** Knoten. **, Sie müssen mit der API eines feineren Knotens herumspielen. Vorerst werden wir es diesmal ohne Verwendung von Knoten einstellen (mat.use_nodes = False), also geben Sie nur diffuse_color, metallic und roughness mit Zufallszahlen an.

image.png

Dies ist die Anzeige in der GUI. Beachten Sie, dass sich diese Anzeige auch abhängig von der Render-Engine ändert und die obige Abbildung für "Zyklen" gilt.

import bpy
import numpy as np

#Setzen Sie den Status Quo zurück
for mat in bpy.data.materials:
    bpy.data.materials.remove(mat)
for obj in bpy.data.objects:
        bpy.data.objects.remove(obj)
for obj in bpy.context.scene.objects:
    bpy.data.objects.remove(obj)

#Zahlen, die Kugeln erzeugen
number = 10

#Zuerst wird nur das Orbitalmaterial eingestellt
bpy.data.materials.new(name = 'orbit')
mat = bpy.data.materials['orbit']
mat.use_nodes = False
mat.diffuse_color = (1,1,0,1)

for i in range(number):
    r = np.random.rand()*number*10+10
    theta = np.random.rand()*np.pi*2
    x = r*np.cos(theta)
    y = r*np.sin(theta)
    #Dies ist ein Planet
    bpy.ops.mesh.primitive_uv_sphere_add(radius=np.random.rand()+1,location=(x,y,0))

    #Stellen Sie individuelle Materialien für den Planeten ein
    mat_name = 'material' + str(i)
    bpy.data.materials.new(name = mat_name)
    mat = bpy.data.materials[mat_name]
    mat.use_nodes = False
    mat.diffuse_color = np.random.rand(4)
    mat.diffuse_color[3] = 1
    mat.metallic = np.random.rand()
    mat.roughness = np.random.rand()
    bpy.ops.object.material_slot_add()
    bpy.context.object.active_material=mat

    #Dies ist die Umlaufbahn
    bpy.ops.mesh.primitive_torus_add(major_radius=100,minor_radius=.1)
    bpy.context.object.scale = (r/100,r/100,1)

    #Wenden Sie das zuvor eingestellte Flugbahnmaterial an
    mat = bpy.data.materials['orbit']
    bpy.ops.object.material_slot_add()
    bpy.context.object.active_material=mat

4 Die Sonne erschaffen und rendern (wie Dinge)

Da es eine große Sache ist, setzen Sie die Sonne (wie etwas) in die Mitte.

image.png

Zum obigen Code hinzugefügt


bpy.ops.mesh.primitive_uv_sphere_add(radius=4)
bpy.data.materials.new(name = 'sun')
mat = bpy.data.materials['sun']
mat.use_nodes = False
mat.diffuse_color = (1,.5,0,1)
bpy.ops.object.material_slot_add()
bpy.context.object.active_material=mat

Da der Radius und die Position des Planeten durch Zufallszahlen angegeben werden, wird bei jedem Drehen des Skripts ein anderes Sternensystem erzeugt. Das solide Display von Blender sieht gut aus, aber lassen Sie uns auch zu diesem Zeitpunkt rendern. Es ist pechschwarz wie es ist, so dass Sie das Licht in der Mitte einstellen können, aber die falsche Sonne wird das Licht blockieren. Hier stellen wir das Material manuell so ein, dass die falsche Sonne selbst scheint.

image.png

Shader-Knoten. Wir müssen uns daran gewöhnen, auch wenn es uns nicht gefällt.

Das Folgende wird mit der Kamera und dem Hintergrund gerendert. Der Sternenhimmel im Hintergrund wurde von CG Beginner ausgeliehen.

untitled.png

Recommended Posts

Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
Erstellen Sie ein teuflisches Bild mit Blenders Skript
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
Erstellen Sie ein Verzeichnis mit Python
Erstellen wir ein Skript, das sich bei Ideone.com in Python registriert.
Erstellen Sie mit dem Blender 2.80-Skript eine beispielhafte spielähnliche Phase
Erstellen Sie ein Bereitstellungsskript mit Stoff und Küche und verwenden Sie es erneut
Erstellen Sie eine virtuelle Umgebung mit Python!
Erstellen Sie ein Empfehlungssystem mit Python
Erstellen Sie einen Poisson-Stepper mit numpy.random
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Erstellen Sie mit Django einen Datei-Uploader
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
[Blender] So legen Sie shape_key mit dem Skript fest
Erstellen Sie mit Class einen Python-Funktionsdekorator
Erstellen Sie mit Python + PIL ein Dummy-Image.
[Python] Erstellen Sie mit Anaconda eine virtuelle Umgebung
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie eine GUI-App mit Tkinter of Python
Erstellen Sie eine große Textdatei mit Shellscript
VM mit YAML-Datei (KVM) erstellen
Erstellen Sie eine einfache Web-App mit Flasche
Erstellen Sie mit Python 3.4 einen Worthäufigkeitszähler
Verwalten Sie Protokollrotationsgenerationen mit einem Shell-Skript.
Erstellen Sie mit NetworkX einen verbindenden nächsten Nachbarn
Skript zum Erstellen einer Mac-Wörterbuchdatei
Erstellen Sie einen Webdienst mit Docker + Flask
Erstellen Sie ein privates Repository mit AWS CodeArtifact
Erstellen Sie eine Auto-Anzeige mit Himbeer-Pi
Erstellen Sie eine Matrix mit PythonGUI (Textfeld)
Erstellen Sie ein Diagramm mit Rändern, die mit matplotlib entfernt wurden
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Zeigen Sie die heutige Wettervorhersage mit Shell-Skript an
Erstellen Sie eine mit tkinter erstellte ausführbare GUI-Datei
Erstellen Sie mit Minette für Python einen LINE BOT
Erstelle mit pygame2 eine neue Benutzeroberfläche!
Erstellen Sie eine PDF-Datei mit einer zufälligen Seitengröße
Erstellen wir ein einfaches Empfangssystem mit dem serverlosen Python-Framework Chalice und Twilio
Erstellen Sie eine virtuelle Umgebung mit conda in Python
Erstellen Sie eine neue Todoist-Aufgabe aus Python Script
Erstellen Sie eine Seite, die unbegrenzt mit Python geladen wird
[Hinweis] Erstellen Sie mit Python eine einzeilige Zeitzonenklasse
Sie können auch mit Python problemlos eine GUI erstellen
Erstellen Sie mit Sublime Text3 eine Python3-Build-Umgebung
Erstellen Sie ein billiges Zusammenfassungssystem mit AWS-Komponenten
Erstellen Sie ein Bulletin Board mit Heroku, Flask, SQL Alchemy
Erstellen Sie mit Django ein Dashboard für Netzwerkgeräte!
Erstellen Sie eine Matrix mit PythonGUI (tkinter-Kombinationsfeld)
Erstellen Sie eine Farbleiste mit Python + Qt (PySide)
Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Schritte zum Erstellen eines Twitter-Bots mit Python
Erstellen Sie mit Python einen Entscheidungsbaum von 0 (1. Übersicht)
Erstellen Sie eine neue Seite im Zusammenfluss mit Python
Erstellen Sie mit Python + Qt (PySide) ein farbspezifisches Widget.
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
Erstellen Sie ein Besuchermeldungssystem mit Raspberry Pi
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei