본문 바로가기
Nuke/Blink Script

Blink Scripting 101 - Combining Input Image and Custom Color

by 르면가게 2024. 12. 11.

Combining Input Image and Custom Color


목표

이 섹션에서는 앞서 배운 내용을 결합하여 입력 이미지를 받아 이를 사용자가 정의한 색상 값과 곱해 새로운 출력을 생성하는 Blink 스크립트를 만들어 보겠습니다.


Custom_ColorMult 코드

kernel Custom_ColorMult : ImageComputationKernel<ePixelWise>
{
  Image<eRead, eAccessPoint, eEdgeClamped> src;                       // 입력 이미지, 가장자리를 클램핑
  Image<eWrite> dst;                                                  // 출력 이미지

  param:
    float4 color;                                                     // 색상 파라미터

  void define() {
    defineParam(color, "Custom color", float4(0.0f, 1.0f, 0.0f, 0.0f)); // 기본값: 녹색
  }

  void process() {
    dst() = src() * color;                                            // 입력값과 색상을 곱하여 출력
  }
};


코드 분석

입력 이미지 정의

  • src는 입력 이미지입니다.
  • eEdgeClamped를 사용하여 가장자리의 픽셀 값이 반복되도록 설정했습니다.
  • eEdgeNone를 사용하면 가장자리 픽셀 값이 비어 있게 됩니다.
Image<eRead, eAccessPoint, eEdgeClamped> src;

 

출력 이미지 정의

  • dst는 출력 이미지입니다.
Image<eWrite> dst;

 

색상 파라미터 설정

  • 기본값으로 녹색(float4(0.0f, 1.0f, 0.0f, 0.0f))을 정의했습니다.
defineParam(color, "Custom color", float4(0.0f, 1.0f, 0.0f, 0.0f));

 

프로세스 정의

  • 입력 이미지(src)와 사용자가 정의한 색상(color)을 곱한 결과를 출력 이미지(dst)로 설정했습니다.
  • 곱셈() 대신 덧셈(`+`), 뺄셈(), 나눗셈(/) 등 다양한 연산도 가능합니다.
dst() = src() * color;

결과

이 코드는 입력 이미지(예: 체커보드)를 녹색 값으로 곱하여 출력합니다.

체커보드 노드를 Blink 노드에 연결하면 녹색과 곱해진 결과를 확인할 수 있습니다.


Boolean 기반 Switch 노드

목표

입력 이미지와 사용자 정의 색상 중 하나를 선택적으로 출력하는 Switch 노드를 생성하겠습니다.

Boolean 값(True/False)에 따라 조건부로 두 가지 값을 출력합니다.


Switch_Node 코드

kernel Switch_Node : ImageComputationKernel<ePixelWise>
{
  Image<eRead, eAccessPoint, eEdgeClamped> src;                       // 입력 이미지
  Image<eWrite> dst;                                                  // 출력 이미지

  param:
    float4 color;                                                     // 색상 파라미터
    bool switch_input;                                                // 스위치 파라미터 (True/False)

  void define() {
    defineParam(color, "Custom color", float4(1.0f, 0.0f, 0.0f, 0.0f)); // 기본값: 빨간색
    defineParam(switch_input, "Use Input?", true);                     // 기본값: True
  }

  void process() {
    dst() = switch_input ? src() : color;                             // 조건에 따라 입력 또는 색상 출력
  }
};


코드 분석

Boolean 스위치 정의

  • switch_input는 사용자 정의 Boolean 값으로, True일 경우 입력 이미지를 출력하고 False일 경우 색상을 출력합니다.
bool switch_input;

 

조건부 연산

  • 삼항 조건 연산자를 사용했습니다:
    • switch_input이 True일 경우 src()를 출력.
    • False일 경우 color를 출력.
dst() = switch_input ? src() : color;

결과

  • 스위치 활성화(True): 입력 이미지(src) 출력.
  • 스위치 비활성화(False): 사용자 정의 색상(color) 출력.

확장 가능성

이 스크립트를 기반으로, 더 복잡한 조건부 연산이나 추가적인 노브를 활용한 노드를 구현할 수 있습니다.

Blink 스크립트의 간단한 연산을 바탕으로 창의적인 노드를 제작해 보세요!