[PYTHON] Comment implémenter un sélecteur de dégradé dans Houdini

introduction

Je vais vous montrer comment implémenter un sélecteur de gradient comme Substance Designer annoncé par M. Ando au PySide Study Group l'autre jour à Houdini. Présentation du sélecteur de dégradés d'Ando, article de commentaire

Lorsqu'elle est réellement utilisée, la gradation captée par le sélecteur est appliquée aux paramètres de la lampe comme indiqué dans la figure ci-dessous. Dans la figure ci-dessous, l'image est chargée dans l'éditeur de réseau, mais vous pouvez obtenir la couleur n'importe où sur l'écran.

Méthode de mise en œuvre

  1. Téléchargez le code à partir de l'URL ci-dessous. https://snippets.cacher.io/snippet/2c7496d1dbbdc093033c
  2. Déplacez le ** gradationPicker.py ** téléchargé dans un dossier où Houdini peut lire Python. Si vous ne savez pas, copiez-le dans % HOMEDRIVE %% HOMEPATH% \ Documents \ houdini version \ scripts \ python et il sera reconnu automatiquement (créez-le s'il n'existe pas).
  3. À partir de là, il y a une légère différence entre la mise en œuvre dans HDA et la mise en œuvre dans les paramètres des nœuds existants.

Code qui applique un dégradé aux paramètres de la rampe

# -*- coding: utf-8 -*-

import hou
from PySide2.QtCore import Qt

from gradationPicker import ColorPick

class _GCProtector(object):
    widgets = []

def rampColorPicker(parm, threshold=0.05):
    def setRampColor(colors):
        #Les couleurs d'argument sont[Position du dégradé,Couleur]Liste contenant
        curveKeys = []
        curveValues = []
        #Divisez la liste bidimensionnelle en curveKeys et curveValues
        for pos, color in colors:
            curveKeys.append(pos)
            #2 car l'espace colorimétrique de PySide est sRGB et Houdini est linéaire.Équerre et convertir
            curveValues.append([(ch / 255.0) ** 2.2 for ch in color])
        linears = [hou.rampBasis.Linear] * len(colors)
        ramp = hou.Ramp(linears, curveKeys, curveValues)
        parm.set(ramp)

    picker = ColorPick()
    #S'affiche au premier plan pour que la mise au point ne se déplace pas
    picker.setWindowFlags(Qt.WindowStaysOnTopHint)
    #Définir un seuil pour la différence de couleur identifiée
    picker.threshold = threshold
    #Faire en sorte que la fenêtre principale du sélecteur remplisse l'écran
    picker.showFullScreen()
    #Exécuter une fonction lorsque la souris est relâchée
    picker.getGradation.connect(setRampColor)
    #Traitement pour éviter de libérer de la mémoire et de disparaître immédiatement lorsqu'il est affiché normalement
    _GCProtector.widgets.append(picker)
  1. Enfin, créez un bouton pour exécuter ce code.
  2. Entrez le code suivant dans le champ Script de rappel du bouton créé.

Si vous souhaitez définir une icône pour un bouton, entrez BUTTONS_secondary_colors dans le champ Icône de bouton et une icône comme celle-ci sera ajoutée.

Désormais, lorsque vous appuyez sur le bouton, vous serez en mode Sélecteur de dégradés, alors faites glisser et choisissez une couleur.

finalement

Voilà comment implémenter le sélecteur de dégradé dans Houdini. PySide peut faire beaucoup de choses et c'est amusant. En passant, en modifiant le sélecteur de gradation, vous pouvez également créer une fonction pour écrire la courbe du paramètre de la lampe à la main, comme indiqué ci-dessous.

Recommended Posts

Comment implémenter un sélecteur de dégradé dans Houdini
Comment implémenter provisoirement une barre de progression dans un langage de script
Comment obtenir stacktrace en python
Comment effacer un taple dans une liste (Python)
Comment implémenter la fonctionnalité de type helper Rails dans Django
Comment incorporer des variables dans des chaînes python
Comment implémenter la mémoire partagée en Python (mmap.mmap)
Comment créer un fichier JSON en Python
Comment notifier les canaux Discord en Python
Comment implémenter un nouveau pilote de processeur CPUFreq
[Python] Comment dessiner un histogramme avec Matplotlib
Comment créer une API Rest dans Django
Comment écrire un document tuple nommé en 2020
Comment compter les nombres dans une plage spécifique
Comment lire des fichiers dans différents répertoires
Comment se moquer d'une fonction publique dans Pytest
Comment spécifier un schéma dans les paramètres de la base de données Django
Comment convertir / restaurer une chaîne avec [] en python
Je veux facilement implémenter le délai d'expiration en python
[Python] Comment développer des variables dans une chaîne de caractères
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment afficher DataFrame sous forme de tableau dans Markdown
Comment exécuter une commande à l'aide d'un sous-processus en Python
Comment référencer des fichiers statiques dans un projet Django
[Linux] Comment mettre votre IP dans une variable
Comment appeler une fonction
Comment pirater un terminal
Comment développer en Python
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
Comment découper un bloc de plusieurs tableaux à partir d'un multiple en Python
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Comment sortir un document au format pdf avec Sphinx
Une histoire sur la façon de spécifier un chemin relatif en python.
Comment utiliser la méthode __call__ dans la classe Python
Comment importer des fichiers où vous le souhaitez en Python
Comment définir plusieurs variables dans une instruction Python for
Remarques sur la façon de charger un environnement virtuel avec PyCharm
J'ai essayé "Comment obtenir une méthode décorée en Python"
Comment développer dans un environnement virtuel Python [Memo]
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment vérifier si une valeur existe dans un type d'énumération
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment implémenter Python EXE pour Windows avec le conteneur Docker
Comment obtenir une liste d'exceptions intégrées pour python
Comment importer NoteBook en tant que module dans Jupyter (IPython)
Une histoire sur la tentative d'implémentation de variables privées en Python.
Comment faire une traduction japonais-anglais
[Python] Comment faire PCA avec Python
Comment gérer une session dans SQLAlchemy
Comment mettre un lien symbolique
Comment écrire sobrement avec des pandas
Implémenter un paramètre de date dans Tkinter
Comment utiliser SQLite en Python
Comment créer un bot slack
Comment créer un package Conda
Comment créer un robot - Avancé
Comment créer une fonction récursive