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를 최소화하고
렌더링항목을 최소화하고
틱 발생 주기를 적절한 값으로 제어하게 하면 될 것 같다.
| Gstreamer 로 영상 송출 및 프레임 확인하기 (0) | 2024.07.18 |
|---|---|
| 모드에 따른 타겟 각도까지 카메라 틸팅 (0) | 2023.10.31 |
| 카오스 비히클 자동 기어 vs 수동 기어 vs 토크 제어(전기차) (1) | 2023.10.27 |
| 자동 감시 (구간 감시) 태스크 수행 (2) | 2023.10.23 |
| Unreal 에서 Array 값들 csv로 저장하여 데이터 로깅하기 (1) | 2023.10.07 |