๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ํ•ฉ์„ฑ

Despill Algorithms

by z03y 2024. 11. 6.

๐Ÿ Despill ์ด๋ž€

Spill์€ Foreground(ํ”ผ์‚ฌ์ฒด)์˜ ์•ˆ์ชฝ์œผ๋กœ Key ์ปฌ๋Ÿฌ๊ฐ€ ๋ฌป์–ด๋‚˜๋Š” ํ˜„์ƒ์ด๋‹ค. ์กฐ๋ช…์ด๋‚˜ ํ”ผ์‚ฌ์ฒด์˜ ์žฌ์งˆ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

Spill Suppression, ์ผ๋ช… Despill์€ ์ด๋Ÿฐ Spill์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

 

์ด ๊ธ€์€ Despill ๊ธฐ๋ฒ•์— ๋Œ€ํ•œ ์กฐ์‚ฌ๋ฅผ ํ•˜๋ฉด์„œ ์•Œ๊ฒŒ ๋œ Despill ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•œ ์ •๋ฆฌ์ด๋‹ค.

 

 

๐Ÿ Despill Algorithm 1

Green ์ฑ„๋„์ด Red, Blue ์ฑ„๋„์˜ ํ‰๊ท ๋ณด๋‹ค ํฌ๋‹ค๋ฉด Red, Blue ์ฑ„๋„์˜ ํ‰๊ท ์„ ๋‚ธ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ Green์„ ์ œ๊ฑฐํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ์กด Green ์ฑ„๋„์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

์–ธ๋ฆฌ์–ผ ๋‚ด ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํฌ๋กœ๋งˆํ‚ค ํ•จ์ˆ˜์˜ Despill๋„ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™๋‹ค.

 

g>((r+b)/2)?((r+b)/2):g

 

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์–ธ๋ฆฌ์–ผ Node ํƒ€์ž…์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด..

 

'Digital Compositting for film and video' Chapter 5์—์„œ ์†Œ๊ฐœํ•˜๋Š” Despill Algorithms๋„ ์ด ๋ฐฉ๋ฒ•์ด๋‹ค.


์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ Tools : Primatte(Nuke), DespillTK(Advanced despill toolset by Timur Khodzhaev's)

 

 

๐Ÿ Despill Algorithm 2

YCgCo : YCbCr์— ๋น„ํ•ด ๋” ๊ฐ„๋‹จํ•˜๊ณ  ๋น ๋ฅธ ๊ณ„์‚ฐ, ์••์ถ• ์„ฑ๋Šฅ์ด ๋†’๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋ฉฐ ์ƒ‰์ƒ ๊ณ„์ธต ์‚ฌ์ด์˜ ์ƒ๊ด€์„ฑ๋„ ๋”์šฑ ๋‚ฎ๋‹ค. Y๋Š” ํœ˜๋„, Cg๋Š” ๋…น์ƒ‰ ์ƒ‰์ฐจ, Co๋Š” ์ฃผํ™ฉ์ƒ‰ ์ƒ‰์ฐจ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.


RGB๋ฅผ YCgCo ์ปฌ๋Ÿฌ์ŠคํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฑ„๋„ ๊ฐ’์„ ํ‰ํƒ„ํ™” ํ•œ๋‹ค. ํ‚ค ์ปฌ๋Ÿฌ์™€ ๋‚ด์ (dot product)์„ ํ†ตํ•ด YCgCo ๊ณต๊ฐ„์—์„œ ํ‚ค ์ปฌ๋Ÿฌ์˜ ํฌ๋กœ๋งˆ ๊ฐ’(yz)์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ตฌํ•œ๋‹ค. ๊ตฌํ•œ ๊ฐ’์„ ํ‚ค ์ปฌ๋Ÿฌ์™€ ํ‚ค ์ปฌ๋Ÿฌ ์ž์‹ ์˜ ๋‚ด์  ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ •๊ทœํ™” ํ•˜๊ณ  ์ด ์ •๊ทœํ™” ๋œ ๊ฐ’(sub)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ‚ค ์ปฌ๋Ÿฌ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ‰์ƒ์„ ์ด๋™ ์‹œํ‚จ๋‹ค.

 

์ฆ‰, ํ‚ค ์ปฌ๋Ÿฌ์˜ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ƒ‰์ƒ์„ ์ด๋™์‹œ์ผœ ํ‚ค ์ปฌ๋Ÿฌ ์ฃผ๋ณ€์˜ Spill์„ ์ œ๊ฑฐํ•œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ YCgCo ๊ฐ’์„ ๋‹ค์‹œ RGB๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ตœ์ข… ๊ฐ’์„ ์–ป๋Š”๋‹ค.

 

half3 ycgco = RGBYCgCo(rgb);

half sub = dot(_KeyCgCo, ycgco.yz) / dot(_KeyCgCo, _KeyCgCo);

ycgco.yz -= _KeyCgCo * (sub+0.5) * _SpillRemoval;

rgb = YCgCoRGB(ycgco);

 

https://ko.wikipedia.org/wiki/YCgCo

 

https://github.com/GimChuang/UnityPhotoTool/blob/master/Assets/Klak/Video/ProcAmp/Shaders/ProcAmp.cginc

 

UnityPhotoTool/Assets/Klak/Video/ProcAmp/Shaders/ProcAmp.cginc at master · GimChuang/UnityPhotoTool

Scripts for taking screenshots with countdown animation and chroma keying in Unity. ๐Ÿณ‍๐ŸŒˆ - GimChuang/UnityPhotoTool

github.com

 

 

 

 

 

 

 

 

 

๐Ÿ Ref.

(์ถ”์ฒœ!!) Deconstructing Despill Algorithms : https://benmcewan.com/blog/2018/05/20/understanding-despill-algorithms/

LMS (Long, Medium, Short) : https://en.wikipedia.org/wiki/LMS_color_space#CAT02

RGB to YCgCo : https://www.shadertoy.com/view/4lBXDR

YCbCr to RGB : https://gist.github.com/sortofsleepy/cf6e36fc1f5e5c2355fceaaa4a42e1f1

๋ฐ˜์‘ํ˜•

'ํ•ฉ์„ฑ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Ultimatte 12 (1)  (0) 2024.10.24
Ultimatte 12 (2)  (1) 2024.10.24