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.
% HOMEDRIVE %% HOMEPATH% \ Documents \ houdini version \ scripts \ python
et il sera reconnu automatiquement (créez-le s'il n'existe pas).** Lors de la mise en œuvre sur HDA ** Accédez à l'onglet HDA ** Type Properties **> ** Scripts ** et remplacez le ** Event Handler ** par ** Python Module **. Cela activera le champ de code Python sur la droite, où vous pourrez entrer le code __ pour appliquer le dégradé aux paramètres __lamp ci-dessous.
** Lors de la mise en œuvre dans les paramètres d'un nœud existant ** Cliquez sur ** Windows **> ** Python Source Editor ** dans le menu Houdini pour lancer l'éditeur de source Python et entrez le code ** pour appliquer la gradation aux ** paramètres de la lampe ci-dessous dans le champ de saisie de code.
# -*- 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)
** Pour HDA **
hou.phm().rampColorPicker(kwargs['node'].parm('ramp'), threshold=0.05)
** Pour les nœuds qui existent déjà **
hou.session.rampColorPicker(kwargs['node'].parm('ramp'), threshold=0.05)
parm ('rampe')
par le nom du paramètre de lampe cible.
Plus la valeur de seuil est basse, plus elle est précise, mais plus il y a de clés.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.
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