Clipping - kuimoani/defold GitHub Wiki
Clipping
ํ ์ค์ณ๋ ํ ์คํธ๋ฅผ ์ฌ์ฉํ GUI ๋ ธ๋๋ ๊ทธ๋ํฝ์ GUI์ ์ถ๊ฐํ์ง๋ง ๋๋ก๋ ํ๋ฉด์ ๊ทธ๋ํฝ ์ผ๋ถ๋ถ์ ์ ๊ฑฐํ๊ฑฐ๋ ํน์ ๋ถ๋ถ์ ๋ณด์ฌ์ฃผ๋ ๋ง์คํฌ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด ๋ฉ๋ด์ผ์ ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๊ฒ์์์ ํ๋ ์ด์ด๊ฐ ์์ ์ ๋ฐฉํฅ์ ์ก๊ธฐ ์ํ ๋ฏธ๋๋งต์ด ์๋ HUD ์์๋ฅผ ํ๋ฉด์ ์์ฑํด์ผ ํ๋ค๊ณ ์นฉ์๋ค.

ํด๋ฆฌํ(clipping)๊ณผ ํจ๊ป ํ์ด ๋ ธ๋(pie node)๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฏธ๋๋งต์ ๋งค์ฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.

- pie ๋ ธ๋ ์ถ๊ฐ. ๋งต์ ์ํ "์ด์ ๊ตฌ๋ฉ" ์ญํ ์ ํ๊ฒ๋จ
- box ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ๋งต ํ ์ค์ณ๋ฅผ ๋ฐ์ํจ
- box ๋ ธ๋๋ฅผ pie๋ ธ๋์ ์์๋ ธ๋๋ก ์ง์ ํจ
- pie ๋ ธ๋์ Clipping ํ๋กํผํฐ๋ฅผ "Stencil"๋ก ์ค์ ํจ

์ด์ ๋ถ๋ชจ ๋ ธ๋๋ ์์ ๋ ธ๋์ ๋ํ "์ด์ ๊ตฌ๋ฉ" ์ญํ ์ ํ๊ฒ ๋์ด ๋ถ๋ชจ ํด๋ฆฌํ ๋ ธ๋์ ์ํด ๋ฐ์ธ๋ฉ ๋ ๊ทธ๋ํฝ๋ง ํ์๋๋ฏ๋ก ๋ถ๋ชจ ๋ ธ๋๋ ๋งต์ ๊ทธ๋ํฝ ์ธ๋ถ ์์ญ์ ์ ์ํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋งต ๋ ธ๋๋ฅผ ์์ ๋กญ๊ฒ ์์ง์ฌ๋ ๋ถ๋ชจ ์์ญ ๋ด์ ์๋ ๋ถ๋ถ์ด ํ์๋๊ฒ ๋ฉ๋๋ค.
ํด๋ฆฌํ์ box๋ ธ๋์ pie ๋ ธ๋์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ Text ๋ ธ๋๋ ๋ค๋ฅธ ๋ ธ๋์ ํด๋ฆฌํ ํ ์ ์์ต๋๋ค. ํด๋ฆฌํ์๋ ๋ ๊ฐ์ง ํ์ ์ด ์๋๋ฐ ํด๋ฆฌํผ์ ๋ชจ์์ ๊ทธ๋ฆฌ๋ Visible clipper์ ํด๋ฆฌํ ๋ง์คํฌ์ ๋ฏธ์น๋ ์ํฅ์ ๋ฐ์ ์ํค๋ Inverted clipper๊ฐ ์์ต๋๋ค. (์์ธํ ๋ด์ฉ์ ์๋ ์ฐธ๊ณ )

Stencil ํด๋ฆฌํ์ box ๋ ธ๋์ pie ๋ ธ๋์ ๋ฐ์ํ ์ ์๋๋ฐ, Stencil์๋ ๋ช ๊ฐ์ง ์ ํ์ฌํญ์ด ์์ต๋๋ค.
- stencil clippers์ ์ด ์๋ 256๊ฐ๋ฅผ ์ด๊ณผํ ์ ์์
- stencil ์์ ๋ ธ๋์ ์ต๋ ์ค์ฒฉ ๊น์ด(nesting depth)๋ 8๋จ๊ณ์(stencil ํด๋ฆฌํ ์นด์ดํธ๋ฅผ ์ฌ์ฉํ ๋ ธ๋๋ง)
- stencil ํ์ ๋ ธ๋์ ์ต๋ ์๋ 127๊ฐ์. stencil ๊ณ์ธต๊ตฌ์กฐ ์๋์ ๊ฐ ๋ ๋ฒจ์ ์ต๋ ์ ํ์ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฌ
- Inverted ๋ ธ๋๋ ๋น์ฉ์ด ๋ง์ด ๋ฌ. 8๊ฐ์ inverted clipping ๋ ธ๋๊ฐ ํ๊ณ์ด๊ณ non-inverted clipping ๋ ธ๋์ ์ต๋์น์ ์ ๋ฐ์ด ๋จ
- Stencils์ ํ ์ค์ณ๊ฐ ์๋ ๋ ธ๋์ ์ง์ค๋ฉํธ๋ฆฌ๋ก๋ถํฐ stencil ๋ง์คํฌ๋ฅผ ๋ ๋๋งํจ. Inverted clipper ํ๋กํผํฐ๋ฅผ ์ค์ ํด์ ๋ง์คํฌ๋ฅผ ๋ฐ์ ์ํฌ ์ ์์
Stencil mask
์คํ ์ค ํด๋ฆฌํ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๊ธฐ ์ํด, ์คํ ์ค์ ๊ณ์ธต์ด ์ด๋ป๊ฒ ๊ฐ๋ณ ํด๋ฆฌํ์ ๋ชจ์์ ๊ทธ ๊ณ์ธต๊ตฌ์กฐ ํ์์ ์ ์ฒด ๋ง์คํฌ๋ก ๋ฐ์ํ๋์ง ์์ํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. ํด๋ฆฌํ ๋ ธ๋์ ๋ง์คํฌ ์ธํธ๋ ํด๋น ๋ ธ๋์ ์์๋ค๋ก ์์๋๋ฉฐ ์์ ๋ ธ๋๋ค์ ์ ๋ ๋ง์คํฌ๋ฅผ ํ์ฅํ์ง ์๊ณ ์ค์ง ํด๋ฆฌํ๋ง ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ธ ์์ ๋ฅผ ์ดํด ๋ด ์๋ค.

