UE - 튜토리얼 프로젝트 머티리얼 분석
BP-Material
튜토리얼 프로젝트의 머티리얼 분석
강의가 끝나고 팀원분들과 함께 머티리얼에 대해 좀 더 깊이 이해하고자 강의 자료에서 사용한 플레이어 캐릭터의 머티리얼을 분석해보았다. 우리가 살펴본 내용들을 정리하겠다.
머티리얼 그래프와 속성들
머티리얼을 더블 클릭하면 볼 수 있는 머티리얼 그래프이다.
이것은 머티리얼의 결과를 저장하는 노드이다.
여기서 사용하는 각 핀에 대해 설명하겠다.
베이스 컬러 : 텍스처 샘플이나 색상을 연결 메탈릭 : 단일 값이나 텍스처의 채널 값을 연결해 재질 특성을 제어
러프니스 : 메탈릭과 동일
이미시브 컬러 : 노말맵 텍스처를 노말 핀에 연결하면 표현의 세부 굴곡이 적용
퍼즈 컬러 : 벨벳이나 미세한 털 표면의 특성을 표현
클로스 앰비언트 오클루전 : 옷감과 같은 표면에서 발생하는 음영 효과를 표현
앰비언트 오클루전 : 조명이 잘 도달하지 않는 지역에 그림자를 추가해 장면의 입체감을 높여주는 기법
파츠별 색상 조정
캐릭터의 색을 정의하는 T_EpicCharacter_Colors 텍스처는 파츠마다 고유한 색상을 가지고 있다. 이 색상과 머티리얼 함수 MF_ColorMask를 활용하면 특정 부분만 선택적으로 마스킹할 수 있다. 캐릭터의 파츠가 텍스처에 담겨있다.
- 원본 텍스처에서 원하는 색상을 뺀 후, 절댓값을 적용해 음수를 방지한다. 이 과정에서 선택하지 않은 영역은 검은색이 된다.
- 각 픽셀의 R, G, B 값을 더해 색상 차이가 있는 픽셀을 강조한다.
- 임계값을 곱해 색상 차이를 더욱 강조하며, 임계값이 클수록 원하는 색상만 남길 수 있다.
- 결과를 0과 1 사이로 클램핑하고 반전시킨다. 이를 통해 특정 색상에 얼마나 가까운지를 나타내는 마스크를 얻을 수 있다.
결과: 기준색이 보라색이라면 보라색 구역만 남고 나머지는 검은색이 된다.
이렇게 구한 값에 원하는 색상을 곱하면 특정 부분의 색상을 손쉽게 변경할 수 있다.
이렇게 구한 값에 내가 변경하고자 하는 색상을 곱해 부분별로 색상을 변경할 수 있도록 변경할 수 있는 것이다.
머티리얼의 다중 채널 활용
BCE
T_EpicCharacter_BCE 텍스처는 한 장의 텍스처에 BaseColor, Cloth, Emissive 정보를 R, G, B 채널에 나누어 저장했다. 이를 분리해서 사용하면 필요한 정보만 문제없이 추출할 수 있다.
또한 T_EpicCharacter_ARM 텍스처는 각각 A, R, M 채널에 Ambient, Roughness, Metallic 값을 저장했다. 이렇게 다중 채널을 활용하면 텍스처 메모리를 절약하면서도 다양한 정보를 효율적으로 관리할 수 있다는 점이 인상적이었다.
ARM
직접 만든 머티리얼
심장 박동 효과
BaseColor는 두 색상을 선형 보간(Lerp)을 이용해 구성했다 Lerp(A, B, Alpha) = A + Alpha * (B - A) 여기서 Alpha 값으로 텍스처 샘플의 RGB를 사용하면 텍스처 패턴을 반영한 보간 결과를 얻을 수 있다. 또한 월드 포지션 오프셋을 활용해 심장 박동 효과를 구현했다. 버텍스의 법선 방향으로 오프셋을 적용하고, 이를 sin 함수에 연결하면 커졌다 작아지는 동작을 반복할 수 있다. 마지막으로 빨간색 텍스처 값을 Emissive에 적용해 결과를 완성했다.
구체에 이 머티리얼을 적용한 모습이다.
용암 효과
용암의 흐르는 효과를 만들기 위해 Panner와 Screen Position 노드를 사용했다:
Screen Position: 화면 좌표계 기준으로 픽셀의 위치를 반환한다. Panner: 텍스처를 시간에 따라 움직이게 하는 노드로, 애니메이션 효과를 제공한다. 스크린 좌표계를 사용하면 화면을 기준으로 텍스처가 움직이기 때문에, 어디서 바라보더라도 흐르는 효과가 자연스럽게 유지된다.
결과
마무리 머티리얼에 대해 아는 것이 없었지만, 팀원들과 함께 분석하고 공부하면서 많은 것을 배울 수 있었다.
특히 텍스처를 다중 채널로 활용하거나 함수 기반으로 색상을 조정하는 방법은 매우 인상적이었다.
이를 바탕으로 직접 머티리얼을 구현해보며 실습한 경험은 큰 도움이 되었다.