텍스쳐를 흑백으로 표현하는 셰이더

2022. 5. 16. 14:57Unity

게임에서 과거 시점을 표현하거나 만화같은 느낌을 느낌을 주기위해 흑백으로 된 오브젝트가 필요한 경우가 있다.

이럴 때 셰이더를 이용해 간단하게 오브젝트를 흑백으로 표현할 수 있다.

 

우선 테스트용으로 사용할 텍스쳐를 에셋스토어에서 받는다.

이 스탠다드 에셋은 유니티에서 제공해 주는데, 2018이전 버전에서는 내장이었지만 이후부터는 에셋스토어에서 받도록 변경되고 더 이상 사후지원을 해주지 않는다.

Environment 하위 폴더의 텍스쳐만 사용할 것이므로 Environment 폴더만 체크하여 받아준다. 나는 이미 받아서 체크가 되지 않는다.

 

프로젝트 창에서 적당한 위치에 스탠다드 서피스 셰이더와 머테리얼을 만들어준다.

 

머테리얼에 방금 만든 셰이더를 연결해주고

위에서 텍스쳐를 받았으므로 select를 누르면 텍스쳐들이 보일 것이다. 이 중 적당한 텍스처를 선택해 준다.

(머테리얼의 항목들이 다른 것은 이미 셰이더에서 불필요한 부분들을 지웠기 때문이다. 텍스쳐만 선택해주면 된다.)

아까 만든 셰이더를 열어서 surf함수의 albedo 항목을 위와 같이 변경하고 적당한 오브젝트에 머테리얼을 적용해주면

오브젝트가 흑백으로 표현된다.

 

------------------------------

 

YIQ 색 공간

YIQ 색 공간은 컬러 텔레비전에서 사용되는 색 공간으로

Y는 강도(밝기)를

I와 Q는 색상을 나타낸다.

 

이를 이용하여 RGB값을 YIQ값으로 변환하여 Y값만 적용하면 강도(밝기) 값만 얻을 수 있으므로 흑백 표현이 가능해진다.

 

RGB를 YIQ로 변환하는 공식은

Y = 0.299 * R + 0.587 * G + 0.114 * B

U = 0.595 * R - 0.274 * G - 0.321 * B

Q = 0.221 * R - 0.522591 * G + 0.311 * B

이므로 이중 Y 값만 적용하면

 

왼쪽이 기존의 방식, 오른쪽이 YIQ방식

둘 다 흑백이지만 미묘하게 느낌이 다르다.