요약
Nuke 스크립트에서 애니메이션 키를 설정할 때(예: Transform 노드나 Roto 마스크의 위치 키 설정), Python을 통해 애니메이션 곡선을 정의하면 유연성이 크게 향상됩니다. 사용자는 애니메이션 키 생성 및 위치 지정을 자동화하고, 필요에 따라 기울기를 조정하고, 파이프라인 내에서 사용되는 다양한 도구 간에 곡선 데이터를 공유할 수 있습니다.
이 문서에서는 테스트 가능한 예제 스크립트를 포함하여 Python을 사용하여 애니메이션 키를 만들고 곡선 경사를 업데이트하는 방법을 설명합니다.
더 많은 정보
Nuke 내에서 애니메이션 키가 설정되면( 매개변수 애니메이션 ), 키프레임은 곡선 편집기 내에서 곡선으로 표시됩니다.
아래 스크린샷에서는 ColorCorrect 노드의 대비 노브에 대해 다양한 프레임에 설정된 애니메이션 키에서 생성된 곡선을 볼 수 있습니다.

- 주요 값은 사용자가 대비 노브에 새로운 값을 추가한 위치입니다.
- 곡선 편집기는 XY 그래프를 사용하는데, 여기서 X는 프레임 범위를 나타내고 Y는 대비 노브 값을 나타냅니다.
- 사용자가 선택한 키프레임은 프레임 351이며 값은 1.16입니다.
- 선택한 키프레임에는 기울기를 정의하는 접선도 표시됩니다. 기울기를 조정하면 키프레임 사이의 곡선 모양이 더 부드럽거나 일정하게 조정됩니다.
- 선택된 곡선 은 부드러운 보간을 사용하고 있습니다.
- 표현식 필드 에 표현식이 곡선 으로 표시됩니다. 즉, 곡선 편집기 내에서 곡선에 의해 애니메이션이 제어된다는 의미입니다.
파이썬을 사용하여 키프레임 설정하기
Python 스크립트를 통해 키프레임 애니메이션을 만들 때 각 키에 대해 설정해야 할 속성이 여러 개 있습니다.
여기에는 다음이 포함됩니다.
- x - 지점의 수평 위치(프레임 값)
- y - 점의 수직 위치(노브 값)
- 보간 - 첫 번째 키의 왼쪽 기울기와 마지막 키의 오른쪽 기울기를 제외한 모든 기울기를 계산하는 데 사용됩니다.
- 외삽법 - 가장 왼쪽과 가장 오른쪽의 경사를 계산합니다.
사용자 정의 보간을 설정하려면 다음 속성을 설정하여 생성된 각 키의 탄젠트를 개별적으로 편집할 수 있습니다.
- lslope - 점의 왼쪽에 대한 미분
- r 기울기 - 점의 오른쪽에 대한 미분
- la - 왼쪽 '바이큐빅' 값
- r a - 올바른 '바이큐빅' 값
다음은 키프레임의 접선을 표시하고 lslope와 rslope를 강조한 스크린샷입니다.
Python AnimationKey 클래스와 보간 및 외삽 속성에 사용할 수 있는 옵션에 대해 자세히 알아보려면 Nuke Python API 참조 가이드의 AnimationKey 섹션을 확인하세요.
예제 스크립트
키프레임 애니메이션 곡선을 자동으로 생성하는 방법을 보여주는 Python 스크립트 예제를 첨부했습니다. Nuke 스크립트 편집기에서 이 스크립트를 실행하면 애니메이션 색상 노브가 있는 상수 노드가 생성됩니다.
스크립트를 검토하려면 첨부 파일( CurveTest.py )을 다운로드하여 Nuke 의 스크립트 편집기나 텍스트 편집 소프트웨어(PyCharm, Sublime Text, Notepad++ 등)에서 열어 주세요.
NUKE 에서 스크립트 사용하기
Nuke 내에서는 CurveTest.py 파일을 가져오거나 해당 파일의 내용을 스크립트 편집기에 복사/붙여넣기한 다음 실행하여 스크립트를 테스트할 수 있습니다.
스크립트가 실행되면 색상 노브에 애니메이션 키가 있는 상수 노드가 생성됩니다.
노드를 선택하고 곡선 편집기에서 보면 애니메이션 키를 검사하고 생성된 곡선을 볼 수 있습니다.
아래는 Curve Editor 탭에서 검사할 수 있는 스크립트 출력입니다.
키를 수동으로 조작할 수 있습니다. 하나의 키를 선택하면 해당 키의 접선이 표시되며, 이를 통해 추가로 조작할 수 있습니다.
고급 팁과 프로세스를 포함한 곡선 편집에 대한 자세한 내용은 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}}
새로운 애니메이션 키프레임이 사전 개체에 추가되고, 사전은 각 키를 애니메이션 곡선에 추가하는 과정을 반복합니다.
함수 사용
곡선을 효율적이고 다른 스크립트에서 재사용 가능하게 만들기 위해 모든 함수는 def(함수) 에 저장됩니다. 모든 정의가 의존하는 것은 사전 객체에서 제공하는 'curve_data'이므로, 이 함수는 다른 Python 스크립트에 쉽게 통합될 수 있습니다.
def create_curve(curve_data):
노드 및 노브 설정
스크립트의 예제에서는 Constant 노드를 생성하고 곡선 애니메이션 데이터를 해당 색상 노브에 저장합니다. 이 설정을 다른 노드와 노브에 적용하려면 아래 줄에서 해당 노드와 노브의 이름을 바꾸면 됩니다.
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}
사용자 정의 탄젠트가 모두 애니메이션 곡선에 성공적으로 추가되었으며, 상수 노드의 색상 노브에 나타나야 합니다.
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 섹션에 설명되어 있습니다.
우리는 문제로 불편을 끼쳐 드려 죄송합니다
이유를 알려주세요