[PYTHON] So stellen Sie die Ausgabeauflösung für jeden Keyframe in Blender ein

2020-11-19 00_11_40-StrokesPlus.jpg

Ich entschied mich, Blenders Renderbild für den Entwurf des Cartoons zu verwenden. Es wird davon ausgegangen, dass das Renderbild für jeden Keyframe entsprechend "1 Frame = 1 Keyframe" in die Cartoon-Erstellungssoftware eingefügt wird.

Normalerweise haben Cartoon-Frames unterschiedliche Seitenverhältnisse für jeden Frame. In Blender können Sie jedoch nicht die Auflösung für jeden Keyframe festlegen. Sie müssen für alle Keyframes die gleiche Auflösung haben oder Frame für Frame manuell wechseln. Beides ist unpraktisch.

Also habe ich mir überlegt, wie ich die Auflösung für jeden Keyframe einstellen soll. Mit Blender können Sie eine Reihe von ** Markierungen ** für Keyframes festlegen. Daher habe ich beschlossen, das Seitenverhältnis der Auflösung dort aufzuzeichnen.

Im allgemeinen horizontalen Lesemanga ist die vertikale und horizontale Größe des Rahmens unbestimmt, diesmal handelt es sich jedoch um einen vertikalen Lesemanga, und es wird angenommen, dass die Breite des Rahmens bei 2480px immer konstant ist. Die Methode zur gleichzeitigen Angabe von Höhe und Breite wird am Ende ergänzt.

Ausführungsumgebung

Was du machen willst

screenshot.1596102429.png

Realisierungspolitik

Einrichtungsschritte

Geben Sie das Seitenverhältnis in die Markierung ein

Drücken Sie im Zeitleistenfenster M, um dem Keyframe eine Markierung hinzuzufügen, und Strg + M, um das Seitenverhältnis als Markierungsname einzugeben.

Geben Sie diesmal den Wert "Y / X" ein. Zum Beispiel ist X: Y = 4: 3 "0,75", 1: 1 ist "1", 1: 2 ist "2".

Übrigens können mehrere Marker in einem Frame gesetzt werden, aber in diesem Programm wird der erste gefundene Wert als Seitenverhältnis verwendet.

Schreiben Sie ein Python-Skript

Öffnen Sie dann das Texteditorfenster und geben Sie den folgenden Code ein.

set_resolution_from_marker.py


import bpy

RESOLUTION_X = 2480
DEFAULT_RATIO = 1.0


def find_ratio_from_current_keyframe():
    #Suchen Sie in allen Markierungen nach dem Markierungssatz für den aktuellen Keyframe
    marker_items =  bpy.context.scene.timeline_markers.items()
    current = bpy.data.scenes["Scene"].frame_current
    markers = [item[0] for item in marker_items if item[1].frame == current]
    
    #Gibt das Standardverhältnis zurück, wenn der Marker nicht vorhanden ist
    if len(markers) < 1:
        print(f"No marker is set to current keyframe. Now ratio is {DEFAULT_RATIO}.")
        return DEFAULT_RATIO

    print("Found marker(s): ", markers)
    #Konvertiert die Markierungszeichenfolge in eine Zahl und gibt sie zurück
    for m in markers:
        try:
            ratio = float(m)
            print("Ratio is set to ", ratio)
            return ratio
        except ValueError as e:
            print(e)
            continue

    #Gibt das Standardverhältnis zurück, wenn keine Markierungen vorhanden sind, die in Zahlen konvertiert werden können
    print(f"Marker is set to current keyframe but not valid number. Now ratio is {DEFAULT_RATIO}.")
    return DEFAULT_RATIO


def update_resolution(scene):
    scene.render.resolution_x = RESOLUTION_X
    scene.render.resolution_y = RESOLUTION_X * find_ratio_from_current_keyframe()
    

#Stellen Sie den Rückruf so ein, dass die Auflösung beim Ändern von Keyframes aktualisiert wird
bpy.app.handlers.frame_change_pre.append(update_resolution)

ℹ️ Kurzer Kommentar

Führen Sie das Skript aus

Führen Sie "Skript ausführen (Alt + P)" im Texteditor aus.

Danach wird die Auflösung X & Y bei jedem Keyframe-Wechsel automatisch eingestellt.

Ergänzung

Was ist, wenn ich sowohl die Auflösung X als auch die Auflösung einstellen möchte?

Diesmal war es ein etwas spezieller Fall von "X = 2480px behoben". Wenn Sie jedoch X und Y gleichzeitig festlegen möchten, können Sie dies problemlos tun, indem Sie die Markernotation und das Python-Skript ändern.

Schreiben Sie beispielsweise "1280.720" in die Markierung, teilen Sie die Zeichenfolge in einem Python-Skript durch Kommas und weisen Sie X den ersten Wert und Y den zweiten Wert zu.

Kann man das nicht mit einem Fahrer realisieren?

