게임에 업스케일링을 직접 만든 적이 있었는데,
그때 당시에는 유니티에서 제공한 샘플 존재를 모르기도 했지만, 알았어도
프로젝트 상황상 적용하진 못했을듯 하다. ( 아래 링크는 유니티에서 제공한 업스케일링 샘플 )
https://github.com/ozlael/UpsamplingRenderingDemo
GitHub - ozlael/UpsamplingRenderingDemo: Upsampling Rendering is old school but common trick for low end devices.
Upsampling Rendering is old school but common trick for low end devices. - GitHub - ozlael/UpsamplingRenderingDemo: Upsampling Rendering is old school but common trick for low end devices.
github.com
* 목차
0. 최종 목표 ( GPU 에 대한 부담 줄이는 것 )
1. 구동 대상의 디스플레이에 대한 이해 ( 모바일 화면 크기 / 해상도, 모니터 크기 / 해상도 )
2. Upscaling 목표
3. Upscaling 장단점
4. 화면 해상도 조절 장단점 ( 유니티에서는 Screen.SetResolution 함수 )
5. 게임 제작에 적용했던 방식 ( 모바일 )
6. 결론
0. 최종 목표 ( GPU 에 대한 부담 )
- 사용자가 선택한 화면 해상도 그대로 렌더링 하면 편하겠지만, 고해상도 픽셀을 감당할 정도 그래픽 카드를 유저들은 대부분 가지고 있지 않고, 가지고 있어도, 게임 내의 발열, 혹시 모를 순간적인 부하 및 발열을 낮추기 위해 최대한 적은 연산으로 고해상도 처리를 위해 사용되었다.
1. 구동 대상의 디스플레이에 대한 이해 ( 모바일 화면 크기 / 해상도, 모니터 크기 / 해상도 )
- 모바일 화면은 화면은 작지만 해상도는 높고, 해상도를 조금씩 낮춰 봤을 때, 사람이 인지하기까지 생각보다 많이 낮추는 것이 가능하다. 또한 해상도 낮췄을 때 배터리와 발열이 줄어드는 체감이 큼.
- PC 에서 사용하는 모니터일 경우는 면적당 픽셀 ( DPI ) 가 모바일보다는 적기에 해상도를 조금만 낮춰도 사람이 체감하는 정도가 크다. 하지만, 모바일보다는 상대적으로 전기 소모, 발열에 대해서 부담이 적기에 해상도를 정직하게 높게 쓰는 것에 대해 부담이 덜하다.
2. Upscaling 목표
- 앞서 언급한것과 같이 GPU에 대한 부담을 줄이는 것이 최종 목표이고, 그 방법으로
목표로 하는 해상도보다 작은 해상도로 화면 계산을 한뒤, 목표 화면만큼 늘려서 출력하는 것인데, 초창기에는 단순히 늘려서 찍다가 이미지 프로세싱으로 이미지를 늘려서 발생하게 되는 흐릿해지는 현상을 보강하는 방법들도 발전하게 되었음.
3. Upscaling 장단점
- 장점 : 고해상도 화면 렌더링에서 많은 픽셀 처리로 발생하는 부하를 줄일 수 있다.
- 단점 : 너무 많이 화면 해상도를 줄여서 계산하면, 최종 이미지가 늘어져 보이게 됨.
4. 화면 해상도 조절 장단점 ( 유니티에서는 Screen.SetResolution 함수 )
- 장점 : 단순하게 함수콜 한 번으로 원하는 해상도로 변경 가능
- 단점 : 3D 화면뿐만 아니라 UI 가 올라가는 화면도 같이 줄어들어 글자 가독성이 매우 떨어지게 됨
5. 게임 제작에 적용했던 방식 ( 모바일 )
- 3D 화면에서의 부하를 줄이고, 2D UI에서 가독성을 높이기 위해 Screen.SetResolution 함수로 약간 해상도를 줄이고,
Upscale로 3D 화면 쪽의 부하를 줄임
6. 결론
- Upscale 구현이 만능은 아니기에 조금만 사용하고 다른 최적화 방안과 접목해서 사용하는 것 권장.