게임 개발

유니티 포스트프로세스 어디까지 해봤니?

모바일 게임의 그래픽 퀄리티와 성능 사이의 균형을 맞추는 법. 실무에서 배운 포스트프로세스 활용 전략과 프로파일링의 중요성.

CodingJoa 6분 정도 걸립니다

유니티 포스트프로세스 어디까지 해봤니?

그래픽 옵션을 높였는데도 뭔가 허전하다면, 포스트프로세스 하나가 게임의 분위기를 통째로 바꿔놓을 수 있다. 나는 여러 프로젝트를 거치면서 이 기능의 위력을 몸으로 느꼈다. Depth of Field로 카메라에 포커싱된 캐릭터 주변을 흐릿하게 처리하거나, 빗물이 튀는 효과, 색감 보정, 렌더링 순서 조정 같은 것들은 대부분 포스트프로세싱으로 구현한다. 그런데 모바일 플랫폼을 타겟으로 개발하면서 얻은 깨달음이 하나 있다. 이 기능을 무분별하게 쓰면 프로젝트 최적화에 치명적이라는 점이다.

초반에는 그걸 모르고 여러 효과를 한꺼번에 적용해봤다. 에디터에서는 게임이 잘 돌아가는 것처럼 보였는데, 실제 모바일 기기에 빌드해서 실행하니 프레임이 뚝뚝 떨어졌다. 그때부터 신중하게 접근해야 한다는 걸 배웠다. 역설적이게도 게임의 최종 퀄리티는 이 기능이 얼마나 부드럽고 적절하게 들어갔느냐에 따라 극명하게 갈린다. 그래서 제대로 이해하고 활용하는 게 모바일 게임 개발에서 꽤 중요하다.

포스트프로세싱이 실제로 하는 일

이 기능은 이미지 렌더링 과정의 마지막 단계에서 작동한다. 모든 게임 오브젝트가 화면에 그려진 이후에 최종 이미지를 보정하는 단계라고 보면 된다.

가장 흔하게 쓰는 건 Color Grading이다. 전체 이미지의 색감을 조절해서 영화 같은 톤을 만드는 것이다. 낮 씬은 따뜻하게, 밤 씬은 차갑게, 공포 씬은 약간 노랗게—이런 식으로 플레이어의 감정을 은연중에 조종한다. Depth of Field는 실제 카메라처럼 포커스 지점을 정해서 그 외의 영역을 의도적으로 흐릿하게 만든다. 이것만으로도 화면이 영화처럼 느껴진다.

여기에 렌즈 스크래치나 비네팅 효과, 투명한 오브젝트 뒤의 것들을 가려주는 렌더링 같은 것도 함께 구현한다. 이런 요소들이 모여서 ‘게임이 얼마나 예쁜가’를 결정한다.

모바일에서는 왜 성능 킬러가 될까

PC나 콘솔에서 이런 기능을 마음껏 쓸 수 있는 이유는 쿨링 시스템이 충분하기 때문이다. 뜨거워질 걱정을 덜 하고 성능을 끝까지 짜낼 수 있다. 모바일은 판이하다. 손가락만 한 공간에 칩셋, 디스플레이, 배터리가 전부 들어 있고, 이 좁은 곳에서 발생한 열을 식힐 쿨러는 없다.

게임을 오래 돌리면 기기가 뜨거워지고, 일정 온도에 도달하면 운영체제가 강제로 CPU와 GPU의 성능을 낮춘다. 이걸 서멀 스로틀링이라고 부르는데, 그러면 같은 코드를 돌려도 갑자기 프레임이 떨어진다. 포스트프로세싱은 GPU 연산을 많이 잡아먹기 때문에, 효과가 많을수록 기기가 더 빨리 뜨거워진다.

실제로 개발하던 프로젝트에서 이걸 무시하고 계속 기능을 추가한 적이 있다. 기획팀에서 “화면이 좀 더 예뻤으면 좋겠다"고 할 때마다 하나씩 더했는데, 나중에 실제 기기에서 테스트해보니 게임이 거의 플레이 불가능한 지경이 됐다.

프로파일링으로 진짜 병목을 찾아야 한다

여기서 중요한 원칙이 하나 있다. 정확한 측정 없이 최적화를 시작하면 엉뚱한 곳을 고치게 된다. 성능이 안 난다고 무작정 텍스처 해상도를 낮추거나 모델 폴리곤을 줄이는 건 위험하다. 실제 병목이 다른 곳에 있을 수 있기 때문이다.

프로파일러를 켜서 정확히 어디서 시간을 쓰는지 봐야 한다. CPU가 느린지 GPU가 느린지도 구분해야 한다. CPU가 병목이면 로직을 개선해야 하고, GPU가 병목이면 렌더링 작업을 줄여야 한다. 포스트프로세싱은 거의 항상 GPU에 영향을 미치니까 GPU 프로파일링이 중요하다.

유니티 프로파일러의 ‘Window’ 탭에서 ‘Profiler’를 열고, 실제 모바일 기기에 연결해서 측정하는 건 필수다. 에디터에서의 결과와 실제 기기에서의 결과는 천지차이일 수 있다.

