모니터에서 보이는 색들은
빨강(R), 초록(G), 파랑(B)의 혼합(가산혼합)으로 표현하고 있다는 것은 많은 사람이 알고 있는 상식이다.
Unity에서는 이 세 가지 색을 혼합하여 모든 색을 나타내면서
거기에 알파(Alpha)가 추가되어 투명도까지 표현할 수 있게 되었다.
유니티 색상 팔레트를 보면 빨강(R), 초록(G), 파랑(B), 알파(A)가 있으니 이해하기 쉽겠지.
Shader도 이 점을 이용하여 이미지로부터 정보를 읽어내고
어떤 색이 들어간 부분만을 쏙쏙 골라내어 보여주거나 효과를 입혀서 출력하는데(보여주는데)
이를 텍스쳐 마스킹이라고도 하고, Mask라고 하기도 한다.
많은 VRChat Shader에 있는 Mask Texture나
Emission Mask, Rim Light Mask 등.. 모두 이 방법을 쓴다.
게임에 쓰는 Mask 이미지는 대개 흑백으로만 이루어져 있는데
이는 검은색은 RGB가 (0, 0, 0)이고 흰색은 RGB가 (255, 255, 255)인 점을 이용하여
흰색은 모든 색이 혼합되어 있으므로 무슨 셰이더가 어떤 색을 골라내든 간에
아무 색도 혼합되지 않은 검은 색은 빠지고, 흰색만 골라내게 되므로
Mask 이미지를 흑백으로 만들면 VRChat에서 쓰는 셰이더들의 Mask 기능은 거의 다 활용할 수 있게 된다.
만약 셰이더가 빨간색만을 골라내면 R 채널을 골라낸다고 표현하고
알파(투명도)를 골라내면 A채널을 골라낸다고 표현한다.
이런 경우는 단순히 게임만 하는 우리로서는 흔치 않고
Metallic을 숫자가 아니라 이미지로 강도를 표현하려고 R 채널 이미지를 쓰는 때 정도이며
https://gamedevforever.com/149 이런 식으로 버텍스 컬러를 칠해서
텍스쳐가 아니라 버텍스 컬러로 구분하는 경우 말고는 없을 것이다.
이런 건 월드 제작할 때 쓰긴 하겠다..
마스크 기능을 활용하기 위해 에셋스토어에서 쓸만한 에셋을 다운로드하고 임포트한다.
마스크 텍스쳐는 흑백 이미지라면 아무거나 써도 되니까 굳이 다운로드할 필요는 없다.
https://assetstore.unity.com/packages/2d/textures-materials/34-free-shader-fx-masks-71311
새 메터리얼을 만든다.
1편부터 메터리얼 생성 강좌를 썼으니 다 알고 있을 것이다.
Albedo의 색을 검은 색으로 바꿔준다.
새 오브젝트를 만들고 거기에 아까 만든 메터리얼을 입혀주었다.
오브젝트는 당연스럽게도 검은 색이다.
여기에 메터리얼을 만져주자.
Emission(이미션)을 체크하고 Color에 적당한 이미지를 집어넣는다.
원래는 검은 색만 있었는데 이미션에 집어넣은 이미지에 맞춰 색이 추가되었다.
이미션(Emission)의 기능은 그야말로 단순하다. 발광(發光). 빛을 내뿜어 밝게 빛나게 해 주는 기능이다.
그리고 이미지의 흰색 부분에만 Emission의 기능을 이용할 수 있게 된 모습이다.
이로써 아주 간단하지만 마스크 텍스쳐를 집어넣고
셰이더 기능을 이용하는 기초 강좌를 배웠는데
아바타 모델 얼굴 이미지를 그림판이나 포토샵 등의 프로그램으로 불러오고
눈 부분만 빼고 나머지를 검은 색으로 칠하고 저장한 다음
유니티에서는 눈 부분만 흰색인 마스크 텍스쳐를 강좌처럼 Emission에 집어넣어서
모델에서 얼굴 전체가 아니라 눈만 빛나게 한다든지
응용해서 옷에서 어떤 선 부분만 빛나게 하거나 다른 효과를 입히는 방법으로도 쓸 수 있으니 참고하면 좋겠다.
연관 강좌
#01 - Shader(셰이더)의 기초와 이해
https://gall.dcinside.com/m/vr/572692