내일배움캠프 사전캠프 12일차 - 머티리얼&라이팅, 간단한 상호작용 구현 (문 열기 또는 아이템 줍기)
머티리얼이란?
: 게임 오브젝트의 표면 특성을 결정하는 요소로, 텍스쳐, 색상, 반사, 굴절 등 다양한 시각적 효과를 모아서 3D모델의 표면에 구현된다.
머티리얼의 역할
- 표면 표현: 금속. 유리 나무, 플라스틱 등 다양한 재질을 사실적으로 표현할 수 있음.
- 빛의 상호작용: 조명에 따른 반사, 굴절, 그림자 효과를 통해 현실감을 부여.
- 효과 구현: 노멀 맵, 스페큘러, 메탈릭 등 세밀한 속성을 통해 복잡한 시각효과를 구현.
: 머티리얼을 구성하는 정보 중 하나, 여러개의 텍스처를 섞어 하나의 머티리얼로 만든다.
텍스처 맵의 종류
1) 컬러 정보 (Albedo) = 베이스 컬러
- 물체의 색상 정보가 저장된 텍스처
- 조명, 그림자 등의 영향을 받지 않는 상태의 순수한 정보
2) 라이팅 정보 (Normal Map)
- 미세한 굴곡을 표현하는 텍스처
- 조명이 닿았을 때, 튀어나온 부분은 밝고, 패인 부분은 어둡게 표현됨.
- 언리얼에서는 RGB값을 전부 사용하나, 그 외의 일부 포맷의 노멀맵은 B값만 쓰이는 등 여러가지 상황이 있을 수 있다.
언리얼 예시)
R값: X축 높낮이
G값: Y축 높낮이
B값: Z축 높낮이
- Displacement, Bump, Gloss등의 텍스처도 종종 볼 수 있으나, 잘 쓰이지 않는다.
- Bump, Displacement는 Normal맵과 비슷한 역할을 하나 Normal맵에 밀려 잘 쓰이지 않는다.
- Gloss텍스처는 Roughness 텍스처와 비슷한 역할을 하나, Roughness는 0이 매끄럽고, Gloss는 1이 매끄러운 상태이다.
랜드스케이프 머티리얼 관련 노드
- 머티리얼에 저장된 각 종류의 레이어를 섞어주는 노드
- 랜드스케이프 전체 투명도를 관리하는 노드
- 이를 사용하기 위해서는 해당 머티리얼의 Blend 모드타입이 'Masked'여야 한다.
- 자세한 내용: https://dev.epicgames.com/documentation/ko-kr/unreal-engine/landscape-visibility-tool-in-unreal-engine
포스트 프로세스 볼륨(Post Process Volume) 액터
- 라이팅을 후보정해주는 액터
1) Exposure 노출
- 빛의 노출 정도를 보정해주는 툴
- Auto Exposure Histogram: 캐릭터가 있는 위치마다 빛의 양을 계산을 하여 라이팅이 다르게 보임.
- Manual: 빛의 양을 고정한다.
2) Lens Flares
- 빛의 산란을 표현함.
3) Bloom
- 빛의 번짐을 표현함. 주로 창문에서 나오는 빛 등을 표현한다.
머티리얼 애니메이션
- 블루프린트 뿐 아니라 머티리얼만을 활용해서 애니메이션을 만들 수도 있다.
- 머티리얼 애니메이션을 만들때에는 삼각함수법이나 Time등을 포함한 각종 머티리얼 노드를 활용한다.
Fresnel(프레넬)
- 화면상에서 법선 벡터와 카메라간의 각도차를 바탕으로 표면 가장자리 부분이 두드러지도록 값을 계산해주는 노드
- 가장자리가 빛나게 해준다.
1. 개념 바로 알기
Line Trace란?
- 눈앞에 있는 오브젝트를 탐지하는 “레이저 광선” 같은 기능
- 마우스나 키보드로 상호작용 대상 탐지 시 사용됨
인터랙션 키 바인딩
- 키보드 입력을 통해 특정 이벤트 실행
- 일반적으로 E키나 마우스 클릭에 매핑
2. 직접 구현해보기
목표: 캐릭터가 눈앞의 오브젝트와 상호작용할 수 있도록 구현합니다.
[Step 0] Interact 입력 Mapping 추가
- Edit → Project Settings → Input
1) Action Mappings에 Interact(키: E) 추가
2) E 키 이벤트를 블루프린트에서 찾기 위함.
[Step 1] 문 또는 아이템 블루프린트 생성
- 새 'Actor' 블루프린트 생성 ('BP_InteractableDoor' 또는 'BP_PickupItem')
- Static Mesh 추가 (문 / 아이템 등으로 보이게 설정)
- 생성한 'BP_InteractableDoor'/'BP_PickupItem' 에디터에서
1) Components 탭의 Static Mesh 선택
2) Collision Presets → BlockAll 설정
3) Line Trace가 오브젝트를 정확히 감지합니다.
[Step 2] 상호작용 범위 구현 (Line Trace)
- 'MyCharacter' 블루프린트에 'Line Trace by Channel' 노드 추가
- 'E' 키 입력 → LineTraceByChannel → Hit된 오브젝트 태그 확인 → Custom이벤트 실행
[Step 3] 문 열기 or 아이템 줍기 로직 추가
- 문이면: 'SetRelativeRotation'으로 회전값 변경
- 아이템이면: 'Destroy Actor'로 사라지게 처리
3.결과 확인
겨울 숲속의 SF풍 유적지를 묘사하였다. 밑바닥은 전체적으로 안개가 껴 있으며(ExponentialHeightFog), 언덕을 오를수록 안개는 걷히고 이질적인 건물이 한눈에 보이는데, 그 중 하나는 빛이 강렬하게 점멸하고 있다.
기존의 랜드스케이프에 Snow, Grass, Asphalt 등 머티리얼을 섞어서 바닥을 칠했다. 또한 기존 특정건물의 Emissive값에 Time을 포함한 사인함수를 추가시켜 주기적으로 빛나게끔 설정하였다.
댓글
댓글 쓰기