2D 픽셀 퍼펙트: Unity로 레트로 16비트 게임 제작하기

이전에 포스팅한 첫 번째 2D 픽셀 퍼펙트 가이드에서는 Unity로 레트로 게임을 제작하기 위한 2D 픽셀 퍼펙트 툴 설정 방법과 과거의 8비트 그래픽스 제작 방식을 소개했습니다. 이번 포스팅에서는 16비트 시대로 넘어가서, Mega Cat Studios와 함께 Unity 설정, 그래픽스 구조, 컬러 팔레트를 사용하여 Sega Genesis(또는 Mega Drive)와 Super NES 스타일 게임 아트를 제작하는 방법을 소개합니다.
Unity의 기본 2D 개발 도구 모음을 활용하여 2D 개발 경험을 한 단계 더 높여보세요.

메가캣 스튜디오는 높은 정확도를 자랑하는 레트로 게임 제작을 예술의 경지로 끌어올렸습니다. 실제로 이 스튜디오에서 작업한 타이틀 중 몇 가지는 카트리지 형태로 구입하여 Sega Genesis와 같은 레트로 콘솔에서 플레이할 수 있습니다.
이 글을 읽기 전에, 2D Pixel Perfect 설정과 8비트 스타일 그래픽 재현 방법을 다룬 이전 레트로 가이드를 먼저 살펴보시는 것을 추천합니다. Unity 2019.2버전부터는 경량 렌더 파이프라인(LWRP) 패키지의 2D 렌더러에 2D 픽셀 퍼펙트가 포함되어 있습니다. 또한 2D 픽셀 퍼펙트는 LWRP를 사용하지 않는 크리에이터를 위한 독립형 패키지(기능 동일)로도 제공됩니다. 이 포스팅에서는 LWRP에서 프로젝트를 설정하는 방법을 소개합니다.
Unity Hub 에서 [새로 만들기]를 클릭하고 [2D 선택한 다음 프로젝트 이름을 지정하세요.

2. 2D Pixel Perfect 패키지를 가져오려면 도구 모음에서 창 메뉴를 클릭하고 패키지 관리자를 선택하십시오. 팝업 창에서 Lightweight RP 패키지를 선택하고 버전 6.9.0 이상을 선택하십시오.

3. 다음으로 에디터에서 2D 렌더러를 구성하고 새로운 파이프라인 에셋을 생성합니다. 프로젝트 창에서 에셋 뷰를 마우스 오른쪽 버튼으로 클릭하고 만들기 > 렌더링 > 경량 렌더 파이프라인 > 파이프라인 에셋을 선택합니다.
4. 프로젝트 창의 자산 보기에서 마우스 오른쪽 버튼을 클릭하고 만들기 > 렌더링 > 경량 렌더 파이프라인 > 2D 렌더러를 선택하여 새 2D 렌더러를 생성합니다.

5. 생성한 파이프라인 자산을 선택하세요. [일반]을 선택한 다음 [렌더러 유형]을 [포워드 렌더러] 에서 [사용자 지정] 으로 변경합니다.
6. 생성한 2D 렌더러를 데이터 필드에 할당합니다.

7. Graphics 설정에서 새로 생성한 파이프라인 에셋을 사용하도록 Scriptable Render Pipeline Settings를 설정합니다.
이제 2D 픽셀 퍼펙트 카메라를 비롯한 2D 렌더러 구성이 완료되었습니다.
Unity 2019.2에서는 2D 스프라이트에 “Sprite-Lit” 머티리얼을 포함하여 2D 조명 상태에 반응할 수 있습니다. 프로젝트에서 2D 조명을 사용하지 않는 경우, 2D 조명이 없어도 스프라이트가 보이는 머티리얼이 있는지 확인하고 머티리얼을 “Sprites-Default”로 변경합니다.

메인 카메라에 픽셀 퍼펙트 카메라 컴포넌트를 추가해야 합니다. Run In Edit Mode를 선택할 것을 권장합니다.
세가 제네시스 콘솔의 해상도는 320x224픽셀(또는 8x8픽셀 타일 40x28개로 이루어진 격자)입니다. 저건 NTSC 버전입니다. 슈퍼 NES는 NTSC 버전에서도 256×224 해상도(8x8 픽셀 타일 30x28개)를 가지고 있습니다.
두 그래픽 형식 모두 224픽셀의 높이 해상도를 사용하고 에셋을 8PPU로 설계할 것을 권장합니다.

2D Pixel Perfect 카메라 구성 요소의 각 옵션이 어떤 기능을 하는지 다시 한번 확인하고 싶으시다면, 이전 레트로 게임 블로그 게시물을 참조하세요.
이 섹션에서는 NES 블로그 게시물 에서 했던 것처럼 다양한 콘솔의 외관을 모방한 아트워크를 제작하는 워크플로를 다룰 것입니다. Genesis는 8비트 프로젝트에 비해 제약이 적고 컬러 면에서도 더 많은 자유를 제공하지만 나름의 한계가 있습니다. 따라서 하드웨어의 작동 원리를 살펴본 후 이러한 한계를 나만의 레트로 프로젝트에 적용해 봅시다.
8비트 콘솔에서 16비트 콘솔로 넘어가면 보다 정교한 하드웨어에서 더 많은 옵션이 제공됩니다. 하지만 멋진 NES 아트워크를 제작하기 위한 기본 원리는 변하지 않습니다. 인스턴스 를 들어 모든 그래픽은 여전히 8x8 타일 형태로 저장된 다음 스프라이트든 배경 요소든 더 큰 이미지로 조립됩니다. 16비트는 어떤 면에서 팔레트를 더 자유롭게 사용할 수 있도록 하지만, 여전히 공통 투명 컬러가 포함된 제한적인 하위 팔레트를 사용하게 됩니다. 일반적으로 16비트 콘솔에는 8비트 콘솔과 달리 하드 코딩된 컬러 팔레트가 없어 NES보다 훨씬 다양한 컬러를 사용할 수 있습니다.
다음으로, Genesis는 스프라이트 투명도와 레이어 투명도에 사용되는 공통 컬러 외에도 15가지 컬러로 구성된 하위 팔레트를 갖추고 있습니다. 하지만 Genesis 아트 디자인의 약점 중 하나가 바로 하위 팔레트입니다. 하위 팔레트를 스프라이트나 배경 타일에 자유롭게 할당할 수 있지만 Genesis에서는 한 번에 4개의 하위 팔레트만 사용할 수 있습니다. 이로 인해 아티스트는 하위 팔레트에서 컬러 선택에 유의하여 스프라이트와 배경의 컬러 구성을 최대한 다양화해야 합니다. 모든 요소를 깔끔하게 표현하기 위해 Genesis의 하위 팔레트에는 보통 배경과 스프라이트 모두에 사용되는 컬러가 포함되어 있습니다.


16비트 플랫폼용으로 제작하려면 색인 팔레트로 작업해야 합니다. Photoshop 대신 오픈 소스인 Gimp를 사용하면 색인 팔레트를 다양하게 조작할 수 있습니다.
Gimp 에서 인덱스 팔레트를 만들려면 이미지 > 모드 > 인덱스 …로 이동하세요.

Indexed Color Conversion 창이 표시됩니다.

최대 색상 수를 15 개로 설정하세요. 자동 디더링 패턴을 사용할 수도 있지만, 보통 직접 생성하는 경우 디더링 패턴 품질이 더 좋습니다.

이제 이미지 컬러 색인이 완료되었습니다. 이 정보는 자동으로 이미지와 함께 저장되어 컬러 색인을 사용할 수 있습니다. 인덱스의 색상 순서를 변경해야 하는 경우 색상 맵을 마우스 오른쪽 버튼으로 클릭하고 "색상 맵 재배열..."을 선택하면 됩니다.

팝업 메뉴에서 드래그 앤 드롭을 통해 컬러를 새로운 순서로 배치할 수 있습니다.

더 풍부한 색심도를 구현하기 위해 흔히 사용되는 방법 중 하나는 지정된 래스터 라인을 따라 팔레트를 제어하여 NES의 패럴랙스 스크롤과 같은 효과를 내는 것입니다. Genesis는 지정된 래스터 라인을 기준으로 하위 팔레트 구성을 변경할 수 있습니다. 이 트릭은 레벨의 일부가 물속에 있는 것처럼 보이게 하는 착시 효과를 만들기 위해 자주 사용됩니다. 완전히 별도의 하위 팔레트 구성에 “수중” 컬러가 추가된 후, 특정 래스터 라인이 스크린에 렌더링되면 하위 팔레트 구성이 로드됩니다.
일반적으로 16비트 콘솔은 8비트 콘솔과 같은 방식으로 그래픽 타일을 로드하지 않습니다. 8비트 콘솔은 처리 능력을 많이 사용하지 않기 위해 스프라이트와 배경 타일을 별도로 대량의 데이터로 로드하는 반면, 16비트 콘솔은 더 큰 유연성을 위한 처리 능력을 갖추고 있습니다. 16비트 콘솔은 개별 타일을 즉시 로드하고 교체할 수 있어 필요할 때 원하는 그래픽만 로드할 수 있습니다. 따라서 게임의 단일 레벨이나 스크린에서 더 다양한 아트워크를 사용할 수 있습니다.
Genesis/Mega Drive의 또 다른 고유한 특성은, 게임 실행 시 콘솔의 VRAM에 그래픽 타일과 팔레트 데이터만 로드되는 것이 아니라는 점입니다. 특정 시간에 메모리에 로드될 수 있는 그래픽 타일의 개수는 게임에서 진행되고 있는 여러 요소들에 따라 달라지기 때문에 콘솔을 위한 아트 제작이 까다로울 수 있습니다. 일반적으로 대부분의 게임에는 약 1000개의 타일까지 로드할 수 있는 공간이 있으며 동적 요소가 있는 경우에는 타일을 언제든지 자유롭게 교체할 수 있습니다.

VRAM에 더 많은 가용 타일을 한 번에 로드할 수 있지만 대부분 추가 공간은 스프라이트를 위해 비워두어 더 다양한 애니메이션과 스프라이트 유형을 한 번에 스크린에 구현할 수 있도록 합니다. 따라서 배경이 가용 공간을 너무 많이 차지하지 않도록 반복되는 타일 세그먼트를 사용한다는 기본적인 디자인 원칙이 16비트 아트에서도 여전히 유효합니다. NES, Genesis, SNES의 해상도는 모두 상당히 비슷하기 때문에 이러한 디자인에서는 16x16 세그먼트가 출발점이 되는 경우가 많습니다.

Genesis/Mega Drive에서는 한 번에 2개의 배경 레이어를 스크린에 활성화할 수 있습니다. 따라서 배경을 디자인할 때 레이어 요소를 더 쉽게 사용할 수 있습니다. 하지만 2개의 레이어에 불과하기 때문에 아티스트와 개발자는 씬의 뎁스를 더욱 풍부하게 구현하기 위해 래스터 라인 기법을 사용해야 합니다. 다행히도 이러한 모든 요소를 두 번째 레이어에 배치할 수 있기 때문에 디자이너는 그래픽 효과를 유지하면서 전경 오브젝트를 배경 앞에 배치할 수 있습니다.
또한 두 번째 레이어가 있기 때문에 전경 오브젝트를 만들 때 스프라이트의 우선 순위를 크게 고려할 필요가 없습니다. 이제는 스프라이트 우선 순위를 신속하게 반복적으로 변경하지 않고도 플레이어 앞에 두 번째 배경 레이어를 표시하도록 설정할 수 있습니다. 물론 이보다 고급 레이어링의 경우에는 여전히 스프라이트 우선 순위를 빠르게 조정해야 할 수 있습니다. 또한 두 번째 배경 창에는 헤드업 디스플레이(HUD)에 사용할 수 있는 하위 창이 있습니다. 하위 창은 제자리에 고정되며 스크롤되지 않습니다.

16비트에서는 스프라이트로 작업하기가 더 자유롭습니다. Genesis/Mega Drive에서는 새로운 스프라이트 렌더링이 중지될 때까지 스크린상 동시에 80개, 그리고 단일 수평선상 약 20개의 스프라이트가 허용됩니다. 그 외에도 스프라이트는 더 이상 개별 8x8 타일로 계산되지 않습니다. Genesis는 여러 타일로 구성된 단일 스프라이트를 생성할 수 있습니다. 크기는 타일 한 장처럼 작은 것부터 4x4 타일처럼 큰 것까지 다양합니다. 그보다 더 큰 것을 만들려면 여전히 여러 개의 스프라이트를 조합해야 합니다.

16비트 시대 아트워크의 뚜렷한 특징 중 하나는 디더링을 사용한다는 점입니다. 이 시대의 게임은 화면의 픽셀이 서로 번지는 경향이 있던 CRT 모니터에 송출되었습니다. 따라서 당시 아티스트는 디더링 패턴을 사용하여 한 픽셀이 반복적인 패턴으로 다른 픽셀로 번질 때, 실제로 주어진 컬러보다 다양한 컬러 효과를 구현했습니다. 현재는 디스플레이가 많이 발전했지만 픽셀 아트의 정확한 심미적 효과를 유지하기 위해 여전히 디더링을 사용하고 있습니다.

2가지 주요 16비트 콘솔 중 Genesis/Mega Drive는 컬러의 대비를 훨씬 더 풍부하게 표현합니다. 이는 서브 팔레트를 선택할 때에도 유의해야 할 사항입니다. 하드웨어에서 실제로 이미지를 렌더링하는 경우, 침침하고 단조로운 톤을 적용하면 원하는 디자인이 구현되지 않습니다. 일반적으로 최종 결과가 아티스트의 원래 의도와 일치하려면 고대비 컬러 팔레트를 사용하여 아트를 생성해야 합니다.
슈퍼 NES 프로젝트의 경우, 여전히 8x8 픽셀 크기의 타일/그리드를 사용하고 있기 때문에 반복 가능한 타일을 활용하는 것이 매우 유용합니다. 일반적으로 이러한 타일은 8의 배수인 경우가 많습니다.
제네시스/메가 드라이브와 SNES의 첫 번째 근본적인 차이점은 색상 팔레트에 있습니다. 메가 드라이브와 마찬가지로 SNES는 고정된 색상 팔레트가 없으므로 사용자가 원하는 색상을 선택할 수 있습니다.
SNES에서 난감한 부분은 현재는 보기 힘든 픽셀당 5비트(5BPP) 컬러를 사용한다는 점입니다. 이 문제를 해결하려면, Gimp로 아트워크를 생성한 다음 이미지를 32개의 RGB 색조로 단순화하여 이미지를 5BPP 컬러로 저장하지 않아도 5BPP 컬러로 처리되도록 합니다. 이렇게 하면 콘솔에 이미지 색상이 정확하게 표시됩니다.

Gimp 에서 색상 > 포스터화… 메뉴를 선택하면 이 옵션이 나타납니다. 팝업 창에서 포스터화 레벨을 32로 설정하면 BPP 호환 색상 5개를 만들 수 있습니다.

두 시스템 간의 다음으로 큰 차이점은 화면 해상도에 있습니다. SNES는 NES의 후속 기종이기 때문에 두 시스템의 화면 해상도가 유사합니다. SNES의 내부 해상도는 256x224입니다. 따라서 렌더링되는 이미지가 대부분 CRT 텔레비전의 안전한 영역에 표시되므로 이미지가 잘리지 않습니다. 이 해상도는 절대 변하지 않으므로, 아티스트는 이 이미지 크기를 참고 자료로 사용해야 합니다.

이 섹션에서는 다양한 스크린 모드가 제공하는 기능을 간략히 소개합니다.

두 시스템의 가장 큰 차이점은 SNES가 7가지 화면 모드로 배경 그래픽을 렌더링할 수 있다는 점입니다. SNES는 특정 스크린 모드에서 단일 하위 팔레트로 한 번에 스크린에 총 256가지 컬러를 렌더링할 수 있습니다. 가장 자주 사용되는 스크린 모드의 예는 다음과 같습니다.
- 모드 1: 이것은 SNES에서 가장 흔히 사용되는 화면 모드 중 하나입니다. 콘솔 기능을 평균적으로 가장 잘 보여줍니다. 모드 1은 3개의 배경 레이어를 허용하는데 그 중 2개에는 자체적인 16컬러 하위 팔레트가, 나머지 1개에는 4컬러 하위 팔레트가 있습니다.
- 모드 3: 이 모드는 일반적으로 타이틀 화면이나 스토리 화면과 같은 큰 정적 이미지에 사용됩니다. 이 게임은 두 개의 배경 화면을 자랑합니다. 첫 번째 방식은 256색 전체 서브 팔레트를 사용하고, 두 번째 방식은 16색 서브 팔레트를 사용할 수 있도록 합니다.
- 모드 7: 이 모드는 SNES의 주요 특징 중 하나였습니다. 대부분의 SNES 콘솔 홍보 자료에 등장한 모드 7을 통해 최초로 가정용 콘솔이 실시간으로 이미지를 변환하여 배경 평면에서 이미지 확대/축소, 회전, 늘이기, 왜곡이 가능하게 되었습니다. 이 기술은 SNES용 레이싱 게임과 비행 게임에서 흔히 볼 수 있는 유사 3D 효과를 만드는 데 사용되었습니다.
모드 7의 단일 배경 평면은 여러 기능을 수행하기 위해 나머지 스크린 모드와 다른 방식으로 처리됩니다. 먼저, 작업할 수 있는 256컬러 배경 평면이 하나밖에 없기 때문에 모든 스프라이트는 배경 평면의 하위 팔레트와 컬러를 공유합니다. 다음으로, SNES의 일반 화면 크기를 사용하는 대신, 모드 7 배경 평면은 1024x1024 픽셀 크기입니다. 하지만 디자이너가 원하는 크기에 맞게 스크린을 조정할 수 있습니다.

배경 화면 모드의 복잡성에 비하면 스프라이트에 대한 규칙은 비교적 간단합니다. SNES는 메가 드라이브처럼 여러 가지 스프라이트 모드를 지원하지만, 게임 전체에서 최대 두 가지 스프라이트 모드만 사용할 수 있다는 엄격한 제한이 있습니다.
스프라이트의 크기는 8x8, 16x16, 32x32 또는 64x64일 수 있습니다. 디자이너는 사전 설정된 스프라이트 크기 조합 목록에서 크기를 선택해야 합니다. SNES의 게임에 허용되는 크기 조합은 다음과 같습니다.
- 8x8, 16x16
- 8x8, 32x32
- 8x8, 64x64
- 16x16, 32x32
- 16x16, 64x64
- 32x32, 64x64
일단 크기를 선택하면 "고정"되며, 게임 내 모든 스프라이트는 이 크기를 따라야 합니다. SNES는 하나의 수평 래스터 라인에 32개의 스프라이트를 동시에 렌더링할 수 있지만 한 번에 스크린에 나타날 수 있는 총 스프라이트 수는 128개에 달합니다. 그 외의 내용은 화면에 표시되지 않습니다.

스프라이트에 16컬러의 하위 팔레트 8개를 사용할 수 있습니다. 모든 레트로 콘솔과 마찬가지로, 모든 하위 팔레트의 첫 번째 컬러는 투명도를 결정하는 공통된 컬러입니다. 다른 콘솔에 비해 훨씬 더 많은 하위 팔레트를 제공하므로 스프라이트 색상을 선택할 때 더 큰 자유를 누릴 수 있습니다. 단, 색상 수는 256색으로 엄격하게 제한된다는 점만 명심하시면 됩니다.
Unity 최신 버전에 포함된 2D 픽셀 퍼펙트 기능을 사용하여 8비트와 16비트 레트로 게임을 제작하는 방법에 관한 포스팅이 도움이 되었기를 바랍니다.
Unity 2019.3 버전에서는 정식 제작에 2D 픽셀 퍼펙트의 사용 가능성을 확인하고, 시네머신 2D와의 호환성도 개선할 예정입니다.
여러분의 2D Pixel Perfect 프로젝트가 어떻게 진행되었는지 알려주시고, Unity 커뮤니티 및 2D 개발팀과 소통하려면 2D 포럼을 방문하는 것도 잊지 마세요.
