CompStart

Pro레슨코스엘리먼트소프트웨어

CompStart

최첨단 시각효과 기술을 마스터하세요.

학습

코스레슨Pro 기능에셋소프트웨어

Tools

Tech CheckDisplay CheckMotion BlurPhysLightNuke Tools

회사

Instructor미션사이트맵개인정보처리방침이용약관

프로젝트

Moray RenderEXR ConverterOCIO.ccNuke ToolsDerekVFX

Follow

YouTubeInstagramTikTokThreads문의

© 2026 CompStart. All rights reserved.

엣지 압출

ToolSets / Filter
Filter

2026-09-07

ToolSets/filter/edgeExtrude.nk

필터
가장자리
마스크
흐림
무광
공익사업
통나무
GitHub에서 보기

마스크된 에지 색상을 크기에 따라 바깥쪽으로 확산시키는 다중 스케일 에지 돌출 기능으로, 선택적으로 마스크 침식, 반전 및 로그 공간 처리를 수행할 수 있습니다.

에지 익스트루드는 마스크된 경계에서 바깥쪽으로 색상을 확장하기 위해 단계별 크기의 박스 블러를 여러 개 적용한 다음, 이러한 레이어를 소스 아래에 병합하여 가장자리 픽셀이 주변 영역으로 확장되도록 합니다.

메인 입력에 이미지를, 마스크 입력에 매트를 입력합니다. 마스크 채널을 선택하고, 필요에 따라 마스크를 침식하거나 반전시키고, 가장자리가 이동하는 범위를 설정합니다. 화질은 마스터 블러를 따릅니다. 로그를 활성화하면 스택을 시네온 공간에서 실행하고 출력 시 다시 변환할 수 있습니다.

잘라낸 부분이나 로토스코핑 가장자리의 플레이트 색상이 알파 영역을 넘어 계속 이어져야 할 때, 즉 타이트한 크롭, 키 주변 정리 또는 부드러운 테두리 채우기에 사용하세요. 마스크되지 않은 영역 내부에 새로운 디테일을 만들 필요가 없습니다.

Script code

set cut_paste_input [stack 0]
version 9.0 v7
push 0
push $cut_paste_input
Group {
 inputs 2
 name edgeExtrude
 tile_color 0x421010ff
 selected true
 xpos 480
 ypos 114
 addUserKnob {20 User l edgeExtrude}
 addUserKnob {41 from0 l "mask channel" T Copy1.from0}
 addUserKnob {7 erodeMask l "erode mask" R 0 100}
 erodeMask 10
 addUserKnob {6 invertMask -STARTLINE}
 addUserKnob {41 size T master.size}
 addUserKnob {52 group T "import nuke\nknobChanged \"\\n\\ng = nuke.thisNode()\\nk = nuke.thisKnob()\\n\\nif k.name() in \\\[\\\"frames\\\",\\\"method\\\"]:\\n    \\n    i = nuke.toNode(\\\"img\\\")\\n    i2 = nuke.toNode(\\\"mask\\\")\\n    o = nuke.toNode(\\\"Output1\\\")\\n    c = nuke.toNode(\\\"Copy1\\\")\\n\\n    if k.name() == \\\"frames\\\":\\n    \\n        defaultNodes = \\\[i,i2,o,c]\\n        for n in nuke.allNodes():\\n           if n not in defaultNodes:\\n               nuke.delete(n)\\n        \\n        fvalue = g\\\['frames'].value()\\n        step = 1\\n        if fvalue < 0:\\n           step = -1\\n          \\n        for f in range(0,int(fvalue)+step,step):\\n           t = nuke.nodes.TimeOffset()\\n           t\\\['time_offset'].setValue(-f)\\n           t.setInput(0,i)\\n        \\n           if f == 0 :\\n               lastnode = t\\n        \\n           else :\\n               slice = nuke.nodes.Grade()\\n               slice\\\['channels'].setValue(\\\"alpha\\\")\\n               slice\\\['blackpoint'].setValue((1/(fvalue+1))*abs(f))\\n               slice\\\['whitepoint'].setValue((1/(fvalue+1))*(abs(f)+1))\\n               slice.setInput(0,c)\\n               exp = nuke.nodes.Expression()\\n               if g\\\['method'].value() == \\\"average\\\":\\n                   exp\\\['expr3'].setValue('a>1?1:a')\\n               else:\\n                   exp\\\['expr3'].setValue('a>0?1:0')\\n               exp.setInput(0,slice)\\n               km = nuke.nodes.Keymix()\\n               km.setInput(1,t)\\n               km.setInput(0,lastnode)\\n               km.setInput(2,exp)\\n               lastnode = km\\n        \\n        sw = nuke.nodes.Switch()\\n        sw.setInput(0,i)\\n        sw.setInput(1,lastnode)\\n        sw\\\['which'].setExpression('parent.maskChannel!=0')\\n        o.setInput(0,sw)\\n            \\n        for n in nuke.allNodes():\\n           nuke.autoplace(n)\\n\\n    elif k.name() == \\\"method\\\":\\n\\n        for e in nuke.allNodes('Expression'):\\n               if g\\\['method'].value() == \\\"average\\\":\\n                   e\\\['expr3'].setValue('a>1?1:a')\\n               else:\\n                   e\\\['expr3'].setValue('a>0?1:0')\\n\\n\"" +STARTLINE}
 addUserKnob {41 quality -STARTLINE T master.quality}
 addUserKnob {6 log -STARTLINE}
 log true
 addUserKnob {26 ""}
 addUserKnob {26 lbl l "" +STARTLINE T "Edge Extrude v1.2"}
 addUserKnob {22 btn l DerekVFX.ca T "nuke.tcl('start', 'https://derekvfx.ca')" +STARTLINE}
}
 Input {
  inputs 0
  name mask
  xpos -137
  ypos -799
  number 1
 }
