본문 바로가기
Nuke/Blink Script

Blink Scripting 101 - Blink 노드의 구성

by 르면가게 2024. 12. 11.

https://www.guillemramisadesoto.com/blink-101

 

Blink 101 — Guillem Ramisa de Soto

Now, lets see the second method. To me, this is more interesting and it introduces us to a new concept called ‘Length‘. The length of a vector is a value that can be stored as a float per pixel, that represents a correlation between values, for example

www.guillemramisadesoto.com

DISCLAIMER

이 페이지는 Nuke에서 Blink 스크립트의 기초를 이해하고자 하는 분들을 위한 것입니다. 제가 이 분야의 전문가는 아니지만, 지식을 체계적으로 정리하는 것이 많은 도움이 된다는 것을 깨달았습니다.
"무언가를 마스터하고 싶다면, 가르쳐라." 라는 말처럼요.


Blink Script란 무엇인가?

Blink 스크립트는 Nuke 내에서 데이터를 수정하고 처리하여 결과를 생성할 수 있도록 C++ 스타일로 코드를 작성하는 프레임워크입니다.

The Foundry의 Nuke 웹사이트에서 Blink Script에 대한 정보를 찾을 수 있지만, 먼저 개발자를 위한 전용 페이지를 읽어보는 것을 권장합니다.

이 페이지는 Nukepedia의 Matt Estela와 Pedro Andrade의 훌륭한 페이지에서 영감을 받았습니다.


Blink 노드의 구성

Nuke의 Blink 노드는 크게 세 가지 주요 영역으로 나뉩니다:

  1. Node
    DAG(Directed Acyclic Graph)에서 작업할 수 있는 Nuke 노드입니다.
  2. Kernel
    메인 코드가 작성되고 컴파일되는 영역입니다. 작성된 코드는 텍스트 파일로 저장하거나 불러올 수 있습니다.
  3. Parameters
    코드의 동작을 변경할 수 있는 공개된 파라미터가 표시됩니다. CPU 및 GPU 옵션을 설정하거나 노드를 퍼블리시하고 커널을 보호할 수도 있습니다.

Kernel 기본 코드 분석

Blink Script의 가장 간단한 예제를 통해 코드 구조를 살펴보겠습니다. Blink Script는 최대 7개의 주요 영역으로 구성될 수 있지만, 모든 영역이 필수는 아니며 작업에 따라 생략할 수도 있습니다. 일관성을 위해 모든 영역을 포함한 예제를 작성하겠습니다.

예제 코드

 
ernel SimpleKernel : ImageComputationKernel<ePixelWise>
{
  Image<eRead, eAccessPoint> src;
  Image<eWrite> dst;
  
  param:
  
  local: 
  
  void define() {
  }
  
  void init() {
  }
  
  void process() {
    dst() = src();
  }
};​

 


코드 분석

Kernel 선언첫 번째 줄에서 Kernel을 선언합니다. SimpleKernel은 커널의 이름이며, ePixelWise는 데이터를 처리하는 방식을 정의합니다. 데이터 접근 방식에 대한 자세한 내용은 링크를 참고하세요.

kernel SimpleKernel : ImageComputationKernel<ePixelWise>

 

입력 및 출력 선언

  • eRead: 입력 데이터(src)를 선언합니다.
  • eWrite: 출력 데이터(dst)를 선언합니다.
  • eAccessPoint: 현재 픽셀의 위치를 하나씩 처리하도록 설정합니다.
Image<eRead, eAccessPoint> src;
Image<eWrite> dst;

 

param공개 파라미터를 선언합니다. 이 파라미터는 사용자 인터페이스에서 조정할 수 있습니다.

param:

 

local내부적으로 사용되는 비공개 변수를 선언합니다.

local:
define 메서드이전에 선언한 파라미터의 이름과 기본값을 정의하는 공간입니다.
void define() {
}

 

init 메서드초기 처리를 수행하는 공간입니다. 이미지를 처리할 때마다 한 번만 호출됩니다.

void init() {
}
 
process 메서드메인 코드를 작성하는 공간입니다.
void process() {
  dst() = src();
}
  • 위 코드에서는 출력(dst)이 입력(src)과 동일하도록 설정합니다.
  • 이 코드는 아무 작업도 하지 않는 코드입니다.

 

'Nuke > Blink Script' 카테고리의 다른 글

Blink Scripting 101 - Combining Input Image and Custom Color  (0) 2024.12.11
Blink Scripting 101 - Custom_Color  (0) 2024.12.11
blink kernels (5) - Blink Reference Guide  (0) 2024.12.08
blink kernels (4)  (0) 2024.12.08
blink kernels (3)  (0) 2024.12.08