프로파일링 항목확인 사항액션
CPU 시간메인 스레드 vs 렌더 스레드CPU 병목이면 로직 최적화
GPU 시간렌더링 시간GPU 병목이면 포스트프로세싱 또는 드로우콜 줄이기
메모리힙 할당량메모리 누수 또는 과할당 확인
온도기기 온도 레벨서멀 스로틀링 임계값 파악

포스트프로세싱을 현명하게 선택하기

프로파일링 결과를 봤다면 이제 선택과 집중이 필요하다. 모든 기능을 다 쓸 수는 없으니까.

필수와 선택을 구분하자. Color Grading은 게임의 분위기를 크게 좌우하니 대체로 필수다. Depth of Field는 영화 같은 느낌을 주지만 없어도 게임을 하는 데 지장이 없다. 빗물 효과나 렌즈 스크래치는 더 그렇다.

또 다른 전략은 기기 성능에 따라 동적으로 조절하는 것이다. 요즘 모바일 기기는 성능 편차가 크니까, 고급 기기에는 모든 효과를 켜고 저사양 기기에는 필수 기능만 켜는 식으로 간다.

기기 등급적용 효과예상 성능
고사양Color Grading + Depth of Field + 비네팅60 FPS
중사양Color Grading + 비네팅30 FPS
저사양Color Grading만30 FPS

실무에서 배운 활용 패턴

프로젝트마다 조금씩 다르지만, 나는 대체로 이런 순서로 간다.

1단계: 최소한으로 시작하기
첫 프로토타입에서는 Color Grading만 적용한다. 프로파일링해서 기준선을 잡는다.

2단계: 하나씩 더하고 측정하기
각 효과를 하나씩 추가해서 프레임 드롭을 측정한다. 보통 5ms 이상 떨어지는 건 후순위로 미룬다.

3단계: 사용자 옵션 제공하기
최종 빌드에는 플레이어가 직접 켜고 끌 수 있는 설정을 넣는다. 배터리 수명을 중요하게 생각하는 사용자는 끌 수 있으니까.

실제로 이렇게 했을 때 반응이 좋았다. 그래픽 설정에서 각 효과를 토글할 수 있게 하면 플레이어들도 자기 기기에 맞춰 최적의 경험을 고를 수 있다.

포스트프로세싱을 정말 포기해야 할까?

결론부터 말하면 아니다. 이 기능은 버려야 할 것이 아니라 프로파일링으로 균형을 맞춰야 할 것이다. 적절하게 쓴 포스트프로세싱은 게임의 시각적 질을 극적으로 끌어올린다. 문제는 기능 자체가 아니라 무분별한 사용이다.

내 경험상 가장 좋은 접근법은 먼저 구석구석 프로파일링하고, 그 결과를 놓고 “이 게임에 정말 필요한 게 무엇인가"를 묻는 것이다. 예쁜 게임을 만들되, 플레이어의 기기를 불지르지 않는 선에서.

마치며

포스트프로세싱은 게임의 최종 인상을 결정하는 중요한 요소다. 그러나 모바일 환경에서는 성능 비용을 무시할 수 없다. 답은 ‘다 없애기’가 아니라 ‘정확히 측정하고 선택하기’다. 프로파일러를 켜서 어디가 느린지 파악하고, 게임에 정말 필요한 기능만 골라서 적용하면 된다. 그렇게 하면 아름다우면서 빠른 게임을 만들 수 있다.

자주 묻는 질문

Q. 포스트프로세싱을 쓰면 항상 느려지나?

성능 드롭의 정도는 효과마다 다르다. Color Grading은 비교적 가벼운 편이지만, Depth of Field나 복잡한 셰이더 기반 효과는 무겁다. 무조건 느려진다고 보기보다는 프로파일러로 실제 영향을 측정해서 판단하는 게 맞다.

Q. 에디터에서는 빠른데 기기에서는 왜 느릴까?

에디터와 빌드 버전의 오버헤드가 다르다. 게다가 에디터를 돌리는 PC는 모바일 기기보다 훨씬 강력하다. 반드시 타겟 기기에 연결해서 측정해야 정확한 판단이 나온다.

Q. 저사양 기기에서는 끄는 게 맞나?

꼭 그럴 필요는 없다. 설정 메뉴에서 플레이어가 직접 고르게 하는 게 가장 낫다. 배터리를 중시하는 사용자는 끄고, 그래픽을 중시하는 사용자는 켜면 된다.

Q. 포스트프로세싱 말고 다른 걸 먼저 최적화해야 하나?

일반적으로는 CPU 로직 최적화 → 모델 폴리곤 줄이기 → 포스트프로세싱 조정 순이다. 다만 프로파일링 결과가 “GPU 병목"이라면 포스트프로세싱부터 줄이는 게 맞다.

이 글 공유하기 X Facebook 네이버

이 글의 내용은 작성 시점에 직접 실행하고 확인한 결과와 글쓴이 개인의 판단을 담은 기록입니다. 도구의 버전·가격·동작은 시간이 지나면 달라질 수 있으니, 따라 하실 때는 공식 문서를 함께 확인해주세요. 자세한 내용은 이용약관에 정리해두었습니다.