Houdini에서 그라데이션 선택기를 구현하는 방법

소개



요 전날, PySide 연구회 에서 안도씨가 발표한 Substance Designer와 같은 그라데이션 피커를 Houdini에 구현하는 방법을 소개합니다.
안도 씨의 그라데이션 피커 소개, 해설 기사

실제로 사용하면 아래 그림과 같이 램프 파라미터에 피커로 주운 그라데이션이 적용됩니다.
아래 그림은 네트워크 에디터에 화상을 읽고 있습니다만, 화면내이면 어디서나 색을 취득할 수 있습니다.


구현 방법


  • 아래 URL에서 코드를 다운로드합니다.
    h tps : // s ぺ ts. 카치 r. 이오 / s 닛페 t / 2c7496d1d bdc093033c
  • 다운로드 한 gradationPicker.py를 Houdini가 Python을 읽을 수있는 폴더로 이동합니다.
    모르는 경우는 %HOMEDRIVE%%HOMEPATH%\Documents\houdiniバージョン\scripts\python 에 복사하면 자동으로 인식됩니다 (폴더가 없는 경우는 작성합니다).
  • 여기에서 HDA에 구현하는 경우와 이미 존재하고 있는 노드의 파라미터에 구현하는 경우에 조금 다릅니다.
  • HDA에 구현하는 경우
    HDA의 Type Properties > Scripts 탭으로 이동하여 Event Handler를 Python Module로 변경합니다.
    그러면 오른쪽의 파이썬 코드 필드가 활성화되므로 아래의 램프 매개 변수에 그라데이션을 적용하는 코드를 입력합니다.
  • 존재하는 노드의 파라미터에 구현하는 경우
    Houdini 메뉴에서 Windows > Python Source Editor를 클릭하고 Python Source Editor를 시작하고 코드 입력란에 아래의 램프 파라미터에 그라데이션을 적용하는 코드를 입력합니다.

  • 램프 파라미터에 그라데이션을 적용하는 코드


    # -*- 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):
            # 引数のcolorsは[グラデーションの位置, 色]が入ったリスト
            curveKeys = []
            curveValues = []
            # 二次元のリストをcurveKeys、curveValuesの二つに分ける
            for pos, color in colors:
                curveKeys.append(pos)
                # PySideの色空間がsRGBで、Houdiniはリニアなので、2.2乗して変換
                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()
        # フォーカスが移らないように最前面に表示
        picker.setWindowFlags(Qt.WindowStaysOnTopHint)
        # どれぐらい色の差を識別するかのしきい値を設定
        picker.threshold = threshold
        # ピッカーのメインウィンドウをスクリーン全体に表示する
        picker.showFullScreen()
        # マウスを離した時に関数を実行する
        picker.getGradation.connect(setRampColor)
        # 普通に表示するとメモリを開放してすぐに消えてしまうのを回避する処理
        _GCProtector.widgets.append(picker)
    

    4. 마지막으로 이 코드를 실행하기 위한 버튼을 작성합니다.
    5. 작성한 버튼의 Callback Script란에 아래 코드를 입력합니다.
  • HDA의 경우hou.phm().rampColorPicker(kwargs['node'].parm('ramp'), threshold=0.05)
  • 이미 존재하는 노드의 경우hou.session.rampColorPicker(kwargs['node'].parm('ramp'), threshold=0.05)
    parm('ramp') 의 개소는 대상으로 하는 램프 파라미터의 이름으로 변경해 주십시오.
    threshold의 값은 숫자가 낮을수록 정밀도가 높아지지만 그만큼 키가 늘어납니다.

  • 버튼에 아이콘을 설정하려면 Button Icon 필드에 BUTTONS_secondary_colors를 입력하면 같은 아이콘이 표시됩니다.

    이제 버튼을 누르면 그라데이션 피커 모드가되므로 드래그하여 색상을 선택해보십시오.

    마지막으로



    이상 그라데이션 피커를 Houdini에 구현하는 방법이었습니다.
    PySide는 여러가지가 되어 즐겁네요.
    덧붙여서 그라데이션 피커를 개변하는 것으로 아래와 같은 램프 파라미터의 커브를 필기로 쓰는 기능을 만들 수도 있습니다.

    좋은 웹페이지 즐겨찾기