set Na4475400 [stack 0]
push $Na4475400
 Copy {
  inputs 2
  from0 rgba.alpha
  to0 rgba.alpha
  name Copy1
  xpos -137
  ypos -751
  disable {{"\[exists parent.input1] == 0"}}
 }
set N492aa800 [stack 0]
push $N492aa800
 Dot {
  name Dot2
  xpos -208
  ypos -741
 }
 Invert {
  channels alpha
  name Invert1
  xpos -242
  ypos -696
 }
 Dot {
  name Dot4
  xpos -208
  ypos -623
 }
 Switch {
  inputs 2
  which {{invertMask}}
  name Switch1
  xpos -137
  ypos -627
 }
 Dilate {
  channels alpha
  size {{abs(erodeMask)*-1+-1}}
  name Dilate1
  xpos -137
  ypos -575
 }
 Input {
  inputs 0
  name Input
  xpos 27
  ypos -729
 }
 Colorspace {
  colorspace_out Cineon
  name Colorspace1
  xpos 27
  ypos -626
  disable {{"parent.log != 1"}}
 }
 Merge2 {
  inputs 2
  operation mask
  bbox B
  name Merge1
  xpos 27
  ypos -501
 }
 Dot {
  name Dot3
  xpos 61
  ypos -428
 }
set Nc32cdc00 [stack 0]
 Dot {
  name Dot1
  xpos 370
  ypos -428
 }
 Blur {
  channels rgba
  size {{parent.master.size/32}}
  filter box
  quality {{parent.master.quality}}
  name Blur5
  label "\[value size] px"
  xpos 336
  ypos -380
 }
set Nb0597800 [stack 0]
 Unpremult {
  name Unpremult5
  xpos 336
  ypos -342
 }
 Expression {
  expr3 "a != 0"
  name Expression1
  xpos 336
  ypos -316
 }
 Blur {
  channels rgba
  size {{parent.master.size/16}}
  filter box
  quality {{parent.master.quality}}
  name Blur13
  label "\[value size] px"
  xpos 343
  ypos -293
 }
set Nb0596000 [stack 0]
 Unpremult {
  name Unpremult13
  xpos 336
  ypos -255
 }
 Expression {
  expr3 "a != 0"
  name Expression13
  xpos 336
  ypos -229
 }
 Blur {
  channels rgba
  size {{parent.master.size/8}}
  filter box
  quality {{parent.master.quality}}
  name Blur15
  label "\[value size] px"
  xpos 336
  ypos -203
 }
set Nc1a1f400 [stack 0]
 Unpremult {
  name Unpremult15
  xpos 336
  ypos -165
 }
 Expression {
  expr3 "a != 0"
  name Expression15
  xpos 336
  ypos -139
 }
 Blur {
  channels rgba
  size {{parent.master.size/4}}
  quality {{parent.master.quality}}
  name Blur16
  label "\[value size] px"
  xpos 336
  ypos -113
 }
set Nc1a1f000 [stack 0]
 Unpremult {
  name Unpremult16
  xpos 336
  ypos -75
 }
 Expression {
  expr3 "a != 0"
  name Expression16
  xpos 336
  ypos -49
 }
 Blur {
  channels rgba
  size {{parent.master.size/2}}
  quality {{parent.master.quality}}
  name Blur17
  label "\[value size] px"
  xpos 336
  ypos -19
 }
set Na4475000 [stack 0]
 Unpremult {
  name Unpremult17
  xpos 336
  ypos 19
 }
 Expression {
  expr3 "a != 0"
  name Expression17
  xpos 336
  ypos 45
 }
 Blur {
  channels rgba
  size {{parent.master.size}}
  quality {{parent.master.quality}}
  name Blur18
  label "\[value size] px"
  xpos 336
  ypos 71
 }
set Na4475c00 [stack 0]
 Unpremult {
  name Unpremult18
  xpos 336
  ypos 116
 }
 Expression {
  expr3 "a != 0"
  name Expression18
  xpos 336
  ypos 131
 }
 Blur {
  channels rgba
  size {{parent.master.size*2}}
  quality {{parent.master.quality}}
  name Blur19
  label "\[value size] px"
  xpos 336
  ypos 157
 }
 Unpremult {
  name Unpremult6
  xpos 336
  ypos 195
 }
 Expression {
  expr3 "a != 0"
  name Expression6
  xpos 336
  ypos 221
 }
push $Na4475c00
push $Na4475000
push $Nc1a1f000
push $Nc1a1f400
push $Nb0596000
push 0
push $Nb0597800
push $Nc32cdc00
 Merge2 {
  inputs 8+1
  operation under
  bbox B
  invert_mask true
  name Merge4
  xpos 27
  ypos 221
 }
 Colorspace {
  colorspace_in Cineon
  name Colorspace2
  xpos 27
  ypos 293
  disable {{"parent.log != 1"}}
 }
 Output {
  name Output1
  xpos 27
  ypos 356
 }
push $Nc32cdc00
 Blur {
  channels rgba
  size 20
  name master
  label "\[value size] px"
  xpos 154
  ypos -384
  hide_input true
 }
push $Nb0597800
 Viewer {
  frame_range 100-100
  colour_sample_bbox {-0.15625 0.2568359375 -0.1552734375 0.2578125}
  name Viewer1
  xpos 1872
  ypos 1458
 }
end_group