코드를 까볼 수 없기 때문에 뇌피셜이고
걍 업계인으로서 순수 궁금증에 의한 분석임
기본적으로 일시 정지는 timescale(대충 배속 같은 것)을 0으로 때려서 구현하는 것이 일반적인데 이건 그리 무거운 작업이 아님
게임 루프가 프레임 기반이라 발생하는 기본적인 오차는 있지만
정말 무시할 정도로 미미해서, 눈으로 보일 정도의 딸깍질 속도로는 아무 것도 달라지는 게 없어야 정상임
근데 정지를 했을 때 눈에 들어오는 것이 있음
뒤에 화면이 흐려지는 효과임
이 효과가 그냥 냅다 흐려지세욧! 하면 흐려지는 게 아니라 귀찮은 테크닉이 들어감
니케의 출시일을 고려했을 때, Blit 기능이 없는 유니티 버전을 쓰고 있을 것으로 보임
*Blit : 렌더링 화면을 텍스쳐로 땡겨오는 기능인데, 이거 하려고 렌더루프마다 화면을 저장하는 프로세스가 들어가다보니 성능이 좆구려지는 문제가 있어서 유니티가 죽여버렸다.
그럼 남는 선택지는 대표적으로 두 가지 정도가 있는데,
1. Blit 렌더피쳐를 직접 만들든, 어디서 긁어오든 해서 파이프라인에 추가하기
2. 스크린샷 찍듯 카메라에서 텍스쳐를 뽑은 다음 가져와서 필터로 문지르기 or 셰이더 바르기
뭐 컴퓨트 셰이더를 쓴다든지.. 하는 경우도 있는 것 같은데 그 쪽은 잘 모름
전자는 일단 귀찮고, SRP에서 지원을 빼버린 이유를 생각하면 굳이 다시 넣기도 뭣함.
구현하려는 기능에 비해 과하기도 하고
그래서 후자를 선택했을 가능성이 높음. 쉽고 간편하게 떼울 수 있기 때문
문제는 텍스쳐를 갖고 노는 작업 자체가 프레임 레벨에서 보면 상당히 무거운 작업이라
프레임 드랍의 핵심 요인으로 추정됨.
이제 게임에 영향을 주는 지점을 짐작해볼 수 있음
1. 텍스쳐를 뽑아올 때
2. 뽑은 텍스쳐 리소스를 해제할 때 (GC)
*GC : 안 쓰는 메모리를 해제하는 역할을 하는 놈. 이 새끼가 돌아가면 연산량을 많이 집어먹는다.
대상이 클 수록 심해짐 (텍스쳐는 응딩이가 크다)
사실 일시 정지가 되어있는 상태에선 뭔 지랄을 하든 아무런 영향이 없기 때문에 알빠노지만
일시 정지 프로세스를
1.텍스쳐 뽑고 -> 일시 정지 -> 일시 정지 풀고 -> 2.메모리 해제
로 처리하면 게임에 영향을 주는 것이 설명이 된다.
일시정지 기능은 별 거 아니라 생각해서 대충 만들었을 것 같긴 한데..
놓치기 쉬운 2번, GC에서 문제가 생겼을 가능성이 높아 보임
뭐.. 코드 없이 확인되는 부분은 여기까지고
프레임이 게임에 영향을 주는 부분은 인게임 코드 근간을 엎어야 할 가능성이 높아서 섭종할 때까지 못 고치겠지만
싶업은 ESC로 지랄하는 거라도 고쳐보도록 하자
끗
--
요약
시프트업 병신