Communitygithub.com

Stick-Crowd-MV (Bemalte 3D + Code-Crowd)

Erstelle ein vertikales Musik-Short (ca. 30 s), in dem eine einzelne Strichfigur allein oder gehend in einer überfüllten, handgemalten 3D-Straße steht – Blender-Blockout, Bild-modell-Neubemalung projiziert auf das Set, eine code-animierte Menschenmenge von 100–200 Strichfiguren (Pflanzfuß-Gang, Regenschirme, Handys, Lampenlicht, Schlagschatten, Regen), ein Zeitraffer-Ende und ein abschließender Durchgang, der auf den Song geschnitten ist.

Was ist Stick-Crowd-MV (Bemalte 3D + Code-Crowd)?

Dieses Skill baut auf dem **painted-3d-short**-Skill auf und erweitert es um eine dynamische Menschenmenge. Es ermöglicht die Erstellung von Musikvideos, in denen eine Hauptfigur durch eine handgemalte 3D-Umgebung geht, umgeben von einer code-gesteuerten Menge aus 100–200 Strichfiguren. Die Strichfiguren werden prozedural animiert, mit echtem Pflanzfuß-Gang, das sich vermittelnde Gehen und Stehen wird simuliert, Regenschirme und Handys sind enthalten, und Regen wird hinzugefügt. Das Skill unterstützt Zeitraffer-Effekte, bei denen die Menge 10× schneller läuft als die Hauptfigur, und eine Nachbearbeitung sorgt für Bloom, Vignette, Körnung und andere Effekte, die auf den Song-Schnitt abgestimmt sind. Das Skill ist für Künstler und Entwickler gedacht, die mit Blender und Python arbeiten und komplexe, bewegte Massenszenen in ihren Projekten benötigen. Es bietet eine vollständige Pipeline vom Blockout über die Animation bis zum finalen Rendering und Schnitt. Die Nutzung erfolgt über die bereitgestellten Python-Skripte (`stick.py`, `gait.py`, `post.py`) und Beispieldateien (`scene.py`, `book.py`).

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/thuann-vn/claude-stickman-crowd-mv/tree/HEAD/stick-crowd-mv

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Stick crowd MV (bemalte 3D + Code-Crowd)

Ausgeführtes Beispiel in example/: "the lonely one in the crowd" – 2 Einstellungen in einer vietnamesischen Buchstraße (Tag, Dämmerung), 4 Einstellungen in einer regnerischen japanischen Einkaufsstraße bei Nacht und ein Zeitraffer-Ende, bei dem die Kamera zum Himmel schwenkt. 30 s, 720 Frames, 24 fps.

