Comment définir la résolution de sortie pour chaque image clé dans Blender

2020-11-19 00_11_40-StrokesPlus.jpg

J'ai décidé d'utiliser l'image de rendu de Blender pour le brouillon du dessin animé. On suppose que l'image de rendu pour chaque image clé sera collée dans le logiciel de création de dessins animés en correspondance avec "1 image = 1 image clé".

Normalement, les cadres de dessin animé ont des proportions différentes pour chaque image. Cependant, Blender ne vous permet pas de définir la résolution de chaque image clé. Vous devez avoir la même résolution pour toutes les images clés ou basculer manuellement image par image. Les deux sont peu pratiques.

J'ai donc réfléchi à la manière de définir la résolution de chaque image clé. Blender vous permet de définir une chaîne de ** marqueurs ** sur les images clés, j'ai donc décidé d'y enregistrer le rapport hauteur / largeur de la résolution.

Dans le manga à lecture horizontale générale, la taille verticale et horizontale du cadre est indéfinie, mais cette fois, il s'agit d'un manga à lecture verticale, et on suppose que la largeur du cadre est toujours constante à 2480px. La méthode de spécification simultanée de la hauteur et de la largeur est complétée à la fin.

Environnement d'exécution

Chose que tu veux faire

screenshot.1596102429.png

Politique de réalisation

Etapes de configuration

Entrez le rapport hauteur / largeur dans le marqueur

Dans le panneau Montage, appuyez sur M pour ajouter un marqueur à l’image clé et sur Ctrl + M pour entrer le rapport hauteur / largeur comme nom du marqueur.

Cette fois, entrez la valeur de «Y / X». Par exemple, X: Y = 4: 3 est "0,75", 1: 1 est "1", 1: 2 est "2".

À propos, plusieurs marqueurs peuvent être définis dans une image, mais dans ce programme, la première valeur trouvée est utilisée comme rapport hauteur / largeur.

Ecrire un script Python

Ouvrez ensuite le panneau Editeur de texte et entrez le code suivant.

set_resolution_from_marker.py


import bpy

RESOLUTION_X = 2480
DEFAULT_RATIO = 1.0


def find_ratio_from_current_keyframe():
    #Recherchez le jeu de marqueurs pour l'image clé actuelle à partir de tous les marqueurs
    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]
    
    #Renvoie le ratio par défaut si le marqueur n'existe pas
    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)
    #Convertit la chaîne de marqueur en nombre et la renvoie
    for m in markers:
        try:
            ratio = float(m)
            print("Ratio is set to ", ratio)
            return ratio
        except ValueError as e:
            print(e)
            continue

    #Renvoie le ratio par défaut s'il n'y a pas de marqueurs pouvant être convertis en nombres
    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()
    

#Définir le rappel pour mettre à jour la résolution lors du changement d'images clés
bpy.app.handlers.frame_change_pre.append(update_resolution)

ℹ️ Bref commentaire

Exécutez le script

Exécutez "Exécuter le script (Alt + P)" dans le panneau de l'éditeur de texte.

Après cela, la résolution X et Y est définie automatiquement chaque fois que vous changez d'images clés.

Supplément

Que faire si je veux pouvoir régler à la fois la résolution X et Y?

Cette fois, c'était un cas un peu particulier de "X = 2480px fixed", mais si vous voulez définir X et Y en même temps, vous pouvez facilement le gérer en changeant la notation du marqueur et le script Python.

Par exemple, écrivez «1280,720» dans le marqueur, divisez la chaîne par des virgules dans un script Python et affectez la première valeur à X et la deuxième valeur à Y.

Ne peut-il pas être réalisé avec un chauffeur?

Je ne pouvais pas le faire. Cela est dû au fait que le pilote ne peut définir aucune des valeurs sous la propriété Scene, y compris la résolution.

Pourquoi la résolution ne se met-elle pas à jour lorsque j'entre ou modifie un marqueur?

