일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 픽셀아트
- 반환원정대
- Aseprite
- 포토샵
- 스마일게이트
- layer
- 픽셀 아트
- 기초
- Pixelart
- 모작
- 에이세프라이트
- pixel art
- 애니메이션
- 멋쟁이사자처럼
- 자원순환보증금관리센터
- 드로잉 연습
- 서포터즈
- 장학팀
- 연습
- 도트공부
- 인디게임 개발
- 채색
- 드로잉
- 노하우
- 개발
- TOOL
- menu
- 도트
- COSMO
- photoshop
- Today
- Total
소소한 나의 하루들
Pixel Perfect Camera에 대해서 본문
본 프로젝트의 에셋은 골드메탈님의 탑다운 2D RPG 에셋 팩을 활용하고 있다. (추후 인게임 시스템 및 프로토타입이 구현되면 교체할 예정)
https://assetstore.unity.com/packages/2d/characters/top-down-2d-rpg-assets-pack-188718
Top-Down 2D RPG Assets Pack | 2D 캐릭터 | Unity Asset Store
Elevate your workflow with the Top-Down 2D RPG Assets Pack asset from Goldmetal. Find this & more 캐릭터 on the Unity Asset Store.
assetstore.unity.com
2025.01.18 - [개발/유니티] - 카메라와 컬링(Camera & Culling), 시네머신(Cinemachine) 이해하기
사실 그렇게 많은 연관이 있다고는 생각하진 않지만, 카메라와 컬링에 대한 이론을 학습하기 전에는 Pixel Perfect Camera가 어떤 역할을 하는지, 어떤 원리로 동작하는지, Reference Resolution에 대해서 이게 어떤 의미를 갖고 어떤 기능을 하는지 잘 몰랐다. 그래서 대충 적당히 어떤 값만 넣으면 스크린 사이즈를 조절해준다거나 하겠지 하며 대수롭지 않게 생각하고 넘어갔었다.
그랬더니 발생한 문제는 아래와 같다.
위 프로젝트에서 설정한 Pixel per Unit 값은 16이다. 그 결과 Game 화면에서 오브젝트의 위 아래가 조금씩 잘려서 보이는 것을 확인할 수 있다. 이것은 Pixel Perfect Camera에 의해 설정된 Orthographic Size 때문이다.
우선 pixel perfect camera 설명부터 하자면, pixel perfect camera에서는 픽셀 단위로 정확한 렌더링을 보장하기 위해 자동으로 계산한다. 계산은 Reference Resolution과 Pixel per Unit 값을 기반으로 이루어진다.
도트그래픽을 활용하는 2D 프로젝트를 진행하다보면, 플레이어가 이동할 때 가끔씩 검은줄이 나타난다거나 pixel strite 이미지가 깨지는 것을 확인할 수 있다. 보통 그것을 방지하기위해 pixel perfect camera 컴포넌트를 추가하여 활성화시킨다.
pixel perfect camera가 활성화되면 camera의 orthographic size 값이 고정되는데
$$ Orthographic\ Size = \frac{\text{Reference Resolution Height}}{2 \times Pixel\ Per\ Unit} $$
다음과 같은 식으로 orthographic size값이 결정된다.
따라서 만약 pixel perfect camera 컴포넌트의 reference resolution Y값을 200으로 해주면, Camera 컴포넌트의 Orthographic Size 값 또한 위 수식으로 계산되어 자동으로 값이 6.75로 설정되는 것을 확인할 수 있다.
*그리고 이때 실제 모니터 해상도 비율(16:9)와 정수배율 최소 1:1이 되는 reference resolution 이상부터 orthographic size를 계산하게 된다. 그 이하는 정수배율 1:1일 때의 size 값으로 고정해버림.
ex) Reference Resolution이 X320일 때 Y는 최소 180 이상이 되어야 Size가 계산될 것이고, X64일 때는 Y는 최소 36 이상이여서 실제 모니터 해상도 비율(16:9)과의 정수배율 1:1 이상을 만족하여야 orthographic size가 계산될 것이다.
Q. 왜 Reference Resolution Y값 200인데, 왜 Orthographic Size는 200/(2*16) = 6.25가 아니라 6.75인가?
그 이유는 Orthographic Size가 실제 보여지는 모니터의 해상도(1920:1080)의 비율 16:9를 고려하여 반영한 결과이기 때문이다. Reference Resolution으로 설정한 해상도(320:200)의 비율은 8:5로, 실제 모니터의 비율 16:9와 다른데, 만약 Reference Resolution 값 그대로 보여주게되면 현재 모니터와는 비율이 맞지 않아 여백이 생기거나 왜곡된 화면이 나타나게 된다. [pixel perfect camera는 이를 조정해주는 역할을 하는데, 그래서 pixel perfect camera 컴포넌트를 추가하지 않거나 비활성화했을 때 픽셀의 왜곡 또는 깨짐이 발생하는 이유이다.
'실제 모니터의 해상도를 고려해서 Orthographic Size가 6.25가 아니라 6.75가 됐어요'라고 그냥 받아들여도 괜찮은데, 내 입장에서는 그렇게 된 이유가 이해가 안되서 계산을 해보았고, 다음과 같이 결론을 내렸다.
pixel per unit 값은 16, (pixel perfect camera의) reference resolution은 320:200으로 설정했다. 따라서 공식에 의해 Orthographic Size는 6.25 값으로 고정이 되었어야한다.
그러나 Unity에서는 실제 모니터의 해상도 비율 16:9와 설정한 reference resolution 해상도 비율 8:5가 맞지 않으니 공백이나 픽셀 왜곡을 방지하기 위해 실제 모니터의 해상도 비율을 반영하여 새로운 Orthographic Size를 설정해야한다.
reference resolution height(세로)를 기준으로, 세로 값인 200에 최대한 근접한, 실제 해상도의 세로비율 9에 맞는 (=9의 배수) 값 216으로 조정한다. 그리고 자동으로 가로 값은 비율(16:9)에 맞춰 384로 설정된다.
→ 이때 '조정된 Reference Resolution Height 값'인 216을 갖고 Orthographic Size를 계산하면 6.75가 나온다.
따라서 pixel perfect camera를 활성화하면 orthographic size는 위와 같은 원리로 조정 및 고정이 되어 설정한 Reference Resolution에 맞춰 해상도를 표현한다.
그렇다고 'Reference Resolution 값을 설정해도 Unity에서 자동으로 실제 해상도 비율을 반영하여 Camera의 Orthographic Size를 조정하는데 무엇하러 Reference Resolution을 설정하지? 어차피 유니티에서 알아서 설정할텐데 기본값으로 지정해두면 안되나?' 하면서 그냥 보고 넘길 것이 아니였다. 물론 모니터의 해상도와 비율을 고려하여 최적화된 방식으로 화면을 렌더링한다고 해도, pixel perfect camera의 해당 옵션은 게임의 기준 해상도를 설정하는 값이다. 픽셀 기반 렌더링을 일관성있게 유지하기 위해서 값을 설정해야할 것이고, 내 게임이 모바일에서 구동될 것인지 PC에서 구동될 것인지 플레이하게될 플랫폼 환경에 따라 결정해야한다.
픽셀(=화소) : 화면을 이루는 가장 작은 단위면적
해상도 : 디스플레이의 선명도를 나타내는 지표, 화면이 갖는 절대적인 픽셀 수
화질 : 단위면적 당 픽셀 수를 기준으로, 디스플레이 화면 선명도의 실질적 품질
'내 게임은 PC에서 플레이할 것이니까 1920:1080 해상도로 설정해야지' 라고 무조건 고해상도록 해야 좋은 것은 아니다. 게임 스타일 및 목적, 퍼포먼스 요구사항에 따라 적절하게 해상도를 설정해야한다.
1920x1080 / 960x540 / 480x270 모두 비율은 16:9로 같기 때문에 화면의 모양은 동일하지만, 해상도가 낮다.
해상도가 낮을수록 디테일이 떨어지고 뭉개진 느낌을 주기도 하지만 개별 픽셀이 더 크게 보인다. 하지만 낮은 해상도를 사용해 레트로 감성을 강조하기도 한다. 그리고 성능적인 측면에서는 GPU와 CPU가 더 많은 연산을 처리하여 퍼포먼스 요구사항이 증가한다.
https://discussions.unity.com/t/pixel-perfect-camera-changes-zoom-on-different-resolutions/916082/2 [참고]
결론
pixel per unit 16인 스프라이트에서 Pixel Perfect Camera를 추가하였을 때 아이작처럼 꽉찬 화면구성의 구현을 위해서는 위/아래 잘리는 위 해상도가 최선인 것 같다.
→ pixel per unit 32 이상에서도 잘리게될지는 모르겠지만, 만약 그렇다면 위/아래에 쓰이는 스프라이트는 이를 고려하여 조절하거나 아니면 pixel perfect를 사용하지 않고 스크립트로 해당 기능을 대체할 수 있는 방법을 고민해봐야겠다.
라고 했지만, 생각해보니 Reference Resolution은 '이 해상도에서 픽셀 정밀도가 유지되도록 하라'는 의미이다. 현재 개발중인 유니티 Game에서 보이는 '오브젝트가 잘려서 보여지는 문제'는 현재 내 모니터 해상도 비율을 고려하여 보여주는 것일 뿐이니, 개발 단계에서 오브젝트 전체가 완벽하게 보이도록 노력하지 않아도 된다. 결과물은 내가 설정한 Reference Resolution을 반영하여 해당 해상도에서 픽셀 정밀도를 유지하여 보여줄 것이니까. (완벽하지 않아도 괜찮다)
출시하기 전에 게임 창 크기 관련한 부분만 설정해주면 될 것 같다.
2025.01.17 - [개발/게임개발] - 맵 이동 & 카메라 좌표 조정 [참고]
'개발 > 유니티' 카테고리의 다른 글
랜덤 맵 구조를 오브젝트 풀과 팩토리 패턴으로 구현한다고? (0) | 2025.06.04 |
---|---|
유니티 공식문서는 어떻게 읽어야 할까? (0) | 2025.06.01 |
카메라와 컬링(Camera & Culling), 시네머신(Cinemachine) 이해하기 (0) | 2025.01.18 |
2d 종스크롤 슈팅(12) - 모바일 슈팅게임 만들기 (0) | 2024.03.02 |
2d 종스크롤 슈팅(11) - 탄막을 뿜어대는 보스 만들기 (0) | 2024.02.26 |