오늘의 학습 키워드
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
'스파르타 Unity 1기' 카테고리의 다른 글
내일배움캠프 5주차 WIL - Input System (0) | 2023.09.11 |
---|---|
내일배움캠프 24일차 TIL - Visual Studio 자동완성, Awake vs OnEnable (0) | 2023.09.08 |
내일배움캠프 22일차 TIL - UI 바인딩, Enum.GetNames() (0) | 2023.09.06 |
내일배움캠프 21일차 TIL - InputSystem(SendMessage, Invoke Unity Events) (0) | 2023.09.05 |
내일배움캠프 20일차 TIL - Atan2, TileMap (0) | 2023.09.04 |