Material이란?
사실은 쉐이더다. 공식 문서에서는 씬에서의 오브젝트 표면 프로퍼티 정의라고 한다.
언리얼 엔진의 쉐이더는 HLSL로 작성되어있으나 언리얼 에디터에서는 비주얼스크립팅으로 머테리얼을 만들 수 있다.
비주얼 스크립팅으로 노드를 조합하여 메인 머테리얼 노드에 입력하여 만든다.
위와 같이 조합하여 만든 결과는 엔진 내부에서 HLSL로 변환되어 사용된다.
Material 생성
머테리얼은 에셋 클래스이므로 콘텐츠 브라우저에서 생성해야 한다.
콘텐츠 브라우저의 Content폴더 우클릭 하여 새 폴더를 생성하고 이름을 Material이라고 짓는다.
Material 폴더에서 다시 우클릭하여 Material 에셋을 생성한다. 이름은 M_MaterialTest로 짓는다.
언리얼은 네이밍 규칙이 있고 그것을 따르는게 언리얼 규약이라고 한다.
언리얼 네이밍 규칙은 아래 사이트 참고
만든 머테리얼 에셋을 더블클릭하여 머테리얼 에디터 창을 연다.
메인 머테리얼 노드가 있는 채로 생성이 된다.
머테리얼의 빈 공간 혹은 메인 머테리얼 노드를 클릭하면 디테일 탭에서 프로퍼티를 표시해 준다. 위의 캡쳐 기준으로 왼쪽 하단에 있는 탭이다.
디테일 탭의 최 상단에 위치해 있는 Material Domain, Blend Mode, Shading Model.이 세가지 설정은 머테리얼의 토대를 형성하고 사용방법을 결정하므로 아주 중요하다.
각각의 의미는 아래와 같다
- 머티리얼 도메인(Material Domain) - 머티리얼의 용도 정의. 표면(Surface), 유저 인터페이스(User Interface), 포스트 프로세스 머티리얼(Post-process Materials) 등.
- 블렌드 모드(Blend Mode) – 머티리얼이 픽셀과 블렌딩되는 방식 정의. 불투명(Opaque) - 뒤 오브젝트 투과X, 반투명(Translucent) ,애디티브(Additive) - 뒤 오브젝트 투과 O 특정 방식으로 배경과 블렌딩.
- 셰이딩 모델(Shading Model) – 머티리얼이 라이트와 상호작용하는 방식 정의. 기본 라이팅포함(Lit), 헤어(Hair) , 클로스(Cloth) , 피부(Skin) 등.
메인 머테리얼의 프로퍼티가 바뀜에 따라 메인머테리얼의 입력 부분이 활성화 비활성화 되는데 언리얼 엔진이 사용할 수 있는 입력만 활성화 해준다. 편할 수 있지만 다르게 보면 자유도가 떨어지는게 아닐까.. 싶기도 하고그래서 비활성화 된 입력은 (있다면) 무시한다.
위의 사진을 예로 들자면, Blend Mode가 Opaque로 세팅되어 있다.
Opaque에는 Opacity를 설정할 수 없다. 그래서 비활성화 처리가 되어있다.
다른 디테일한 프로퍼티는 공식 문서 참고
https://dev.epicgames.com/documentation/ko-kr/unreal-engine/unreal-engine-material-properties?application_version=5.0
메인 머테리얼 노드의 입력 값들에 대한 정의는 아래와 같다.
Base Color
이제 머테리얼에 값을 입력해보자
메인 머테리얼 노드의 base color를 좌클릭으로 끌어 빈공간에 두면 입력할 수 있는 창이 뜬다.
constant3Vector를 선택하여 원하는 색상을 입력한다.
이는 머테리얼의 기본 색상을 정의한다.
Apply->save하여 수정한 머테리얼을 저장한다.
ThirdPersonMap탭으로 돌아와 아무 큐브를 선택한 뒤 키보드의 ALT를 누른 후 마우스 이동을 하면 복제된다.
복제한 Cube의 Detail창에있는 머테리얼을 아까 우리가 만든 머테리얼로 변경한다.
아까 우리가 만든 Material으로 변경되었다.
여기에 Texture를 넣어보자.
Texture Sample이라는 노드를 사용해야 한다. ( Texture Sampling - 텍스쳐의 색상 정보를 추출하는 과정. )
Texture sample노드를 생성하고 클릭하여 좌측 Detail메뉴의 Texture를 변경한다. Texture가 있다면 추가하여 사용하고 없다면 위처럼 언리얼 로고를 사용하면 된다.
그러고 노드를 연결해주면 아래처럼 뜬다.
보기 편하게 preview를 다른 형태로 바꿔서 머테리얼 샘플을 테스트 하겠다.
다른형태로 바꾸려면 아래 버튼들을 클릭하면 된다.
이번에는 텍스쳐에 색상을 입혀보겠다.
Add노드를 추가하여 색상값과 텍스쳐의 색상값을 더하여 BaseColor로 보내면 해당 결과와 같이 만들어진다.
이를 보면 배경과 글씨의 색을 반전하고 싶을때도 있는데 그럴때는 1-value를 해주면 된다.
보다시피 constant의 색상값은 0~1로 되어있기 때문에 반전을 위해서는 1에서 value를 감산하면 된다.
언리얼은 1-x에 대한 수식이 자주 쓰인다는 것을 알고있어서(아마도..) 노드가 있다!
1- 를 검색하면 oneMinus가 뜨는데 그걸 사용하면 된다.
Metalic
메탈릭은 표면이 얼마나 금속처럼 보이는가? 에 대한 정의이다.
값의 정의는 0~1이지만 특수한 경우를 제외하고는 0,1로 정의한다.
특수한 경우 -> 오래된 금속, 먼지가 쌓인 금속,... 등의 혼합된 금속
BlendMode를 다시 Opaque로 변경 후 Metalic을 1.0으로 설정해주면 볼 수 있다.(Base Color는 컬러 상수값으로 정의하는게 더 눈에 띌 것이다.)
이 입력은 Roughness와 합쳐질 때 더 체감이 된다.
Specular
스패큘러는 표면에서 반사되는 정도를 정의한다.
반사 없음(0), 완전 반사(1)
좌측 상단쪽에 맺혀있는 빛의 양을 본다면 더 잘 이해할 수 있다. 아래 사진을 참고하면 된다.
Roughness
머테리얼 표면의 거칠거나 부드러운 정도 제어.
0 -> 부드러움 -> 거울처럼 반사
1->거침->분산 혹은 무광 표면
대부분의 표면의 거칠거나 부드러운 정도가 균등하지 않기 떄문에 흠집, 어딘가에 묻은 지문 등 물리적인 배리에이션을 처리할 때 주로 사용한다.
Anisotropy 및 탄젠트
-- todo
Emissive Color
Emissive Color는 머테리얼이 빛나는 위치와 밝기를 제어한다.
HDR 라이팅이 지원되므로 1보다 큰 값이 허용된다.
HDR 조명(https://learn.microsoft.com/ko-kr/windows/win32/direct3d9/hdr-lighting)
Opacity/Opacity Mask
Base Color의 Texture기반으로 바탕을 투명하게 하려면
Blend Mode를 Translucent로 설정 후 RGBA영역을 Opacity에 연결하면 투명해진다.
여기서 알아둬야 할 사실이 있는데, 사실 흰색은 1이라 투명해지지 않고, 0이여야 투명해지는데, 기본 텍스쳐에는 바탕부분이 검정색(0)이므로 위와같이 나오게 된다.
노멀
개별 픽셀에 대해 노멀(향하는 방향)을 수정하여 표면에 물리적 디테일을 더할 때 사용되는 노멀 맵을 입력 받는다.
-- 예시 todo
월드 포지션 오프셋
-- todo
서브서피스 컬러
-- todo
커스텀 데이터
-- todo
헤어
-- todo
클로스
-- todo
눈
-- todo
클리어코트
-- todo
앰비언트 오클루전
-- todo
리프렉션
-- todo
픽셀 뎁스 오프셋
-- todo
쉐이딩 모델
-- todo
출처
'개발일지 > Unreal&C++' 카테고리의 다른 글
[Unreal] 게임 플레이 프레임워크 (0) | 2025.03.18 |
---|---|
[Unreal] 서브 레벨 구성 및 스트리밍 레벨 로드 (0) | 2025.03.18 |
[Unreal] Blueprint를 활용한 물체 충돌 구현, 효과 주기 (0) | 2025.03.18 |
[Unreal] 3인칭 게임 프로젝트 만들기 (v5.4.4) (0) | 2025.03.11 |
[Unreal] 언리얼 엔진 용어 및 디렉토리 구조, 단위 (0) | 2025.03.11 |