본문 바로가기

TIL

[TIL]2024-3-13 / 55일차 - 최종 프로젝트 2주차 3일차

 

 

1.오늘의 기술 면접 질문 - 가비지 컬렉터를 회피하기 위한 전략은 무엇이 있나요?

가비지 컬렉터는 유용하면서도 컬렉션을 실행하며 성능저하가 발생하기 때문에 
가비지 컬렉션을 회피할 수록 프로그램 성능이 늘어날 수  있는 결과가 된다. 

System.IDisposable 인터페이스에 있는 void Dispose()로 자체적으로 가비지 컬렉션을 미리 해줄 수 있고
애초에 메모리가 쌓이는 것을 방지하기 위해 힙 메모리의 사용 보다는 스트럭트 메모리의 사용을 하는 등의 방법과 
객체를 생성하는 데에 메모리에 할당하는 것을 최소화 하는 방법 
(오브젝트 풀링으로  재사용하는 객체는 미리 생성하고, 임시 객체의 생성을 최소화, 한 번에 너무 큰 객체를 생성하려고 하지 않기)
참조 관계를 최소화 하는 방법으로, 이는 참조 관계가 복잡해질 수록 힙 메모리에 남을 가능성이 늘어날 수 있기 때문이다.

추가적으로는 Root목록을 기반으로 가비지를 추적하기 때문에 그 목록이 짧다면 목록의 순회시간도 짧아지는 효과도 있다.

 


 

오늘은 코드카타를 풀지 못했다. 문제가 길어지다 보니 오전 컨디션이 안좋으면 풀지 못하는 상황이 생겨버린다.

 


 

2. 오늘의 작업 내용

 

오늘은 남아있던 자잘한 업무를 하면서 이후 스프라이트 작업에 들어가기 위한 준비를 했는데

처음에는 단순하게 픽셀로 찍으려고 했지만

 

이에 대해 깊게 파고드니 생각해 봐야 할 문제가 생겼다.

처음으로 해상도 변경 기능이 들어가게 되면서 생긴 문제인데

 

픽셀 스프라이트는 특정 비율을 기반으로 만들게 될 터인데

화면비와 해상도 설정이 이를 벗어나게 되면 생기는 문제이다.

 

2D 픽셀 기반 스프라이트의 경우 스프라이트의 화면 비와 해상도에 맞는 비율

이를테면 360p를 기준으로 만들어진 스프라이트는 720p 1080p 1440p 2160p에서

픽셀을 x2 x3 x4 x6배를 해주면 되기에 아무 문제 없이 작동하지만…

 

이 비율이 바뀌는 경우 즉 1600x900의 해상도와 같은 경우

2.5배를 해주면 되지만 픽셀에는 0.5픽셀이라는 개념이 존재하지 않기 때문에

이를 덮기 위해서 자체적으로 픽셀이 찢어지거나 안티얼라이징으로 해결해 주어야 한다.

 

그런데 안티얼라이징으로 모두 해결하고자 하면 너무 흐릿한 화면을 만들어내 그래픽에 크게 영향을 미치고

 

 

그렇다고 가만히 두면 이 정도로 깨진다.

 

이를 해결하는 방법으로 픽셀 사이즈를 그대로 두는 방법도 있지만 이러면 카메라는 넓어지면서 맵의 텅 빈 공간만 넓어지며 인게임 화면이 작아 보인다.

 

픽셀아트 스타일을 유지하고자 한다면

픽셀 퍼펙트나 다양한 방법을 쓰더라도 타협을 어느 정도는 봐야 한다.

하지만 우리는 픽셀아트를 꼭 하고자 하는 것이 아닌 깔끔한 그래픽 스타일을 추구하고 있기 때문에 이 보다는 다른 방법도 존재한다.

 

픽셀아트가 아닌 직접 그린 HD그림인 방법이 있다.

가장 현실적인 방법이지만 최적화가 더 어려운 문제가 있다.

 

각 텍스처를 메모리로 불러오는데 말 그대로 더 큰 텍스처이기에 훨씬 무겁기 때문인데

그나마 다행인 점은 우리의 게임에서 인게임 오브젝트의 양이 많지 않다는 것

https://www.youtube.com/watch?v=MrPoCGHM80E

이 영상을 참고하며 최적화에 대한 간략한 개념을 배웠다.

 

이전 강좌들과 연계되어 아틀라스 스프라이트와 같은 스프라이트 시트를 만드는 이유를 확실히 알게 된 것 같다.

 

다음은 벡터 그래픽을 이용하는 방법이다.

벡터는 업사이징과 다운사이징을 하면서 깨지지가 않는다. 물론 써본 적이 없는 작업 방법이기에 작업 과정은 더 오래 걸릴 것 같다.

또한 유니티에서도 자체적으로 VectorGraphics 에셋이 필요하다.

 

직접 다 그리거나 벡터 그래픽으로 단순화 하는 것을 먼저 해보아야 할 것 같았고

결과적으로 벡터 그래픽은 할 수 있으나 지금 그림을 그리는 Clip Studio 프로그램에서는 벡터 그래픽 기능이 빈약하여

어도비 일러스트레이터 등이 유리한 부분이라 현실적인 제약이 많이 걸렸다.

 

그래서 어쩔 수 없이 그냥 HD그림으로 그리는 방법을 택했다.

나중에 최종 즈음에 그래픽 요소들을 최적화하는 마무리 과정을 해야할 것 같다.

 

그렇게 예시로 캐릭터를 대충 만들어 보았고

확실히 용량은 더 크지만 캐릭터 메인 바디에 1mb로 단순한 외형 덕에 크게 무겁지는 않다.

 

간단한 Idle 모션

 

처음 픽셀아트를 고려했던 이유가

작업을 해보며 애니메이션을 만들 때에 편리성 이었던 만큼

애니메이션을 만드는 데에는 더 심혈을 기울일 필요가 있어 보인다.

 

시간이 무지 많이 들 작업으로 보이기에 걱정이 좀 생긴다.