NUKE Python 콜백 (Callbacks) 정리 및 번역
NUKE에서는 nuke.add…() 함수들을 사용하여 특정 이벤트(예: 노드 생성, 스크립트 로드 시)에 자동으로 Python 함수를 실행할 수 있습니다.
이러한 nuke.add…() 함수들은 init.py 또는 menu.py 파일에서 사용할 수 있으며, 이를 통해 NUKE 환경 내에서 항상 적용되도록 설정할 수 있습니다.
1. 기본 구조
모든 nuke.add…() 함수의 기본 구조는 다음과 같습니다.
nuke.addOnCreate(callable, args=(), kwargs={}, nodeClass='*')
각 매개변수의 역할
- callable : 실행할 Python 함수 또는 함수명
- args : 함수에 전달할 인수 리스트 (괄호 안에 포함)
nuke.addOnCreate(nuke.tprint, ('출력할 메시지'))
- kwargs : 키워드+값 형태의 추가 인수 리스트
nuke.addOnCreate(nuke.tprint, ('a', 'b'), {'sep': ','})
- nodeClass : 특정 노드 클래스에서만 실행할 경우 지정 (기본값은 '*'로 모든 노드에서 실행)
nuke.addOnCreate(nuke.tprint, ('Write 노드 생성'), nodeClass='Write')
2. 콜백 실행 시점
콜백이 실행될 때, 해당 노드가 "컨텍스트 노드"가 됨.
- nuke.thisNode() : 현재 영향을 받는 노드를 가져옴.
- nuke.thisKnob() : knobChanged 콜백에서 현재 영향을 받는 노브를 가져옴.
3. NUKE의 콜백 종류
콜백 함수는 크게 두 가지 유형으로 나뉩니다.
1) 노드 속성 패널(Python 탭)에서 설정 가능한 콜백 (아티스트가 편집 가능)
이들은 NUKE UI에서 직접 설정할 수 있으며, 일반적인 이벤트에 대한 대응을 위해 사용됩니다.
콜백 | 함수설명 |
onScriptLoad | 스크립트 로드 시 실행 |
onScriptSave | 스크립트 저장 시 실행 |
onScriptClose | 스크립트 종료 시 실행 |
beforeRender | 렌더 시작 전에 실행 |
beforeFrameRender | 각 프레임 렌더 전에 실행 |
afterRender | 렌더 완료 후 실행 |
afterFrameRender | 각 프레임 렌더 후 실행 |
2) 숨겨진(Visible UI에 표시되지 않는) 콜백 (Gizmo 등에 활용)
이들은 Python 코드에서만 설정 가능하며, 주로 Gizmo의 동작을 제어하는 데 사용됩니다.
콜백 | 함수설명 |
onCreate | 노드가 생성될 때 실행 |
onDestroy | 노드가 삭제될 때 실행 |
knobChanged | 노드의 특정 Knob 값이 변경될 때 실행 |
updateUI | UI 업데이트 시 실행 |
autolabel | 노드의 레이블을 자동 변경할 때 실행 |
📌 Gizmo 개발 시 유용:
- Gizmo 내부에 기본 동작을 설정할 때 onCreate, knobChanged 등을 사용 가능.
- 아티스트가 직접 수정해서는 안 됨 (사용자가 설정을 변경하면 Gizmo 기본 설정이 덮어씌워짐).
4. 콜백 실행 순서
콜백이 여러 개 등록된 경우, 실행 순서는 다음과 같습니다.
- Knob에 설정된 콜백이 가장 먼저 실행됨.
- nuke.add…()로 추가된 콜백이 실행됨.
- nodeClass가 지정된 콜백부터 실행됨.
- 그다음 '*'(모든 노드에 적용되는) 콜백이 실행됨.
- 콜백은 등록된 순서대로 실행됨.
- 단, addAutolabel() 및 addFilenameFilter()는 역순으로 실행됨.
5. 콜백 제거
모든 add…() 콜백 함수에는 해당 콜백을 제거하는 remove 함수가 존재합니다.
callback_id = nuke.addOnCreate(my_function) nuke.removeOnCreate(callback_id)
콜백을 제거할 때는, add…() 함수가 반환하는 ID를 사용해야 합니다.
📌 예제 1: Write 노드가 생성될 때 메시지 출력
def on_write_create():
print("새로운 Write 노드가 생성되었습니다!")
nuke.addOnCreate(on_write_create, nodeClass="Write")
📌 예제 2: 노드의 특정 Knob 값이 변경될 때 자동 실행
def knob_changed():
node = nuke.thisNode()
knob = nuke.thisKnob()
print(f"{node.name()}의 {knob.name()} 값이 변경됨!")
nuke.addKnobChanged(knob_changed, nodeClass="Blur")
📌 예제 3: 렌더 시작 전에 로그 남기기
def before_render():
print("렌더 시작 전: 스크립트 준비 중...")
nuke.addBeforeRender(before_render)
6. 요약
- nuke.add…() 함수로 특정 이벤트 발생 시 Python 코드 실행 가능.
- init.py 또는 menu.py에 설정하면 NUKE 환경 내에서 지속적으로 적용됨.
- onCreate, knobChanged 같은 숨겨진 콜백은 Gizmo 개발 시 유용.
- 콜백 실행 순서는 Knob → 특정 노드용 콜백 → 전체 노드용 콜백 순서.
- 콜백을 추가한 후에는 remove…() 함수로 제거 가능.
'Nuke > 개발' 카테고리의 다른 글
확장자 - EXR: 무손실 압축 (0) | 2025.02.27 |
---|---|
폰트 (0) | 2025.02.26 |
Command Line Operations (0) | 2025.02.19 |
HTML in Nuke (0) | 2024.12.17 |
nuke의 다양한 개발방식?들 (0) | 2024.12.07 |