다른 플랫폼을위한 게임은 어떻게 만들어 집니까?


9

다른 플랫폼을위한 게임은 어떻게 만들어 집니까?

예를 들어 Call of Duty : Modern Warfare 3은 PS3, Xbox 360, Wii 및 PC에서 사용할 수 있습니다.

공통 코드없이 완전히 다시 프로그래밍 되었습니까? 중간 코드가 있습니까?


3
일반적으로 모든 것은 C ++로 이루어지며 플랫폼 관련 사항은 몇 가지 클래스로 강등됩니다.
ashes999

답변:


11

대부분의 프로덕션 레벨 게임 엔진에는 하드웨어 추상화 계층이 있습니다. 이것은 게임 엔진이 어떤 하드웨어인지 알 필요없이 하드웨어와 통신하는 데 사용할 수있는 일반적인 API입니다. SoundManager.PlaySFX (SFX_ID) 등을 호출합니다. 그러나 사운드 관리자 아래에는 실제로 어떤 하드웨어가 작동하는지 알고 사운드 효과를 재생하기 위해 적절한 호출을합니다.

이를 통해 해당 추상화 계층을 사용하여 엔진을 개발할 수 있으므로 추상화와 일치하는 하드웨어에 API가 제공되는 경우 모든 시스템에서 엔진을 실행할 수 있습니다. 편집 : Johnathan이 지적했듯이 실행하려는 각 플랫폼의 API가 필요합니다. 그리고 Trevor의 요점에 따르면, 높은 메모리 시스템에서 낮은 메모리로 이동할 때 (나를 위해 PS3에서 PSP까지) 다른 하드웨어 제한을 해결해야 할 수도 있습니다. 운 좋게도 플랫폼으로 인해 전체 시스템을 다시 작성하지 않아도되었지만 발자국을 적게 차지하도록 객체를 살펴보고 최적화해야했습니다.

다른 측면은 텍스처 또는 모델 등의 해상도가 다른 예술 분야에 있습니다. 게임의 자산은 특정 대상을 향해 구축 될 수 있으므로 PC는 PS3 등이 지원하는 특정 형식으로 바뀌면서 사운드 효과를 위해 WAV 파일을 가져옵니다.

도움이 되었기를 바랍니다.


1
여기에 대부분의 경우 PC / PS3 / Xbox360은 하나의 공통 코드베이스를 공유하고 Wii ​​/ PS2 / PSP는 다른 코드베이스를 공유합니다. 게임 보이는 자체적으로 별도의 코드베이스를 가지고 있으며 iPhone / Android는 일반적으로 코드베이스를 공유합니다. 이는 주로 광범위한 처리 능력, 사용 가능한 메모리 및 다양한 플랫폼의 그래픽 기능 때문입니다. 한때 Xbox 360에서 PS2로 게임을 포팅해야했습니다. 사용할 수있는 많은 RAM이 있다고 가정했기 때문에 원래 코드의 일부만 프로세스에서 살아 남았습니다. 적은 메모리를 사용하기 위해 다시 작성해야했습니다.
트레버 파월

+1, 플랫폼마다 HAL이 다르다고 명시 적으로 언급하지 않았습니다 (Psykocyber가 답변 한 이유)-각 플랫폼마다 HAL이 필요하다고 덧붙일 수 있습니까? 또한 크로스 컴파일해야 할 때 ANSI C / ++를 사용해야 할 수도 있습니다.
Jonathan Dickinson

트레버 : 게임 보이? 젠장, 과거로 여행을

3

다른 답변은 이상적인 경우를 설명합니다. 대부분의 코드는 게임에 일반적이며 하드웨어 / 플랫폼 종속 부품에는 깨끗한 추상화 계층이 사용됩니다.

그러나 많은 게임은 아웃소싱 회사에서 포트를 가지고 있으며 코드가 크게 다릅니다. 이것은 콘솔에서 특히 그렇지만 Windows에서 OSX 또는 Linux 로의 포트에도 공통입니다.

콘솔에서는 하드웨어가 다르기 때문에 코어 렌더링의 전체 청크 (및 다른 시스템도 거의 없음)를 완전히 다시 작성해야합니다. OS API는 다르지만 모든 PC 하드웨어는 거의 동일하기 때문에 PC에서는 D3D와 OpenGL을 추상화 할 수 있습니다.