Dieses Skill baut auf painted-3d-short auf (https://github.com/thuann-vn/claude-painted-3d-shorts): dessen p3d.py erstellt den Blockout, rendert die Standbilder, projiziert die Gemälde und ruft jede Frame Ihre Setter auf. Lesen Sie zuerst dieses Skill. Dieses hier fügt Personen hinzu.

Dateien

  • tools/stick.py — die Menge. setter = stick.make(globals(), "<location>"), übergeben Sie es an render(SHOTS, [setter]).
  • tools/gait.py — der Gang (nur numpy, ohne Blender testbar).
  • tools/post.py — abschließender Durchgang über die gerenderten Frames.
  • example/scene.py, example/book.py — die beiden Sets und ihre Einstellungen. example/jobs.json — die Neubemalungs-Prompts. example/paint/ — die Gemälde. example/m2m.json — Leerlaufclips (Mesh2Motion, CC0).

Arbeitsablauf

  1. Zuerst der Song: Schneiden Sie die gewünschten 30 s, finden Sie die Zeilen-Text-Zeiten, schneiden Sie die Einstellungen darauf (CUT in scene.py und stick.py).
  2. Blockout + Standbilder + Neubemalung + Projektion genau wie in painted-3d-short. Keine Personen in den Gemälden.
  3. Inszenieren Sie jede Einstellung in SHOTS von stick.py: Held-Start, Richtung, walk oder stand, Gesichtsneigung, Spur-Halbbreite, Blasenradius, Personen am Rand stehend, Seitenstraßen-Geher (cross).
  4. Einzelframes testen: NTEST=2 STICK_OFF=<frame> blender -b --factory-startup -P scene.py -- --proj --shots 4. Schauen Sie sie an.
  5. Vollständiger Render (maximal 3 Blender-Prozesse), post.py, Zusammenfügen mit ffmpeg + dem Song-Clip.
  6. Messen Sie, bevor Sie es glatt nennen: mittlere absolute Differenz zwischen aufeinanderfolgenden Frames pro Einstellung; max ÷ Median über ~2 bedeutet, dass etwas aufgetaucht ist (finden Sie den Frame, schauen Sie ihn an).

Wie die Personen aufgebaut sind (stick.py)

  • Echte Geometrie innerhalb des Sets, sodass die bemalte Straße sie korrekt verdeckt. Gliedmaßen aller = EIN Mesh aus 6-seitigen Prismen, deren Vertices jeden Frame neu geschrieben werden (numpy → foreach_set). Köpfe = Kugeln mit einem kamera-bezogenen 3-Ton-Cel-Shader + invertiertem Hüllkörper. 200 Personen rendern in EEVEE in weniger als einer Sekunde pro Frame.
  • Der Kopfmittelpunkt sitzt auf der Halslinie (neck + dir × radius × 0.86), oder der Kopf schwebt vom Körper weg.
  • Licht: eine Liste von Lampen pro Ort (Position, Farbe, Stärke). Jeder Kopf erhält die Summe als seine Objektfarbe; normalisieren Sie durch den größten Kanal, nicht begrenzen (Begrenzung macht alles weiß). Schlagschatten = dasselbe Gliedmaßen-Mesh, projiziert auf den Boden von der nächsten Überkopf-Lampe (Länge begrenzt) oder entlang der Sonne bei Tageslicht; plus ein weicher Kontaktklecks.
  • Regenschirme (Regen): ein 8-teiliges Kuppel-Objekt pro Person, Farbe aus der Objektfarbe, ein Drittel davon durchsichtiges Vinyl; der rechte Arm wird neu positioniert, um den Schaft zu halten; das Dach wirft einen runden Schatten. Der Held hat keinen.
  • Handys: linke Hand ans Ohr, eine dünne Platte an der Wange, die nachts leuchtet.
  • Regen: eine Box aus dünnen, kamera-zugewandten Vierecken vor der Linse, mindestens 1,9 m entfernt.

Der Gang (gait.py)

Mocap an einer Strichfigur sieht unordentlich aus (am Hals wurzelnde Arme breiten sich weit aus, Hände sind verrauscht). Stattdessen wird der Gang prozedural:

  • Füße werden aufgesetzt: ein Standfuß bleibt an seiner Stelle, während der Körper darüber hinweggeht; die Position auf dem Boden ergibt sich aus der zurückgelegten Distanz, sodass jede Geschwindigkeit rückfrei ist (gemessen: < 0,2 mm pro Frame).
  • Hüften schweben hoch über dem Standbein und tief bei doppeltem Stand; 2-Knochen-Bein-IK mit dem Knie nach vorne.
  • Arme hängen vom Hals in der Nähe des Körpers und schwingen gegen die Beine; der Kopf bleibt ruhig.
  • Spezifikationen: normal, stroll, brisk (Schrittlänge, Kadenz, Armschwung, Lehnen unterscheiden sich pro Person) und hero (kurze Schritte, Kopf gesenkt, Arme hängend). Reale Kadenzen: Stroll 80–105 Schritte/min, normal 105–125, brisk 125–140.

Crowd-Regeln, die bezahlt wurden

  • Eine gerade Spur pro Geher für die gesamte Einstellung. Lenken während der Einstellung (um den Helden herum, um die Linse herum) lässt Personen seitwärts rennen. Stattdessen simulieren Sie vor Einstellungsbeginn jeden Geher über die Einstellung und verschieben seine Spur einmal zur Seite, wenn er den leeren Kreis des Helden betreten, nahe an die Linse kommen oder zwischen Linse und Held stehen würde.
  • Die Schleife muss außer Sicht enden. Füllen Sie die Straße von ~6 m hinter der Kamera bis ~50 m davor und blenden Sie nur an der Nahtstelle aus. Eine Nahtstelle im Bild ist eine Person, die an einen anderen Ort springt.
  • Verkleinern oder blenden Sie niemals eine Person innerhalb des Bildes aus.
  • Dichte, die als "überfüllt" gelesen wird: 2–2,7 Personen pro Meter einer 6 m breiten Straße.
  • Ein Pose-Clip mit zwei links schleifenden Keys lässt die Figur zittern: halten Sie ihn an (timeScale = 0).
  • Eine stehende Person ist niemals still: Atmen, eine langsame Gewichtsverlagerung, das Drehen des Gesichts.
  • Paare gehen nebeneinander mit derselben Spezifikation, einen halben Zyklus versetzt.

Zeitraffer (der gesamte Film)

  • In jeder Einstellung läuft die Uhr der Menge 10× schneller (LAPSE, warp()); der Held allein lebt in Echtzeit. Dieser Kontrast ist die Idee des Films.
  • Rendern Sie 6 Unter-Frames pro Frame (SUB; die Frame-Anzahl der Einstellung × 6 in scene.py); post.py mittelt sie im linearen Licht, sodass Personen zu Streifen werden und Lichter hell bleiben. 30 s = 4320 Render, etwa 25 Minuten auf drei Blender-Prozessen.

Kamerabewegungen innerhalb des Gemäldes

Ein projiziertes Gemälde überlebt nur einen kleinen Vorwärts-Dolly. Aber die Rendering-Kamera kann DREHEN, HINEINZOOMEN und ROLLEN innerhalb des Gemäldes frei: eine reine Drehung hat keine Parallaxe. CAMK in stick.py enthält Keys pro Einstellung – (Teil der Einstellung, Zoom, Schwenk, Neigung, Rollen, Zielen auf den Helden) – angewendet nach p3ds look(); Schwenk und Neigung werden auf den Raum begrenzt, den der Zoom verlässt, und ein gerollter Frame wird gerade genug gezoomt, um innerhalb des Bildes zu bleiben. Geben Sie jeder Einstellung eine Bewegung mit einem Grund:

  • eng auf ihn beginnen, nach oben neigen und zurückziehen, um die überfüllte Straße zu enthüllen;
  • langsames Hineinzoomen auf das Gesicht, während er auf uns zukommt;
  • von den Neonlichtern hinunter in die Straße, bis wir ihn finden;
  • ein geneigter Horizont, der sich beim Hineinzoomen stabilisiert;
  • ein Schwenk über vorbeiziehende Regenschirme, der auf ihm landet;
  • von oben: eng auf den nackten Kopf, drehend, zurückziehen über die Regenschirme;
  • das Ende: EIN sehr weites Bild (14 mm, ~20° nach oben gerichtet) und eine 28 mm Render-Kamera, die von ihm zum Himmel neigt.

Für einen Orbit oder einen echten Kran-Flug malen Sie ein extra weites Bild für diese Einstellung.

Abschließender Durchgang (post.py)

Bloom auf das, was wirklich hell ist, Vignette, Körnung (stärker im Dunkeln), ein wenig Farb-Fransen, langsames Handkamera-Wackeln (nicht beim Zeitraffer), Punch-In + Blitz bei jedem Schnitt und ein kleiner Puls von Zoom und Glühen auf den Kick des Songs (tiefes Band des Audios, Frame für Frame). Halten Sie jeden Effekt klein; zusammen sind sie genug.

Musik

Verwenden Sie Musik, für die Sie die Rechte haben; es befindet sich kein Audio in diesem Repository. CLIP=/pfad/clip.m4a python post.py liest den Song für den Kick-Puls. Um einen neuen Titel auf bereits gerenderte Einstellungen abzustimmen, schieben Sie ein 30-s-Fenster über den Titel und behalten Sie den Offset, bei dem die Onset-Stärke zu den Schnittzeiten am höchsten ist. Der finale Schnitt des Beispiels verwendet "Thunder & Rain Inst. & Construction Kits" von coruscate (https://ccmixter.org/files/Coruscate/61228), CC BY 3.0.

Verwandte Skills