Ich konnte es nicht tun. Dies liegt daran, dass der Treiber keinen der Werte unter der Scene-Eigenschaft festlegen kann, einschließlich der Auflösung.

Warum wird die Auflösung nicht aktualisiert, wenn ich einen Marker eingebe oder ändere?

Ich konnte keinen Rückruf finden, der zu diesem Zeitpunkt angerufen werden konnte: enttäuscht: Es tut uns leid, Sie zu stören, aber bitte verwenden Sie die Pfeiltasten, um den Keyframe um eins vorzuschieben und ihn zurückzuschieben.

Referenzlink

Recommended Posts

So stellen Sie die Ausgabeauflösung für jeden Keyframe in Blender ein
Wie Sie das aktuelle Verzeichnis in Python in Blender kennen
[Blender] So legen Sie die Auswahlelemente von EnumProperty dynamisch fest
[Python] So geben Sie Listenwerte der Reihe nach aus
Geben Sie für jede Datei die angegebene Tabelle der Oracle-Datenbank in Python in Excel aus
So legen Sie die Entwicklungsumgebung für jedes Projekt mit VSCode + Python-Erweiterung + Miniconda fest
So legen Sie das HTML-Klassenattribut in Djangos forms.py fest
So überschreiben Sie die Ausgabe auf die Konsole
So ermitteln Sie die kumulative Summe für jede Gruppe mithilfe von DataFrame in Spark [Python-Version]
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
[Blender] So legen Sie shape_key mit dem Skript fest
So stellen Sie die Serverzeit auf japanische Zeit ein
So erhalten Sie eine farbige Ausgabe an die Konsole
Wechseln Sie das zu ladende Modul für jede Ausführungsumgebung in Python
Verwendung der C-Bibliothek in Python
So verwenden Sie MkDocs zum ersten Mal
So legen Sie den Browserstandort in Headless Chrome fest
So löschen Sie die von Python ausgegebenen Zeichen
So erhalten Sie die Dateien im Ordner [Python]
So geben Sie "Ketsumaimo" standardmäßig in Python aus
So finden Sie die Korrelation für kategoriale Variablen
Festlegen der CPU-Affinität für Prozessthreads
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
So richten Sie die Authentifizierung mit öffentlichem Schlüssel mit ssh ein
So legen Sie einen freigegebenen Ordner mit dem Host-Betriebssystem in CentOS7 auf Virtual BOX fest
So rufen Sie den n-ten größten Wert in Python ab
[Für Anfänger] Wie man den Befehl say mit Python benutzt!
So erhalten Sie den Variablennamen selbst in Python
Ausführen des in Ansible Tower hinzugefügten Ansible-Moduls
Der einfachste Weg, um Last-Modified in Flask einzurichten
So ermitteln Sie die Anzahl der Stellen in Python
So erstellen Sie ein Untermenü mit dem Plug-In [Blender]
So führen Sie Python im virtuellen Raum aus (für MacOS)
Legen Sie in Chainer v2 Aktualisierungsregeln für jeden Parameter fest
Setzen Sie DateField des Formulars in Django auf type = date
So entfernen Sie verstümmelte Zeichen im Matplotlib-Ausgabebild
Verwendung der Exist-Klausel in Django Queryset
[Einführung in die Udemy Python3 + -Anwendung] 30. Verwendung des Sets
Verwendung des in Lobe in Python erlernten Modells
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
So drehen Sie die for-Anweisung, wenn das Wörterbuch mehrere Werte für einen Schlüssel enthält
So legen Sie Variablen fest, die in der gesamten Django-App verwendet werden können ~ Praktisch für Vorlagen usw. ~
Definieren Sie eine Aufgabe zum Festlegen der Fabric-Umgebung in YAML
So schreiben Sie eine benutzerdefinierte Validierung in Django REST Framework
So finden Sie die optimale Anzahl von Clustern für k-means
Legen Sie das Ausgabeformat vom Typ DateTime in der Django-Vorlage fest
So richten Sie Ubuntu für Windows Subsystem für Linux 2 (WSL2) ein
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Unterstützung von x-nullable für swagger in der jsonschema-Bibliothek von Python
Testcode, um auf der Seite nach defekten Links zu suchen
Geben Sie "Farn programmgesteuert zeichnen" in den Zeichenprozess in Python ein
So debuggen Sie eine Standard-Python-Bibliothek in Visual Studio
So importieren Sie die in EFS eingerichtete Python-Bibliothek in Lambda
Überprüfen Sie die Funktionsweise von Python für .NET in jeder Umgebung
[Python] Verwendung von Matplotlib, einer Bibliothek zum Zeichnen von Diagrammen
So geben Sie ein Dokument im PDF-Format mit Sphinx aus
Verwendung der Methode __call__ in der Python-Klasse
Ändern Sie das Standardausgabeziel in eine Datei in Python
So definieren Sie mehrere Variablen in einer Python for-Anweisung