Was macht polywright?
Der Dreh- und Angelpunkt für 3D-Modellarbeit. Er entscheidet, wie ein Modell erstellt wird, hält jedes Asset in einem Ordner mit einem Manifest und belegt jeden Schritt mit Zahlen und einem Bild. Die Schwesterfähigkeiten enthalten die Tiefe.
Skript: scripts/pw.py in diesem Fähigkeitsordner (Python 3.9+, Standardbibliothek, ein JSON-Objekt pro Befehl; scripts/pw_bpy.py ist seine Blender-Hälfte, niemals von Hand ausführen).
Führen Sie einmal pro Sitzung python <dieser Ordner>/scripts/pw.py doctor aus: Es findet Blender (jedes Betriebssystem), die Python-Mesh-Bibliotheken, Slicer und ComfyUI-Hosts und sagt, was fehlt. Vollständige Befehlsliste: references/cli.md.
Schritt 1: Das Briefing (fragen Sie nur, was Sie nicht erschließen können)
- Was: das Objekt oder der Ort, real oder imaginiert, und wie erkennbar es sein muss.
- Ziele: eines oder mehrere aus
pw.py check --list(game-roblox, game-unity, game-unreal, web-threejs, ar-usdz, commerce-gltf, print-fdm, print-resin, video-blockout, cad-step). Das Ziel setzt das Budget. - Reale Größe in Metern (eine Bank ist 1,8 m lang; eine Person 1,7 bis 1,8 m). Falscher Maßstab ist der häufigste stille Fehler;
check --real-size-mfängt ihn ab. - Eingaben: eine Aufforderung, Fotos, eine Skizze, Maße, einen Kartenstandort, ein vorhandenes Mesh.
- Genauigkeit und Budget: Blockout, spielbereit, Held; wie viel Zeit oder Geld ein gehosteter Generator kosten darf.
Gerüst: pw.py new <verz> --name <Name> --kind real|imagined|hybrid --route <route> --targets a,b --real-size-m X.
Ordner: refs/ (Referenzen, jede als Quelle aufgezeichnet), work/ (.blend, Zwischenschritte), out/ (ein Auslieferungsobjekt pro Ziel), renders/ (Überprüfungsblätter), brief.md, manifest.json. Vertrag für andere Plugins: references/contract.md.
Schritt 2: Den Weg wählen (der günstigste, der dem Briefing entspricht)
| Situation | Weg | Fähigkeit |
|---|---|---|
| Ein gewöhnliches Objekt; Lizenz erlaubt Wiederverwendung | finden: Poly Haven, Kenney, Quaternius (CC0), Sketchfab und Drucksites (jede Lizenz prüfen) | diese Fähigkeit, references/routes.md |
| Hat Abmessungen, Teile, die passen, scharfe Kanten (Halterung, Gehäuse, Gebäude, Möbel) | codieren (--route procedural): bpy, build123d/CadQuery/OpenSCAD | polywright-generate, polywright-blender |
| Ein realer Ort (Park, Straße, Campus, Gelände) | place (Ort): OSM + Höhe (pw.py place) | polywright-capture |
| Ein reales Objekt, das Sie fotografieren oder scannen können | capture (aufnehmen): Fotogrammetrie, Splats, Scanner oder Modell aus Maßen | polywright-capture |
| Imaginiertes organisches oder Einzelstück (Statue, Kreatur, Requisite) | generieren: Referenzblatt, dann Bild-zu-3D | polywright-references, polywright-generate |
| Heldencharakter, der sich verformt | generieren oder formen als Basis, dann Retopologie und Rigging | polywright-generate, polywright-finish |
Die meisten guten Ergebnisse mischen Wege: ein OSM-Park mit generierten Helden-Requisiten, ein codiertes Haus mit einer generierten Statue. Zeichnen Sie den Weg pro Teil im Manifest auf.
Schritt 3: Referenzen vor Geometrie
Für alles, das nicht fertig gefunden wird, sammeln oder generieren Sie zuerst Referenzen (polywright-references): orthografische Ansichten auf einer gemeinsamen Bodenlinie mit einem Höhenbalken, Materialmuster, Maßstabsreferenzen. Generierte Eingaben bestimmen den Großteil eines Bild-zu-3D-Ergebnisses.
Schritt 4: Bauen, dann beweisen (jeder Weg)
- Zuerst Blockout in realer Größe: Grundelemente für Silhouette und Proportion. Korrigieren Sie den Maßstab hier; es ist jetzt billig.
- Zahlen:
pw.py inspect <datei>: Dreiecke, Objekte, Größe, Materialien, Texturen, UVs, wasserdicht, Teile. Lesen Sie es vor und nach jedem zerstörerischen Schritt. - Bild:
pw.py render <datei> --out renders/<schritt>: sechs Ansichten und einesheet.png. Lesen Sie das Blatt, nicht sechs Screenshots. Vergleichen Sie mit den Referenzen: Silhouette, Proportion, fehlende oder schwebende Teile, Schattierungsspitzen, falsche Achse (liegt auf der Seite), falscher Maßstab. - Ziel:
pw.py check <datei> --target <z> --real-size-m X. Fehler bedeutet: vor der Lieferung korrigieren; Warnung bedeutet: in der Übergabe erwähnen. - Aufzeichnen:
pw.py manifest <verz> --add-output out/<datei> --target <z> --inspect, jede Quelle mit--add-source <url> --licence <l> --author <a>, dann--validate.
Planen, Handeln und Kritisieren sind separate Durchläufe: Nach dem Bauen betrachten Sie das Blatt wie ein Kritiker und listen Mängel auf, bevor Sie behaupten, fertig zu sein. Zwei Runden der Fehlerbehebung eines Tracebacks lohnen sich; danach überdenken Sie den Ansatz. Speichern Sie eine nummerierte .blend pro Meilenstein (work/<name>_v03.blend), damit eine lange Arbeit von der Festplatte neu gestartet werden kann.
Ein Modell in ein Bild komponieren
Wenn ein Bild- oder Videomodell weiterhin eine entworfene Requisite falsch zeichnet (ein Storyboard-Standbild, eine Set-Referenz, ein Poster), nehmen Sie die Komposition aus dem Bild und die Form aus dem Modell:
- Wählen Sie das Bild nur für die Komposition: wo Personen stehen, das Licht, das Ziel. Eine einfache Ersatz-Requisite ist in Ordnung.
pw.py match model.blend --still pic.png --out work/match.png --anchor-px X,Y --anchor-local=X,Y,Z --aim-px X,Y --aim-local=X,Y,Z --depth M --horizon ROW --hide BOX --mask-add BOX: Der Anker des Modells (ein Griff) landet auf der Hand, sein Zielpunkt (eine Spitze) auf dem exakten Pixel, gerendert RGBA mit der Linse und dem Horizont des Bildes. Setzen Sie--depthso, dass seine Breite in Pixeln der des Ersatzes entspricht (Breite = f_px x Durchmesser / Tiefe;f_pxsteht im Ergebnis).--hidelässt das Teil hinter einer Hand verschwinden;--mask-addfügt die Hände der Maske hinzu.- Lesen Sie
match_paste.png3-fach vergrößert: Form, Größe im Bildausschnitt, Ziel. Korrigieren Sie Tiefe und Pixel, führen Sie erneut aus (Sekunden). - Mischen Sie innerhalb von
match_mask.pngmit einer maskierten, rauscharmen Bildbearbeitung (FLUX.2 Klein oder jedes Inpaint-Modell: Denoise 0,3 bis 0,5, niedriger CFG), dann fügen Sie das Ergebnis durch die Maske zurück, sodass jedes Pixel außerhalb das eigene des Bildes bleibt. Eine Vollbildbearbeitung malt alles neu (HDR-Farbe, eine größere Requisite). - Prüfen Sie in voller Größe; behalten Sie zwei oder mehr Seeds.
Referenzblätter der Requisite kommen ebenfalls aus dem Modell (polywright-references, Schritt 2b).
Spiel-Sprites aus einem Modell
Wenn ein Bildmodell in einem Spiel-Sprite weiterhin einen Mechanismus falsch darstellt (ein Rad, das nicht rund ist, ein Blatt auf dem Dach), bauen Sie das Modell, rendern Sie es durch die eigene Kamera des Spiels und lassen Sie das Bildmodell nur malen:
pw.py spritecam <registry.json> --like <sprite> --out camera.json: die orthografische Kamera, angepasst an die Bodendrahtgitter des Spiels (L-014). Setzen Sietile_mdarin auf die Meter des Modells pro Kachel.- Bauen Sie das Modell mit einem Teile-Präfix pro Objekt (
wheel_,roof_...) in der Szeneneigenschaftsprite_parts, bewegliche Teile unter einem Drehpivot-Empty, gebaut im Raum des Pivots, und die Bewegung in der Szeneneigenschaftloop. pw.py sprite model.blend --camera camera.json --out renders/L1 --scale 10.6667(1024 px für ein 96 px Sprite): Lesen Sie die Pässe und das Beauty-Bild imsheet-Stil bei 1x neben den Sprites des Spiels;--frames N --frame-passes id,posfür ein animiertes Teil,--hide wheel_für eine Platte ohne Rad. Prüfen Sie dann die Größe gegen die Nachbarn des Spiels vor dem Malen:aw.py sprite <beauty bei 96> --refs <gleichartige sprites>schlägt fehl bei einer Abdeckung unter 0,9 ihres Medians. Die Drahtgitteranpassung setzt den Bodenmaßstab, nicht wie groß das Gebäude wirkt: Fügen Sie zuerst Masse und Requisiten hinzu (höhere Wände, ein Anbau, ein Hof), dann erhöhen Siepx_per_tileund verschiebenfootprint_centre_px, sodass die Bounding Box die Leinwand wie die Nachbarn überspannt (L-016). Halten Sie dünne Balken von der Silhouette eines Zylinders fern: Ein waagerechter Baumstamm über schrägen Schienen wirkt, als ob er über und unter ihnen hindurchgeht (L-017).- Malen Sie das Beauty-Bild mit Canny des Tonmodells als Steuerung (ein Bildmodell mit einem ControlNet), schneiden Sie es mit dem Alpha des Renderings, sodass die Rahmung und
groundBaseexakt bleiben, und prüfen Sie dann die Malerei gegen die ID- und Randdaten insprite.json.
Szenenillustrationen aus einem Modell
Ein Ladebildschirm, ein Key Art oder ein Cover um ein bereits existierendes Modell herum (ein Gebäude, eine Maschine): Bauen Sie die Szene in Blender und lassen Sie das Bildmodell sie malen, damit der Mechanismus und das Layout stimmen.
- Bauen Sie die Szene um das Modell herum mit einem Teile-Präfix pro Objekt in der Szeneneigenschaft
scene_parts, Räder und Scheiben inrings, Schlüsselpunkte oder Pfade inscene_points. Dämme, Deiche und Mauern entlang eines Pfades sind jeweils einsweep(importieren Sie es ausscripts/pw_scene.pyin einempw.py bpy-Skript), keine Reihe von Kisten (L-020). pw.py framecam problem.json --out cameras.json: Weltpunkte mit Bildschirmkästchen, im Bildausschnitt gehaltene Punkte und außerhalb der Textbänder der Benutzeroberfläche, ein Größenmaß zur Maximierung; gibt die besten Kameras als Voreinstellungen aus. Nehmen Sie die Bänder aus der echten UI-Datei (ihre Abstände und Anker), nicht nach Faustregel (L-018).pw.py scene scene.blend --cameras cameras.json --camera framecam_1 --out renders/v1 --size 1280x720(die erste Durchgangsgröße des Mal-Workflows): Tonmodell, Beauty, Tiefe, Normalen, ID, Linie undscene.json. Lesen Sie zuerst Tonmodell und Tiefe; belassen Sie den Tiefenbereich bei der eigenen Messung der Szene, es sei denn, eine Voreinstellung erfordert eine feste Angabe (L-019).- Malen mit Steuerung (Tiefe oder Linie), dann prüfen Sie die Malerei gegen
scene.json: Ringränder, Punkte, ID-Farben.
Menschenmengen- und Kampf-Blockouts (KI-Video)
Videomodelle scheitern an Menschenmengen; Blender nicht. Lassen Sie Blender die Armee platzieren und das Videomodell das Aussehen malen:
pw.py crowd --out work/crowd --action clash --preview(oder march, advance, charge, hold;--view,--lens,--move), dann lesen Siework/crowd/sheet.png.- Entfernen Sie
--previewfür die volle Einstellung:depth.mp4(Hauptsteuerung),pose.mp4(vordere Reihen),mask.mp4,clay.mp4,camera.json; standardmäßig 832x480, 81 Bilder bei 16 fps (Wan). - Übermalen Sie Tonmodell-Bild 1 zu einem genehmigten Start-Standbild; steuern Sie Wan VACE oder Wan 2.2 Fun Control mit dem Tiefenvideo und diesem Standbild. Geben Sie Kostüm, Farbe pro Seite, Licht und Dunst vor, nicht die Kopfzahl.
Details und was ungetestet ist: references/crowd-blockouts.md. Einstellungsplanung ist Sache von cinewright.
Zwei Kämpfer: pw.py duel shot.json --preview positioniert zwei Gliederpuppen an ihren Markierungen im Set durch die Kamera der Einstellung (examples/duel.json); lesen Sie sheet.png, dann entfernen Sie --preview für jedes Steuerungs-MP4.
Mehr: crowd-blockouts.md, „Two fighters".
Eine kleine Besetzung realer Figuren oder Spielzeuge (Seiten getauscht, eine zusätzliche Figur, Markierungen verloren): Erstellen Sie ein Mesh aus Fotos, korrigieren Sie Farbe und bemalte Markierungen mit pw.py mark, geben Sie dem Videomodell pw.py turnaround-Bilder als Referenzen und ein pw.py lineup (Teams auf festen Seiten, Tiefe und Maske) als Eröffnung: references/figures-for-video.md.
Sets und Requisiten für eine Filmeinstellung: references/film-and-video.md.
Schritt 5: Fertigstellen und übergeben
Das Fertigstellen pro Ziel (UVs, LODs, Normal-Map-Konvention, Achsen- und Einheitenumrechnung, Komprimierung) ist polywright-finish; das Drucken (wasserdichter Körper, Wände, Basis, Teilung, 3MF) ist polywright-print. Übergeben Sie den Ordner an das Plugin, das ihn verwendet: three.js-Seiten (threewright), Film und Video (cinewright), Roblox-Orte (roblox-agent), Unity-Projekte (unity-agent), eine druckerspezifische oder Slicer-Fähigkeit für Druckeinstellungen, eine Bildfähigkeit für weitere Bilder. Diese lesen manifest.json und out/.
Übergabenachricht:
Modell: <name> (<route>) -> out/<datei> für <ziel>: <tris> Dreiecke, <größe> m, <wasserdicht/teile>
Check: <ziel> bestanden|Warnung (<regeln>) Review: renders/<schritt>/sheet.png
Quellen: <n> mit Lizenzen; KI-gemachte Teile: <welche, welches Modell> Geschuldet: <was nicht erledigt ist>
Regeln
- Reale Größe in Metern in Blender und glTF (+Z oben in Blender, +Y oben in glTF); Millimeter nur in Druckdateien.
- Behaupten Sie niemals, ein Mesh sei gut, nur aufgrund seines Dateinamens oder des Wortes eines Generators: prüfen, rendern, kontrollieren.
- Jeder heruntergeladene oder generierte Eingang erhält eine Quellenzeile mit seiner Lizenz. Geschäfte und Drucksites (Fab, Unity Asset Store, Sketchfab, MakerWorld, Printables, Steam) verlangen die Offenlegung von KI-erstellten Inhalten; das Manifest zeichnet es auf.
- Blender-Brücken über MCP führen beliebiges Python aus: Bevorzugen Sie
pw.py bpyauf Kopien; verwenden Sie eine Live-MCP-Sitzung nur, wenn der Benutzer zusieht (polywright-blender). - Google Photorealistic 3D Tiles dürfen angesehen, niemals exportiert, zwischengespeichert oder nachgezeichnet werden (deren Bedingungen).
Wartung
Evergreen-Einheit, Stufe fast (Generatoren und Blender ändern sich monatlich). Begleiter: RESEARCH.md, CHANGELOG.md, LEARNINGS.md, TESTS.md mit evals/evals.json, MAINTENANCE.md, Zustand in evergreen.json. Lesen Sie evergreen.json bei jeder Verwendung; wenn fällig, erledigen Sie die Aufgabe, dann aktualisieren Sie (evergreen-refresh). Schreiben Sie Erkenntnisse während der Arbeit in LEARNINGS.md.