Q100387: Python 스크립팅을 통해 키프레임을 설정하고 애니메이션 곡선을 조정하는 방법

팔로우

요약

Nuke 스크립트에서 애니메이션 키를 설정할 때(예: 변환 노드 또는 로토 마스크의 위치 키 지정) Python을 통해 애니메이션 곡선을 정의하면 많은 유연성을 얻을 수 있습니다. 사용자는 애니메이션 키의 생성 및 위치 지정을 자동화하고, 필요에 따라 경사를 조정하고, 파이프라인 내에서 사용되는 다양한 도구에서 곡선 데이터를 공유할 수 있습니다.

이 문서에서는 테스트 가능한 예제 스크립트를 포함하여 Python을 사용하여 애니메이션 키를 만들고 곡선 경사를 업데이트하는 방법을 설명합니다.

추가 정보

애니메이션 키가 Nuke 내에서 설정되면( 노드 노브 키 지정을 통해) 키프레임이 곡선 편집기 내에서 곡선으로 표시됩니다.

아래 스크린샷에서는 ColorCorlect 노드의 'saturation.r' 노브에 대해 다양한 프레임에 설정된 애니메이션 키로 생성된 곡선을 볼 수 있습니다.

curve_editor2.png

  • 값은 사용자가 'saturation.r' 노브에 새 값을 추가한 위치입니다.
  • 곡선 편집기는 XY 그래프를 사용합니다. 여기서 X는 프레임 범위(0-100의 프레임 범위)를 표시하고 Y 는 'saturation.r' 노브 값(0과 1 사이)을 표시합니다.
  • 사용자가 선택한 키프레임은 프레임 53이며 값은 0.59입니다.
  • 선택한 키프레임에는 경사를 정의하는 접선도 표시됩니다. 경사를 조작하면 키프레임 사이의 곡선 모양을 맞춤 설정하여 더욱 매끄럽거나 일정하게 만들 수 있습니다.
  • 선택한 곡선이 부드러운 보간을 사용하고 있습니다.
  • 표현식 필드에는 표현식이 curve 라고 표시됩니다. 이는 애니메이션이 곡선 편집기 내의 곡선에 의해 제어된다는 의미입니다.

Python을 사용하여 키프레임 설정

Python 스크립트를 통해 키프레임 애니메이션을 생성할 때 각 키에 대해 설정해야 하는 여러 속성이 있습니다.

여기에는 다음이 포함됩니다.

  • x - 점의 수평 위치(프레임 값)
  • y - 점의 수직 위치(노브 값)
  • 보간 - 첫 번째 키의 왼쪽 기울기와 마지막 키의 오른쪽 기울기를 제외한 모든 기울기를 계산하는 데 사용됩니다.
  • 외삽 - 가장 왼쪽 및 가장 오른쪽 경사를 계산합니다.

사용자 정의 보간을 설정하려면 다음 속성을 설정하여 생성된 각 키의 탄젠트를 개별적으로 편집할 수 있습니다.

  • lslope - 점 왼쪽의 도함수
  • r 기울기 - 점 오른쪽의 도함수
  • la - 왼쪽 '바이큐빅' 값
  • r a - 올바른 '바이큐빅' 값

다음은 lslope 및 rslope를 강조하여 키프레임의 접선을 표시하는 스크린샷입니다.

탄젠트2.PNG

Python AnimationKey 클래스와 보간 및 외삽 속성에 사용할 수 있는 옵션에 대해 자세히 알아보려면 Nuke Python API 참조 가이드의 AnimationKey 섹션을 확인하세요.

예제 스크립트

첨부된 키프레임 애니메이션 곡선 생성을 자동화하는 방법을 보여주는 예제 Python 스크립트를 찾을 수 있습니다. 이것이 Nuke 의 스크립트 편집기에서 실행되면 애니메이션 'color.r' 손잡이가 있는 상수 노드가 생성됩니다.

스크립트를 검토하려면 Nuke 의 스크립트 편집기 또는 Python 편집 도구(예: PyCharm, Sublime Text, Notepad++ 등)에서 첨부 파일( CurveTest.py )을 다운로드하여 엽니다 .

NUKE 에서 스크립트 사용하기

Nuke 내에서 CurveTest.py 파일을 가져오거나 해당 내용을 스크립트 편집기에 복사/붙여넣은 다음 실행하여 스크립트를 테스트할 수 있습니다.

스크립트가 실행되면 'color.r' 노브에 애니메이션 키가 있는 상수 노드가 생성됩니다.