Je n'ai pas trouvé de rappel pouvant être appelé à ce moment-là: déçu: Désolé de vous déranger, mais veuillez utiliser les touches fléchées pour faire avancer l'image clé d'une unité et la reculer.

Lien de référence

Recommended Posts

Comment définir la résolution de sortie pour chaque image clé dans Blender
Comment connaître le répertoire actuel en Python dans Blender
[Blender] Comment définir dynamiquement les sélections EnumProperty
[Python] Comment afficher les valeurs de liste dans l'ordre
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
Comment définir l'environnement de développement pour chaque projet avec VSCode + extension Python + Miniconda
Comment définir l'attribut de classe html dans le formulaire forms.py de Django
Comment écraser la sortie sur la console
Comment trouver la somme / somme cumulée pour chaque groupe à l'aide de DataFrame dans Spark [version Python]
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
[Blender] Comment définir shape_key avec un script
Comment régler l'heure du serveur sur l'heure japonaise
Comment obtenir une sortie colorée sur la console
Changer le module à charger pour chaque environnement d'exécution en Python
Comment utiliser la bibliothèque C en Python
Comment utiliser MkDocs pour la première fois
Comment définir l'emplacement du navigateur dans Headless Chrome
Comment effacer les caractères générés par Python
Comment obtenir les fichiers dans le dossier [Python]
Comment générer "Ketsumaimo" en standard en Python
Comment trouver la corrélation pour les variables catégorielles
Comment définir l'affinité du processeur pour les threads de processus
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
Comment configurer l'authentification par clé publique avec SSH
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
Comment récupérer la nième plus grande valeur en Python
[Pour les débutants] Comment utiliser la commande say avec python!
Comment obtenir le nom de la variable lui-même en python
Comment exécuter le module Ansible ajouté dans Ansible Tower
Le moyen le plus simple de configurer Last-Modified dans Flask
Comment obtenir le nombre de chiffres en Python
Comment créer un sous-menu avec le plug-in [Blender]
Comment exécuter python dans l'espace virtuel (pour MacOS)
Définissez des règles de mise à jour pour chaque paramètre dans Chainer v2
Définissez DateField du formulaire sur type = date dans Django
Comment éliminer les caractères déformés dans l'image de sortie matplotlib
Comment utiliser la clause exist dans l'ensemble de requêtes Django
[Introduction à Udemy Python3 + Application] 30. Comment utiliser l'ensemble
Comment utiliser le modèle appris dans Lobe en Python
Trouvez une ligne directrice pour le nombre de processus / threads à définir sur le serveur d'applications
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Comment activer l'instruction for lorsqu'il existe plusieurs valeurs pour une clé dans le dictionnaire
Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~
Définir une tâche pour définir l'environnement de fabric dans YAML
Comment écrire une validation personnalisée dans Django REST Framework
Comment trouver le nombre optimal de clusters pour les k-moyennes
Définir le format de sortie du type DateTime dans le modèle Django
Comment configurer Ubuntu pour le sous-système Windows pour Linux 2 (WSL2)
[python] Comment vérifier si la clé existe dans le dictionnaire
Comment prendre en charge x-nullable pour swagger dans la bibliothèque jsonschema de python
Code de test pour vérifier les liens brisés dans la page
Sortie "Dessiner fougère par programmation" dans le processus de dessin en Python
Comment déboguer une bibliothèque Python standard dans Visual Studio
Comment importer la bibliothèque Python configurée dans EFS dans Lambda
Vérifiez le fonctionnement de Python pour .NET dans chaque environnement
[python] Comment utiliser Matplotlib, une bibliothèque pour dessiner des graphiques
Comment sortir un document au format pdf avec Sphinx
Comment utiliser la méthode __call__ dans la classe Python
Changer la destination de sortie standard en un fichier en Python
Comment définir plusieurs variables dans une instruction Python for