콘솔 공간에서 GPU 기능이 매우 다르고 문자 그대로 7 %를 얻기 위해 모든 마지막 성능 비율을 짜야하기 때문에 매우 효율적인 화려한 렌더링 엔진이 다른 콘솔로 직접 포팅하는 것이 불가능하다는 것을 알 수 있습니다. 현대 게임을 실행하는 오래된 하드웨어. XBox에서 가장 잘 작동하는 조명 패스가 PS3에서 엄청나게 느린 경우와 XBox의 PS3 도그에 가장 적합한 방법을 쉽게 찾을 수 있습니다. 다른 하드웨어 및 플랫폼의 차이 (예 : PS3의 SPU와 XBox의 3 코어 CPU)는 플랫폼에 의존하는 유일한 코드 경로로 단순한 씬 하드웨어 추상화 계층에 의존하기가 매우 어렵습니다.

각 플랫폼은이를 제대로 활용하기 위해 광범위한 전문 지식을 필요로하기 때문에 많은 게임에서 게임을 추가 플랫폼으로 가져 오기 위해서는 전문 아웃소싱 포팅 회사가 필요합니다. PC 공간에서는 콘솔 공간에있을 때 포트를 수행하는 솔로 개발자 (예 : 많은 Linux 게임 포트를 수행하는 Ryan "icculus"Gordon와 같은 경우가 많음; D3D를 GL로, Win32를 POSIX / SDL로 변경하는 작업은 보통) 모든 팀이 대규모 게임으로 대규모 포팅 작업을 수행하는 회사가 있습니다.

일부 플랫폼으로의 포트는 거의 완전한 재 작성 또는 자산 재 설계가 필요합니다. 예를 들어 외주 회사에서 수행 한 Call of Duty의 Wii 포트와 Wii의 매우 제한된 하드웨어의 제약 조건에 맞도록 아트 자산을 포함한 모든 것을 다시 수정해야했습니다. 예를 들어 Wii에는 쉐이더가 없으므로 동일한 엔진과 효과 / 재료를 재사용하는 것은 불가능했으며, 제한된 메모리와 CPU / GPU에는 더 작은 텍스처와 더 적은 디테일 모델, 게임 플레이 제한 등이 필요했습니다. 마찬가지로 모바일 플랫폼으로의 포트는 일반적으로 일반적으로 제 3자가 다시 작성합니다.

최신 엔진을 사용하면 플랫폼간에 쉽게 포팅 할 수 있지만 더 큰 게임은 여전히 ​​코드의 상당한 부분을 업데이트하고 더 많은 기능을 갖춘 PC 플랫폼 및 콘솔에서 더 제한된 플랫폼으로 변경하기 위해 많은 자산을 재실행해야합니다.


2

James 응답은 PC에만 관련되며 특정 플랫폼에서의 구현에는 적용되지 않습니다.
모든 엔진이 대부분의 게임 코드에 대한 플랫폼을 추상화하지만 플랫폼마다 일부 부품을 작성해야합니다. 여기에는 네트워크, 렌더링, 오디오, 장치 입력 및 비디오 출력을 포함한 모든 I / O가 포함됩니다.
Xbox와 PS3에서 Unreal의 렌더링 코드를 비교하십시오. Xbox는 Xbox DirectX 버전을 사용하지만 PS3는 libgcm을 사용합니다 (OpenGl 라이브러리가 너무 느림). 약간 단순화하기 위해 모든 플랫폼에서 게임 플레이 프로그래머는 "AudioSystem.PlaySound ( SoundName here ) "만 볼 수있는 반면, 각 플랫폼마다 내부적으로 작동하여 사운드 출력을 위해 플랫폼 API를 호출합니다.
자세한 내용은 Tatrad의 의견을 참조하십시오.


1
이것은 제임스가 말한 것과 정확히 같으며, HAL이 플랫폼마다 다르다고 언급하지 않았습니다.
조나단 디킨슨

실제로 HAL API가 제공되는 모든 시스템에서 실행될 것이라고 언급했지만 분명히 혼란을 야기했기 때문에 더 명확하게 만들었습니다. 또한 Mac 또는 Unix 시스템과 같은 OS를 사용하지 않는 한 PC의 코드를 다른 PC로 이식하지 마십시오. 대부분의 게임이 실행되는 Windows 환경의 경우 이미이를 처리하는 하드웨어 드라이버이며, 드라이버 호출을 통해 DirectX 또는 OpenGL 데이터 버퍼를 만들고 하드웨어는 거기에서 수행 할 작업을 알고 있습니다.
제임스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.