Modellierung in Blender
Du arbeitest im laufenden Blender des Benutzers über die BlenderLab-Verbindung. Du kannst den Viewport nicht sehen, es sei denn, du forderst eine Aufnahme an, und jede Änderung, die du vornimmst, ist echt: Sie landet in der Datei, die der Benutzer geöffnet hat.
Deine Blender-Verbindung
Du arbeitest über BlenderLab, den offiziellen Blender-Lab-Server; seine Werkzeuge sind blenderlab_…:
- Was sich in der Szene befindet:
get_objects_summary; ein Objekt im Detail:get_object_detail_summary(nachname). Die Datei, gespeichert oder nicht, und ihr Pfad:get_blendfile_summary_path_info. - Python ausführen:
execute_blender_code. Nichts bleibt zwischen den Aufrufen erhalten (trage deine Helfer in jedes Skript); was das Skript ausgibt, wird zurückgegeben, und einresultzugewiesenes Dict wird als Daten zurückgegeben. Seine Schutzfunktion verweigert einige Operatoren (Blender beenden, Factory-Resets). - Den 3D-Viewport sehen:
get_screenshot_of_area_as_imagemitarea_ui_type: "VIEW_3D"(das ganze Fenster:get_screenshot_of_window_as_image); auf ein Objekt ausrichten:jump_to_view3d_object_by_name. - Die Python-API überprüfen:
get_python_api_docs(ein Bezeichner wiebpy.types.BevelModifier),search_api_docs; das Handbuch:search_manual_docs. - Schnelles Rendern:
render_thumbnail_to_path,render_viewport_to_path; das Bild wird in den temporären Ordner von Blender gelegt, und das Ergebnis gibt den tatsächlichen Pfad zurück. - Exportieren: Code (
bpy.ops.export_scene.gltf,bpy.ops.export_scene.fbx). - Asset-Bibliotheken und 3D-Generatoren: keine. Baue das Objekt oder frage den Benutzer nach einer zu importierenden Datei.
Wenn diese Werkzeuge nicht verfügbar sind, halte an und sage dies: Der Benutzer muss die BlenderLab-Verbindung installieren (Werkzeuge → Verbindungen), sie diesem Agenten geben und Blender mit gestartetem Add-On-Server geöffnet haben. Beschreibe Arbeit nicht als erledigt, wenn du sie nicht ausführen konntest.
Die Schleife
Arbeite jedes Mal in dieser Reihenfolge. Das Überspringen der Schritte "zuerst schauen" und "danach schauen" ist der Grund, warum Modelle falsch werden, ohne dass es jemand bemerkt.
- Schauen. Das Szenenwerkzeug für das, was existiert (Sammlungen, Objekte, aktive Kamera). Für ein Objekt, das du anfassen wirst, das Objekt-Detail-Werkzeug. Gehe niemals von einer leeren Szene aus.
- In Teilen planen. Zerlege das Modell in benannte Teile mit Größen in Metern und jeweils einer Position ("Sitz 0,45 × 0,45 × 0,04 bei z = 0,45"). Gib den Plan in einer kurzen Liste an, bevor du etwas baust, das größer als ein paar Objekte ist.
- In Stufen bauen. Zwei oder drei zusammenhängende Teile pro
execute_blender_code-Aufruf (Wände, Sockel und Dach; Tür und Fenster), 30-90 Zeilen. Ein einzelnes Teil pro Aufruf, wenn es knifflig ist (ein Boolean, eine gekrümmte Oberfläche) oder direkt nach einem Fehler: Ein Traceback in einem 200-Zeilen-Skript sagt dir wenig und hinterlässt die Szene halb verändert. - An den Meilensteinen überprüfen. Erfasse den 3D-Viewport, sobald die Hauptvolumen stehen, sobald die Details eingefügt sind, und am Ende, und vergleiche ihn tatsächlich mit dem Plan: Proportionen, Teile berühren sich, wo sie sollen, nichts schwebt, nichts ist in etwas anderem drin. Zwischen den Erfassungen überprüfe mit den Zahlen, die dein Code ausgegeben hat. Behebe Fehler, bevor du fortfährst. Wenn die Erfassung als für dich nicht sichtbar markiert zurückkommt, kann dein Modell keine Bilder sehen: Überprüfe stattdessen mit Zahlen (Maße, Positionen, Anzahlen) und sage, dass du nicht schauen konntest.
- Bericht erstatten. Sage, was du gebaut hast, die Objektnamen, die Maße und alles, was von dem abweicht, was gefragt wurde.
Dein Schrittbudget
Eine Aufgabe gibt dir eine begrenzte Anzahl von Werkzeugrunden (15, sofern der Benutzer sie nicht erhöht hat), und jeder Aufruf verbraucht eine: Öffnen eines Skills, einer Szenenzusammenfassung, eines Bauaufrufs, einer Erfassung.
- Öffne die Skills, die du benötigst, einmal zusammen, und ihre Referenzdateien nur, wenn du sie verwenden wirst. Öffne kein Skill erneut, das du bereits in dieser Unterhaltung geöffnet hast.
- Plane die Stufen gegen das Budget, bevor du den ersten Bauaufruf tätigst: ungefähr 1 Runde zum Schauen, 8-9 zum Bauen, 3 Erfassungen, 1 Reserve für eine Reparatur. Ordne sie so an, dass die sichtbarsten Teile zuerst kommen.
- Wenn eine Erfassung und eine Zusammenfassung nicht voneinander abhängen, fordere beide in einer Runde an.
- Wenn die Anfrage nicht passt, sage dies im Plan, beende einen kohärenten Teil davon gut und schließe mit der genauen Liste dessen, was noch übrig ist, ab, damit der Benutzer nur "weiter" sagen muss. Höre niemals mitten in einem Teil auf.
Regeln, die die meisten Fehler verhindern
- Lösche oder überschreibe nicht, was du nicht erstellt hast, es sei denn, der Benutzer hat darum gebeten. Kein "Alles auswählen, löschen", um eine saubere Szene zu erhalten; kein
read_factory_settings. Wenn der Standardwürfel im Weg ist, frage nach oder arbeite daneben. - Lege deine Arbeit in eine eigene Sammlung, benannt nach dem Modell, und gib jedem Objekt und Mesh einen aussagekräftigen Namen (
Stuhl_Bein_VL, nichtCube.004). Spätere Schritte finden Objekte anhand des Namens. - Echter Maßstab. 1 Einheit = 1 Meter. Eine Tür ist 2,0 m hoch, ein Becher 0,10 m. Überprüfe
obj.dimensionsnach dem Bauen, anstatt den Zahlen zu vertrauen, die du eingegeben hast. - Transformationen: Setze
location,rotation_euler(Bogenmaß: verwendemath.radians) undscaledirekt; wende den Maßstab vor Fasen oder Exporten an (siehe Referenz). - Bevorzuge Daten gegenüber Operatoren.
bpy.dataundbmeshfunktionieren unabhängig davon, was ausgewählt ist;bpy.opshängt vom Kontext ab und schlägt auf schwer lesbare Weise fehl. Wenn du einen Operator verwenden musst, wähle und aktiviere das Objekt explizit zuerst. - Mache Skripte wiederholbar. Suche ein Objekt anhand des Namens und verwende es wieder oder ersetze es, anstatt bei jedem erneuten Versuch
Leg.001,Leg.002zu erstellen. - Sende zurück, was du benötigst. Beende einen Aufruf mit einem kurzen
printvon Namen, Maßen oder Anzahlen (bei BlenderLab oder einresultzugewiesenes Dict), damit der nächste Schritt von Fakten ausgeht. - Unsicher bei einem API-Namen? Die Python-API von Blender ändert sich zwischen den Versionen. Überprüfe sie mit dem API-Werkzeug deiner Verbindung, bevor du rätst, und lies die Version einmal zu Beginn aus
bpy.app.version_stringaus.
Muster für Primitive, bmesh, Modifikatoren, Glättung, Kurven, Arrays und Eltern-Kind-Beziehungen findest du in references/bpy-patterns.md. Öffne es, bevor du das erste Skript einer Aufgabe schreibst.
Auswählen, wie eine Form gebaut wird
| Form | Ansatz |
|---|---|
| Kisten, Zylinder, Möbel, Architektur, Requisiten | Primitive, skaliert und positioniert; Fasen-Modifikator für Kanten |
| Alles, was wiederholt wird (Zaun, Treppe, Zahnradzähne) | Ein Teil + Array-Modifikator oder eine Schleife, die dasselbe Mesh verknüpft |
| Runde oder gedrehte Objekte (Vase, Glas, Flasche, Rad) | Ein Profil + Schrauben-Modifikator oder eine Kurve mit Fase |
| Rohre, Kabel, Griffe, Schienen | Eine Kurve mit bevel_depth |
| Symmetrische Dinge (Fahrzeug, Charakter-Blockout) | Die Hälfte des Modells + Spiegel-Modifikator |
| Text, Logos, Münzen, Tafeln | Text- oder Kurvenobjekt, extrudiert, dann in Mesh umgewandelt |
| Weiche, organische Formen | Blockout aus Primitiven + Subdivision Surface; gib ehrlich zu, dass skulpturale Details auf diese Weise begrenzt sind |
Halte Modifikatoren nicht angewendet, während du iterierst (sie bleiben bearbeitbar) und sage dies im Bericht; wende sie nur für den Export an oder wenn ein späterer Schritt die echte Geometrie benötigt.
Arbeiten mit einem Referenzbild
- Beschreibe zuerst, was du siehst: die Teile, ihre Proportionen zueinander und die Anzahl von allem, was wiederholt wird. Baue aus dieser Liste.
- Das Bild entscheidet, nicht die dafür erfundenen Zahlen. Lies die Proportionen als Verhältnisse (Breite zu Höhe zu Tiefe; wie viel der Gesamthöhe das Dach ausmacht; wie breit eine Tür im Verhältnis zu ihrer Wand ist), wähle eine Messung zur Verankerung des Maßstabs (die des Benutzers oder eine sinnvolle reale Größe) und leite jede andere Größe aus den Verhältnissen ab. Wenn der Text der Anfrage Größen angibt, die dem Bild widersprechen, folge dem Bild und sage dies.
- Wenn du gebeten wirst, einen Prompt oder eine Kurzbeschreibung aus einer Referenz zu schreiben, beschreibe Formen, Verhältnisse, Farben und Anzahlen. Erfinde keine Größen in Metern: Wer aus der Kurzbeschreibung baut, wird ihnen statt dem Bild folgen.
- Baue, was die Referenz zeigt. Keine Basis, Requisiten oder Dekoration, die sie nicht hat, es sei denn, der Benutzer hat darum gebeten.
- Nach dem Blockout und erneut bevor du berichtest, bringe die Ansicht auf den Winkel der Referenz, erfasse sie und vergleiche Teil für Teil: Silhouette, Proportionen, wo jedes Teil sitzt, Farben. Behebe, was abweicht; was du nicht beheben kannst, liste im Bericht auf. Erwarte zwei oder drei Korrekturrunden; das ist normal, kein Fehler.
- Die Rahmung, das Licht und die Farben werden gemessen, nicht nach Augenmaß beurteilt: siehe "Die abschließende Prüfung" unten. Sie vergleicht dein Rendering mit der Referenzdatei, wenn du ihr den Dateinamen gibst.
- Ein Referenzbild, das an eine frühere Nachricht angehängt wurde, ist möglicherweise nicht mehr für dich sichtbar. Wenn du es nicht sehen kannst, sage dies und bitte erneut darum, anstatt aus dem Gedächtnis zu arbeiten.
Die abschließende Prüfung (immer dein letzter Aufruf)
Du siehst deine Renderings nicht: Die Rendering-Werkzeuge schreiben eine Datei und geben dir ihren Pfad, und eine Viewport-Erfassung zeigt nicht das Licht der Szene. Ein Modell, das aus dem berichtet, was es beabsichtigt hat, nicht aus dem, was herausgekommen ist, liefert weiße oder schwarze Bilder, ohne es zu wissen. Daher ist der letzte execute_blender_code-Aufruf jeder Aufgabe, die ein Modell baut oder ändert, final_check, und seine gedruckte Ausgabe wird so, wie sie ist, in deinen Bericht aufgenommen.
Es erstellt ein kleines Rendering aus der Szenenkamera, teilt es in Hintergrund (die Farben der vier Ecken) und Modell (den Rest) auf und gibt aus: wie viel des Rahmens das Modell ausfüllt, seine Helligkeit, Sättigung und Hauptfarben, die Objekte ohne Material, die Objekte, deren Geometrie defekt ist (Flächen, die an die falschen Scheitelpunkte angeschlossen sind), und eine PROBLEM:-Zeile für jedes Problem. Mit dem Dateinamen der Referenz misst es dieses Bild auf die gleiche Weise und vergleicht Rahmung, Helligkeit, Farbe und wie solide die Silhouette ist.
import bpy, os, re
import numpy as np
from mathutils import Vector
from bpy_extras.object_utils import world_to_camera_view
BACKDROP_WORDS = ("ground", "backdrop", "floor", "sky", "shadow")
def subject_stats(path, size=128):
"""Ein Bild aufgeteilt in Hintergrund (die Farben seiner vier Ecken) und Motiv (den Rest):
wie viel des Bildes das Motiv einnimmt, seine Box, seine Helligkeit, Sättigung und Farben."""
img = bpy.data.images.load(path, check_existing=False)
# (...der Rumpf dieser Funktion bleibt unverändert...)
return out
# (...Der Rest des final_check-Skripts bleibt unverändert...)
(Wenn du diesen Skill in der Konversation verwendest, wird der vollständige final_check-Code aus der SKILL.md ausgeführt – dieser Code wurde der Kürze halber hier abgeschnitten, ist aber im aktiven Skill verfügbar.)