카테고리 없음

240506~240510 화면 분할 (렌더 타겟,UMG) (3)

hayo_su 2024. 5. 12. 18:40

목표

  • 화면을 분리하여 플레이어1과 플레이어2의 플레이 화면을 띄우기
  • 특정 화면에 포스트프로세싱 효과 적용하기
  • 렌더링 최적화 하기

 

> 작업내용 한판정리

더보기
  1. 플레이어1의 화면을 가져오는 방법(완료) 
    1. SceneCaputreComponents2D를 SpringArm에 달아 현재 카메라에서 캡쳐하는 내용을 그대로 가져올 수 있도록 (완료) 
    2. SceneCaputreComponents2D의 씬캡쳐 결과를 정해놓은 렌더타겟에 복사할 수 있도록 (완료) 
  2. 화면에 띄우는 방법 (완료)
    1. 렌더타겟을 바탕으로 머티리얼과 머티리얼 인스턴스를 생성 (완료) 
    2. 머티리얼 인스턴스를 이미지로 사용하는 UMG를 제작한다. (완료) 
  3. 동시에 렌더링 (진행)
    1. 플레이어1과 플레이어2가 역할에 빙의한 후 이벤트를 발생시켜 렌더타겟을 명확히 지정해준다. (진행)
  4. 루멘 적용 (진행)
    1. SceneCaputreComponents2D가 캡쳐할 때 주변 머티리얼 색상(빛)이 적용받지 않는 문제 (진행)
  5. 블러 효과
    1. 캐릭터가 hp가 0이 된다면 화면에 블러효과가 적용되고 respawn UI를 띄워야한다.
    2. SceneCaputreComponents2D에서 제공하는 MakePostProcessSettings기능을 사용하여 블러효과를 적용할 수 있도록 하였다.
  6. UMG렌더링 순서
    1. 생성된 순서대로 draw call을 하기 때문에 '플레이어 생성 → 렌더타겟 설정 → 분할화면 생성' 시 플레이어에 달려있는 위치 UI, 몬스터의 상호작용 ui 등이 보이지 않는 문제가 발생한다.
  7. tick이 적용되지 않아도 되는 UMG이미지
    1. 위젯 캔버스 중 hp퍼센트와 위치위젯, 상호작용 위젯과 같이 상황에 따라 다르게 적용되는 이미지가 있는 반면, 플레이어 초상, 고정된 노이즈 배경같이 변화가 없는 이미지가 있다. 이러한 이미지에 대해 최적화 처리가 필요하다고 생각한다.

문제점

 

다음과 같이 리슨서버에서 실행 시 카메라로 캡쳐한 내용과 씬에서 캡쳐한 내용이 일치하지 않는다(뷰 가 다르다)


시도해본 해결방안

- SceneCaputreComponents2D를 카메라 밑으로 두는 것

- 한개의 캐릭터에서 동시에 랜더타겟에 Draw하고 있기 때문에 한개의 역할을 변경시키는 것

 

여기에서 클라이언트의 뷰가 일치하여, 약간의 힌트를 얻었다.

 

한개의 캐릭터의 역할을 바꾸고 이후 이벤트를 통해 랜더타겟을 명확히 설정하도록 하니 문제를 해결할 수 있었다.


1. 캐릭터 선택창에서 캐릭터를 선택할 수 있도록 한다.

2. 캐릭터를 선택하고 스폰할 캐릭터를 각 생성한다(CreateActor)

3. 각 역할에 렌터 타겟을 명확하게 설정해 준다.

4. 멀티캐스트를 통해 각 플레이어 컨트롤러에서 화면 분할 UMG를 생성할 수 있도록한다.


 

각 역할에서 타겟을 설정하는 CustomEvent를 만들었다.

 

 

스폰할 캐릭터를 생성한 후 타겟설정을 하여 어떤 캐릭터가 해당하는 렌더타겟에 Draw할지 명확하게 해 주었다.

 

 

빙의가 완료되면 이후에 HP가 생성되어 먼저 draw하지 않도록 하였다.

또한 CustomEvent를 멀티캐스트 시켜, 서버와 클라이언트 모두에게 생성될 수 있도록 하였다.

 

 


루멘적용

 

이것과 같이 카메라로 담은 화면과 타겟뷰가 다르다는 것이 느껴졌고

 

팀원과 논의 결과 루멘이 적용되지 않는다는 문제를 인지하였다.

 

 

SceneCaputreComponents2D에 다음과 같은 설정을 적용하였다.


결과

 

다음과 같이 분할화면이 가능해졌다. 나중에 코디와 메이의 원래 카메라를 없애주면

현재보다는 더 최적화 되지 않을까 싶어 메모해두었다.

 

 

++추가)

 

UMG에 이미지를 사용하였을 때

씬캡처 > 렌더 타겟 > 머티리얼 > 머리티리얼 인스턴스 > UMG에서

2D렌더 타겟이기 때문에 머티리얼, 머티리얼 인스턴스를 사용하지 않아도 바로 UMG에 적용되지 않을까? 이 생각으로 적용해보았는데 잘 작동한다.

머티리얼과 머티리얼 인스턴스과정을 없애 씬캡쳐 > 렌더타겟 > UMG로 적용되게 하였다.