📒학습 내용
1. RTS/TPS 게임의 시야 문제 이해하기
게임 개발에서 카메라 시점과 관련된 문제는 종종 발생한다. 특히 여러 카메라 시점을 사용하는 복합 장르 게임에서는 더욱 복잡해진다. 오늘 해결할 문제는 RTS와 TPS 요소를 모두 가진 게임에서의 시야 처리이다.
문제 상황:
- 가디언 플레이어(RTS 모드): 탑뷰(Top-down view)에서 게임을 보며, 전체 상황 파악이 필요하다
- 시커 플레이어(TPS 모드): 3인칭 시점에서 플레이하며, 현실적인 시야 제한이 필요하다
해결해야 할 과제:
- 가디언은 벽에 가려진 캐릭터와 오브젝트를 볼 수 있어야 한다
- 시커는 정상적인 3인칭 시점으로, 벽과 천장에 가려진 것은 보이지 않아야 한다
이러한 문제를 해결하기 위해 언리얼 엔진의 포스트 프로세스 효과와 커스텀 뎁스 스텐실 버퍼(Custom Depth Stencil Buffer)를 활용한다.
2. X-Ray 비전 효과의 핵심 요소
X-Ray 비전 효과를 구현하기 위해 필요한 핵심 기술 요소는 다음과 같다:
- 커스텀 뎁스 스텐실 버퍼 (Custom Depth Stencil Buffer)
- 오브젝트에 특별한 식별 값을 부여하는 기술
- 벽 너머의 오브젝트를 식별하고 시각화하는 데 사용
- 포스트 프로세싱 머티리얼 (Post Processing Material)
- 화면에 적용되는 특수 효과 처리
- 스텐실 값에 따라 다양한 색상과 효과 적용
- 씬 텍스처 활용 (Scene Texture)
- 렌더링된 장면의 정보를 가져와 조작
- 커스텀 스텐실 값을 기반으로 효과 적용
3. 커스텀 뎁스 스텐실 버퍼 설정하기
커스텀 뎁스 스텐실 버퍼는 오브젝트에 특별한 식별 값을 부여하여, 포스트 프로세싱 단계에서 이를 구분하고 다르게 처리할 수 있게 한다.
3.1. 프로젝트 설정 활성화
- 프로젝트 설정에서 "스텐실"을 검색한다
- Custom Depth-Stencil Pass를 "Enabled with Stencil"로 설정한다
3.2. 오브젝트에 커스텀 뎁스 값 지정
식별하고 싶은 각 오브젝트(캐릭터, 무기, 아이템 등)에 커스텀 뎁스 값을 부여한다:
- 대상 오브젝트를 선택한다
- 디테일 패널에서 "Rendering" 섹션을 찾는다
- "Custom Depth"를 활성화한다
- "Custom Stencil Value"에 원하는 값(1~255)을 지정한다
커스텀 스텐실 값 예시:
- 일반 오브젝트: 1 → 🟡 노란색
- 몬스터/적: 2 → 🟢 녹색
- 플레이어(시커): 3 → 🔴 빨간색
4. 포스트 프로세싱 머티리얼 구현하기
이제 커스텀 뎁스 스텐실 값을 시각화하는 포스트 프로세싱 머티리얼을 만든다.
4.1. 포스트 프로세싱 머티리얼 생성
- 콘텐츠 브라우저에서 우클릭하고 "Material" → "M_vision"으로 새 머티리얼을 생성한다
- 머티리얼 에디터를 열고 다음 설정을 적용한다:
- Material Domain: Post Process
- Blend Mode: Translucent
- Blend Position: Before Tone Mapper (UE5.4 이전) 또는 Scene Color Before Bloom (UE5.4 이후)
🔍 실무 팁: UE5.4부터는 "Before Tone Mapper" 옵션이 제거되었으므로 "Scene Color Before Bloom"을 사용한다. 이 설정은 블룸 효과가 적용되기 전 씬 컬러를 활용할 수 있게 해주며, 포스트 프로세스에 이미시브를 적용하는 데 필수적이다.
4.2. 커스텀 스텐실 값 활용하기
포스트 프로세싱 머티리얼에서 커스텀 스텐실 값을 가져오기 위한 노드를 설정한다:
- SceneTexture 노드를 추가하고 "Custom Stencil"로 설정한다
- 이를 Emissive Color에 연결한다
- 머티리얼 인스턴스를 생성하여 빠른 설정 변경이 가능하도록 한다
4.3. 포스트 프로세싱 볼륨 설정
- 씬에 Post Process Volume을 추가한다
- "Infinite Extent"를 활성화하여 전체 레벨에 적용되게 한다
- Post Process Materials 섹션에서 방금 만든 M_vision 머티리얼을 추가한다
이렇게 하면 커스텀 뎁스 값이 지정된 모든 오브젝트가 화면에 강조 표시된다.
5. 오브젝트 강조와 색상 설정
이제 커스텀 스텐실 값에 따라 다른 색상을 적용하여 오브젝트를 구분하고 강조한다.
5.1. 기본 색상 적용
스텐실 값에 따라 다른 색상을 적용하기 위한 노드 설정:
- R 채널만 사용하기 위해 Mask(R) 노드를 추가한다
- Clamp 노드로 0~1 범위로 제한한다
- Lerp 노드를 사용해 알파 채널에 연결한다
5.2. 다중 색상 구분
서로 다른 스텐실 값에 각각 다른 색상을 적용하기 위한 설정:
- 각 값에 따른 색상을 설정 (예: 1→노란색, 2→녹색, 3→빨간색)
5.3. 배경 컬러 정상화
X-Ray 효과가 적용되는 동시에 일반 배경도 자연스럽게 표시되도록 설정:
- SceneTexture을 PostProcess 설정으로 추가한다
- Mask RGB를 통해 원본 색상 정보를 추출한다
- Lerp 노드의 A 입력에 연결하여 스텐실 값이 없는 부분은 원본 색상을 유지하게 한다
🔍 실무 팁: 버퍼 시각화 옵션(View → Buffer Visualization → Custom Stencil)을 사용하면 현재 씬에서 어떤 오브젝트에 어떤 스텐실 값이 지정되어 있는지 쉽게 확인할 수 있다. 디버깅 시 매우 유용하다.
'Dev. > 그래픽스 Graphics' 카테고리의 다른 글
발자국 구현 (0) | 2025.05.18 |
---|---|
벽 너머 캐릭터 보기: 오클루전 마스크 쉐이더 (0) | 2025.05.08 |
그래픽스 파이프라인과 셰이더 문서 정리 (0) | 2025.04.07 |
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (8-완결) (0) | 2025.04.04 |
셰이더 그래프 학습 정리 - '샤라웃 투 고라니🦌' (7) (0) | 2025.04.02 |