노드를 선택하고 곡선 편집기에서 보면 해당 애니메이션 키를 검사하고 생성된 곡선을 볼 수 있습니다.

다음은 곡선 편집기 탭에서 검사할 수 있는 스크립트의 출력입니다.

키를 수동으로 조작하는 것이 가능합니다. 하나의 키를 선택하면 추가로 조작할 수 있는 접선이 표시됩니다.

고급 팁 및 프로세스를 포함한 곡선 편집에 대한 자세한 내용은 Nuke 문서의 곡선 편집 섹션을 참조하세요.

스크립트 설명

CurveTest.py Python 스크립트에는 각 함수의 기능과 해당 함수가 스크립트에서 사용되는 이유를 설명하는 설명이 포함되어 있습니다. 아래에는 특정 기능과 개념에 대한 상위 수준의 개요가 포함되어 있습니다.

애니메이션 곡선 변수 설정

스크립트는 애니메이션 곡선을 정의하는 데 사용되는 데이터의 초기화로 시작됩니다.

이 데이터를 설정하는 효율적인 방법은 다음과 같이 Python 사전 객체 내에 키의 프레임, 값 및 접선 정보를 유지하는 것입니다.

# Curve data stored in dictionary object
curve_data = {1: {'val': 1, 'in_slope': 0.0}, 30: {'val': 10, 'in_slope': 0.0}, 50: {'val': 5, 'in_slope': -56.957}, 60: {'val': 0, 'in_slope': -14.341}, 70: {'val': 5, 'in_slope': 56.957}, 80: {'val': 5, 'in_slope': -77.891}, 90: {'val': 5, 'in_slope': 0.0}}

새 애니메이션 키프레임이 사전 개체에 추가된 다음 각 키를 애니메이션 곡선에 추가하여 사전이 반복됩니다.

정의 사용

곡선을 효율적이고 다른 스크립트에서 재사용할 수 있도록 만들기 위해 모든 기능은 정의 에 보관됩니다. 모든 정의가 의존하는 것처럼 이는 다른 Python 스크립트에 쉽게 통합될 수 있습니다. 사전 개체에서 제공하는 'curve_data'입니다.

def create_curve(curve_data):

노드 및 노브 설정

스크립트의 예제 사례에서는 상수 노드를 생성하고 곡선 애니메이션 데이터를 '색상' 노브에 저장합니다. 다른 노드와 손잡이에 이 설정을 사용하려면 아래 줄에서 해당 이름을 바꿀 수 있습니다.

node = nuke .createNode('Constant')
attr = node['color']
attr.setAnimated()

애니메이션 노브에 여러 키를 추가하려면 노브를 '애니메이션'으로 추가로 설정해야 합니다.

사용자 정의 보간

AnimationKey 문서에 설명된 대로 nuke .USER_SET_SLOPE가 설정된 경우 보간 및 외삽이 무시되고 대신 사용자 생성 탄젠트가 사용됩니다.

Python 스크립트의 55번째 줄을 보면 changeInterpolation() 함수가 'nuke.USER_SET_SLOPE'로 설정되어 있습니다. 이는 애니메이션 곡선이 사용자 정의 보간 탄젠트를 사용하고 있음을 의미합니다.

curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)

다음과 같은 인쇄 문을 추가하면:

curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)
print (curve.toScript())

그런 다음 스크립트 편집기에서 스크립트를 실행하면 곡선 내에서 다음과 같은 사용자 정의 보간 정보를 받게 됩니다.

{curve l x1 1 s0 x30 10 s0 x50 5 s-56.957 x60 0 s-14.341 5 s56.957 5 s-77.891 5 s0}

사용자 정의 생성된 모든 접선이 애니메이션 곡선에 성공적으로 추가되었으며 상수 노드의 'color.r' 노브에 표시되어야 합니다.

curve.changeInterpolation(keys, nuke .USER_SET_SLOPE) 주석 처리하고 동일한 인쇄 문을 추가하여 예제 스크립트를 실행하는 경우:

#curve.changeInterpolation(keys, nuke .USER_SET_SLOPE)
print(curve.toScript())

곡선은 기본 데이터를 다음과 같이 표시합니다.

{curve x1 1 x30 10 x50 5 x60 0 5 5 5}

참고: 새로 생성된 애니메이션 곡선의 키를 조작하면 Nuke Python API 참조 가이드의 AnimationKey 섹션에 설명된 대로 곡선 보간이 기본 상태로 재설정됩니다.

우리는 문제로 불편을 끼쳐 드려 죄송합니다

이유를 알려주세요