
원하지 않는 부분의 조명 처리하기
Tutorial
Beginner
+10XP
20 mins
Unity Technologies
원하지 않는 부분에 닿는 조명을 제거하기 위해 마스크 텍스쳐를 사용하는 차시입니다.
1. 새로운 문제점
여기서 마치면 정말 좋겠지만 아직 발견하지 못한 문제점이 있습니다. Witch 혹은 Block 객체를 조명에 거의 밀접하도록 움직여보세요. 강력한 림 라이트에 의해 스프라이트 형체를 알아볼 수 없을 정도로 심한 빛샘 현상이 일어나는 것을 볼 수 있습니다.
화려한 그래픽 물론 중요하지만 이러한 개발자의 의도에서 벗어나는 그래픽 오류는 사용자가 경험하지 않도록 해결하는 것이 게임 퀄리티를 높이는 방법 중 하나입니다. 그럼 어떻게 해야 이런 문제를 해결할 수 있을까요?
2. 마스크 텍스쳐 소개 및 제작하기
지난 차시에서 Sprite Editor의 Secondary Textures를 눈여겨 보셨다면 _MaskTex 항목이 있다는 점을 기억하실 겁니다. Sprite Lit 기반 셰이더는 필요한 부분만 효과를 부여할 수 있도록 기본적으로 마스크 역할을 하는 텍스쳐를 받고 있습니다. 이것이 마스크 텍스쳐입니다. 이 프로젝트에서는 두 개의 스프라이트에서 마스크 텍스쳐를 사용하고 있습니다. 그 중 간단한 형태의 Sprites > Ground > Ground1 스프라이트를 살펴보겠습니다.
노멀맵과 비슷한 형태로 빛에 반응하는 부분을 칠했지만 붉은색으로 표현했다는 점에서 차이가 있습니다. 또한 빛에 반응하지 않는 부분은 Emission과 같이 검은색으로 칠해져있습니다. 이처럼 빛을 받는 부분을 붉은색 계통으로 표시해주는 것이 특징입니다. 그렇기 때문에 제작 방법 또한 EmissionMap 제작 방법과 거의 동일하다고 말씀드릴 수 있겠습니다.
물론 유니티 에디터에서 원본 스프라이트의 Secondary Textures로 등록하면 적용할 수 있습니다. 노멀맵처럼 _MaskTex로 기본 항목으로 존재하므로 편리하게 추가할 수 있습니다.
3. 마스크 적용하기
마지막으로 해당 마스크 텍스쳐를 장면에서 적용하는 방법을 소개하겠습니다. Light 2D 컴포넌트의 Blending 카테고리를 보면 Blend Style 속성이 있습니다. 스프라이트 색상과 조명의 색상을 섞는 (블렌딩) 방식을 뜻하는데 크게 두 가지가 있습니다.
- Multiply : 색을 곱하는 연산 (회색 * 회색 = 더 어두운 회색)
- Additive : 색을 더하는 연산 (회색 + 회색 = 밝은 회색)
특히 Multiply는 더 어두워져야하지만 조명의 Intensity 가지 고려되므로 밝아진다는 점 참고 바랍니다. 하지만 여기에 하나의 특이한 조건이 추가되어 실제 선택지는 4개로 구성되어 있습니다.
바로 with Mask (R)인데, 마스크 텍스쳐의 빨강 채널 R만 사용하는 옵션입니다. 즉 마스크 텍스쳐가 없으면 모든 빛을 그대로 받지만 마스크 텍스쳐가 있다면 붉은 색의 정도에 따라 빛이 필터링 된다는 뜻입니다. 모든 Rim Light의 Blend Style을 Multiply with Mask (R)로 변경해봅니다.
이제 Witch 객체에 빛샘 현상은 사라지고 바닥 표면에도 자연스러운 림 라이트가 그려지는 것을 볼 수 있습니다. 마스크는 그림자에 비해 연산이 매우 가벼우므로 Shadow Caster 2D를 대체하여 마스크로 그림자를 표현하는 방법으로 최적화를 도모할 수 있습니다.