오늘의 학습 키워드

UpScale Sampling

 

공부한 내용

UpScale Sampling

업 스케일링 샘플링 : UI는 원래 해상도로 하고 3D 씬만 낮은 해상도로 렌더링 하는 방법

- 해상도를 줄이면 픽셀이 도드라져 게임 유저가 저해상도임을 알아채기 쉬워서 나온 보완 방법

 

구현 방법

1. 카메라 2대가 필요하다(UI 카메라와 메인 카메라)

1-1 CullingMask 옵션에서 UI카메라는 UI만 찍게하고 메인 카메라는 UI를 제외한 부분을 찍게한다.

1-2 또한 UI카메라는 추가로 Clear Flags를 Depth Only로 해 두 대의 카메라가 동시에 렌더링 될 수 있도록 한다.

2. 렌더 텍스처를 담기 위한 캔버스하위의 RawImage를 하나 만든다.

3. 이후 업스케일링을 하기 위한 RenderTexture를 만들고 Raw이미지에 담는 작업을 구현한다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class RenderTextureCreater : MonoBehaviour
{
    [SerializeField] private GameObject rtCanvas;

    public void CreateRT(float ratio)
    {
        int x = (int)(Screen.width * ratio);
        int y = (int)(Screen.height * ratio);

        var rt = new RenderTexture(x, y, 24, UnityEngine.Experimental.Rendering.DefaultFormat.HDR);
        rt.Create();

        Camera.main.targetTexture = rt;

        // RawImage는 Texture에 접근 가능
        RawImage raw = Instantiate(rtCanvas).GetComponentInChildren<RawImage>();
        raw.texture = rt;
    }
}

4. 마지막으로 버튼에 연결하여 동작시킨다.

4-1. 중요한 점은 업스케일링할 Canvas(만들어놓은 프리펩)의 Sort Order버튼 UI의 Sort Order보다 높아야한다. => 그래야 보임

 

적용된 모습 (적용 전 -> 적용 후)

변경 후

 

 

오늘의 회고

 오늘은 개인 과제 제출이 있는 날이었다. 오전 중에는 구상은 해놓았지만 구현하지 못했던 것들을 구현하고 버그 잡고 Readme 쓰느라 정신이 없었던 것 같다. 오후에는 튜터님의 UI 강의를 듣고 Zep으로 레크레이션 시간을 가졌는데 꽤 재밌었다. 이후에 남은 시간에 업스케일링 부분이 있길래 공부해봤는데 나중에 최적화를 위해서 써먹어 봐야겠다.

 내일은 유니티 팀 프로젝트 과제 발제가 있는 날이다. 오전 중에 기획을 진행하고 구상하는 방식으로 팀원과 잘 의견을 공유해봐야겠다. 내일도 파이팅!

 

 

참고 :

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

 

+ Recent posts