상세 컨텐츠

본문 제목

SceneCaptureComponent 2D 의 가동 개수와 렌더링 퍼포먼스로 인한 언리얼 프레임 변화 비교

Unreal

by Real_Go 2023. 10. 28. 10:30

본문

LiDAR 모의와 RTSP 송부, 객체 탐지 ground truth 모델 생성 목적으로 scenecapture component 2d 를 남발했더니

고사양 컴퓨터인데도 프레임이 5 fps 가 나오고 있었다.

원인이 뭔지도 모르고 뭐야 뭐야 했던....

일단 카메라는 언리얼의 기본 camera 와 Scenecapture 2D 카메라의 역할이 다르다.

씬캡쳐2D 카메라는 이미지를 저장하거나 송출할때 쓰이기 때문이다.

일단 뷰포트 화면 좌측상단에 뷰포트 옵션을 눌러 ShowFPS를 활성화해준다.

기본 탬플릿 사용 기준 60 FPS 가 나오는 걸 알 수 있다.

 

일단 5개 를 달았다.

Render Target 을 새로 만들어서 각 씬캡쳐2D 카메라의 텍스처 타깃에 할당해준다.

엌....4분의 1토막이 났다. 46 FPS......

 

그렇다면 기존 프로젝트에서 고생했던 9개 Scenecapture2D 를 달아보겠다.

렌더타깃도 더 만들어주고

실행 했더니 fps 이 반토막이 났다. 60 fps > 30 fps 로....

씬캡쳐카메라가 렌더링을 각 렌더타깃에다가 갖다박으면서 실제로 렌더링을 수행하기 때문에

언리얼 기본 카메라처럼 하나가 활성화되면 나머지는 죽는 식이 아니기 때문에 그대로 부하가 늘어나게 된다.

게다가 이건 단순히 렌더링 부하만 있는 상황이다.

만약 각 씬캡쳐마다 이미지를 저장하는 역할을 수행한다면 어떻게 될까.

이미지를 저장하는  export render target 을 활용하여 찍도록 했다. 이 이벤트에 대해서 Begin play 에 달아주면 끝

1 fps 로 개같이 멸망.....

각 캡쳐카메라 오브젝트 이름으로 폴더를 생성하도록 해서 저렇게 폴더가 생성되고 안에 이미지가 막 저장됨을 알 수 있는데

 

1fps.... 본인 컴퓨터가 RAM 64GB 에 GPU-3090, cpu i-7 11K 의 준수한 스펙임에도 이정도가 나오면....

렌더링을 실시간으로 텍스쳐에다 하면서 저장하는 것이 얼마나 빡센 작업인지 알 수 있을 것이다.

 

일단 실제 저장하는거를 4개로 줄여봤는데 프레임 성능이 딱히 나아지진 않았고

그상태에서 SetTimebyEvent 의 기존의 Time: 0.05 에서 Time: 0.5  로 올리니 9 fps 까지는 올랐고 

Time:1 로 올리니 30fps (비록 한번 Iteration 돌때 10fps 까지 확 떨어졌다가 다시 오르고 개판이긴하지만)

까지 오르는 걸 볼 수 있었다.

 

해결방안으로는 가동하는 씬캡쳐2D를 최소화하고

렌더링항목을 최소화하고

틱 발생 주기를 적절한 값으로 제어하게 하면 될 것 같다.

                  

 

관련글 더보기