hexagon ๊ณผ square ๋ชจํ ๋ ๋ค ์คํ ์ค ํด๋ฆฌํผ๋ฅผ ์ค์ ํฉ๋๋ค. Inverted clipper ํ๋กํผํฐ๋ฅผ ์ค์ ํ๋ฉด ํด๋น ๋ ธ๋๋ก ์์๋ ๋ง์คํฌ๋ฅผ ๋ฐ์ ์ํต๋๋ค. ์์ ๊ณ์ธต๊ตฌ์กฐ์์ normal clippers์ inverted clippers๋ฅผ ์ฌ์ฉํ์ฌ 4๊ฐ์ง์ ์กฐํฉ์ด ๊ฐ๋ฅํฉ๋๋ค.

๋ง์ฝ ์ธ๋ฒํธ๋ ๋ ธ๋ ์๋์ ๋ Inverted clipper๋ก ์ค์ ๋ ๋ ธ๋๊ฐ ์๋ค๋ฉด, ์์ ๋ ธ๋์ ์ํด ๋ง์คํฌ๋ ์์ญ์ด ์ธ๋ฒํธ๋ฉ๋๋ค. inverted clippers ๋ ธ๋๋ฅผ ๊ฐ๊ฐ ์์๋ ธ๋๋ก ์ฎ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ ธ๋์ ์ฌ๋ฌ๊ฐ์ ๊ตฌ๋ฉ์ ๋ผ ์๋ ์์ต๋๋ค.

Layers
๋ ์ด์ด๋ ๋ ธ๋์ ๋ ๋๋ง ์์(์ผ๊ด ์ฒ๋ฆฌ(batch))๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ๋ ์ด์ด์ ํด๋ฆฌํ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ฐ์ ์ธ ๋ ์ด์ด ์์๊ฐ ๋ฌด์(override) ๋ฉ๋๋ค. ํด๋ฆฌํ ์์๋ ๋ ์ด์ด ์์๋ณด๋ค ์ฐ์ ํ๊ฒ ๋๋๋ฐ, ์ฆ ๋ ธ๋๊ฐ ์ํ ๋ ์ด์ด์ ๊ด๊ณ ์์ด, ๋ ธ๋ ๊ณ์ธต์ ๋ฐ๋ผ ํด๋ฆฌํ ๋ฉ๋๋ค. ๋ ์ด์ด๋ ์ค์ง ๊ทธ๋ํฝ์ ๊ทธ๋ฆฌ๊ธฐ ์์์๋ง ์ํฅ์ ๋ฏธ์น๋ฉฐ, ๋ ๋์๊ฐ์ ํด๋ฆฌํ ๋ ธ๋์ ์ค์ ๋ ๋ ์ด์ด๋ ํด๋น ํด๋ฆฌํผ ๊ณ์ธต์ ๊ทธ๋ฆฌ๊ธฐ ์์์๋ง ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์์ชฝ ๊ทธ๋ฆผ์ ํ ์ค์ณ(inner shadow texture)๊ฐ ์๋ "window_and_shadow" ๋ผ๋ ํด๋ฆฌํผ ๋ ธ๋๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ์ด ๋ ธ๋์ Visible clipper ํ๋กํผํฐ๋ฅผ ์ฒดํฌํ๊ณ "layer2"๋ก ์ค์ ํด์ "layer0"์ "map" ๋ ธ๋์ ํด๋ฆฌํ์ ์ฐ๊ฒฐํฉ๋๋ค. ์ด ํด๋ฆฌํผ ํ ์ค์ณ๋ "map" ์์๋ ธ๋์ ์์์ ๋ ๋๋ง๋ฉ๋๋ค. "map"์ ์ค์ ๋ ๋ ์ด์ด ํน์ "window_and_shadow" ์ค์ ๋ ๋ ์ด์ด๋ "blue_box" ("layer2") ์ "orange_box" ("layer1") ์ ๊ด๋ จ๋ ๋ ๋๋ง ์์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๋ง์ฝ "blue_box" ์ "orange_box" ์ ๊ด๋ จํด์ "window_and_shadow" ์ ๋ ๋๋ง ์์๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด, ๋ ธ๋ ํธ๋ฆฌ์ ์์๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
