비디오 게임 프로그래밍

Video game programming

게임 개발의 하위집합인 게임 프로그래밍비디오 게임소프트웨어 개발이다.게임 프로그래밍은 시뮬레이션, 컴퓨터 그래픽, 인공지능, 물리, 오디오 프로그래밍, 입력 등 하나 이상의 영역에서 전문화뿐만 아니라 특정 언어소프트웨어 엔지니어링컴퓨터 프로그래밍에 상당한 기술을 필요로 한다.대규모 멀티플레이어 온라인 게임(MMOG)의 경우, 네트워크 프로그래밍, 데이터베이스 프로그래밍과 같은 추가 영역에 대한 지식이 필요하다.프로 게임 프로그래머들이 자주 참여하지만, 몇몇은 취미로 게임을 프로그램할 수도 있다.

개발공정

전문적인 게임 개발은 대개 게임 설계로 시작하는데, 그 자체로 몇 가지 가능한 기원을 가지고 있다.때때로 게임 개발 과정은 명확한 디자인을 염두에 두지 않고 일련의 실험으로 시작한다.예를 들어, 게임 디자이너인 Will Wright는 프로그래머들이 몇 가지 아이디어로 실험을 하도록 함으로써 심스의 개발을 시작했다.

프로토타이핑

프로그래머들은 종종 게임 플레이 아이디어와 특징의 프로토타입을 제작해야 한다.설계 문서가 완성되기 전에 사전 제작 중에 많은 프로토타이핑이 수행될 수 있으며, 설계가 지정하는 특징을 결정하는 데 도움이 될 수 있다.

프로토타입은 초기 설계를 위한 시간이 거의 없이 신속하게 개발되며, 대부분 개념 증명이나 아이디어 테스트의 역할을 한다.그들은 완벽하게 작용하지 않을 것으로 기대되지만, 때로는 이국적인 새로운 아이디어를 시도하도록 개발되었다.

게임 디자인

프로그래머의 주 업무는 게임 디자인을 개발하는 것이 아니지만, 프로그래머들은 게임 아티스트들처럼 디자인에 기여하는 경우가 많다.게임디자이너는 게임디자인을 위한 아이디어와 전략을 위해 제작자와 미술, 프로그래밍 리드 모두의 의견을 요청할 것이다.종종 리더가 아닌 위치에 있는 개인들도 카피라이터나 다른 프로그래머나 예술가들과 같이 기여한다.

프로그래머들은 종종 게임 디자인 문서를 면밀히 따른다.게임 개발이 진행됨에 따라, 프로그래밍의 한계와 새로운 기능이 발견되고 이용됨에 따라 설계 문서는 변경된다.

생산

제작 중에 프로그래머들은 게임 디자인 문서에 설명된 게임을 만들기 위해 많은 소스 코드를 만들 수 있다.그 과정에서 설계 문서는 제한에 맞게 수정되거나 새로운 기능을 활용하도록 확장된다.설계 문서는 매우 "살아있는 문서"로, 그 중 많은 부분이 프로그래머의 일정, 재능, 지략에 의해 좌우된다.

많은 프로그래머들이 게임 내용에서 발언권을 가지고 있는 반면, 대부분의 게임 제작자들은 게임 프로그래밍 개발의 상태에 대해 리드 프로그래머에게 의견을 구한다.리드는 게임 프로그래밍의 모든 면을 파악하고 한계를 지적하는 역할을 한다.또한 수석 프로그래머는 프로그래머가 구현하고자 하는 가능한 기능에 대한 제안을 전달할 수 있다.

오늘날의 시각적으로 풍부한 컨텐츠로, 프로그래머는 미술 스태프와 자주 교류해야 한다.물론 이것은 프로그래머의 역할에 달려있다.예를 들어, 3D 그래픽 프로그래머는 전략과 디자인 고려사항을 논의하는 게임의 3D 모델러들과 나란히 작업해야 하는 반면, AI 프로그래머는 아트 스태프와 거의 상호작용을 하지 않아도 될 수 있다.예술가들과 수준 디자이너들이 그들의 임무를 수행하는 것을 돕기 위해, 프로그래머들은 자원봉사를 하거나 도구와 유틸리티를 개발하도록 요청 받을 수 있다.이들 중 다수는 특정 목적을 위한 것일 수도 있고 시간 제약으로 인해 버그가 발생할 수 있으며(이러한 도구의 개발 시간은 게임 일정에 포함되지 않는 경우가 많다) 어차피 사내용이기 때문이다.많은 게임 도구들이 RAD 언어로 개발되어 더 빠른 개발을 위해 개발되고 있으며, 게임이 완료된 후 폐기될 수도 있다.

테스트

전문 게임 테스터들이 수행하는 공식적인 품질 보증 테스트 과정은 게임 개발로 잘 시작된다.고예산 타이틀은 첫 번째 플레이 가능한 알파로 테스트를 시작할 수 있고, 저예산 및 캐주얼 게임은 출시 후보가 준비될 때까지 테스트에 들어가지 않을 수 있다.프로그래머의 임무는 QA팀이 발견한 오류와 버그를 수정하는 것이다.

완료 임박

최종 작업에는 프로그래머가 테스트의 마지막 단계에서 발생할 수 있는 사소한 버그에서 치명적인 버그에 이르기까지 때때로 버그를 수정하는 것과 같은 게임 "폴링"이 포함된다.

게임 개발자들은 베타 테스트 기간을 가질 수 있지만, 그러한 정의는 개발자마다 다르다.종종 베타에는 게임의 모든 기능이 포함되어 있지만, 몇 개의 버그나 불완전한 내용이 있을 수 있다.예를 들어, 게임 서버의 스트레스 내성을 측정하기 위해 공개 베타 기간이 주어지는 게임은 거의 없다.

게임이 완성되었다고 판단되면 "황금"이 되어 출판사로 발송된다고 한다.상황에 따라 출판사는 자신의 품질 보증을 받게 되거나 골드 마스터로부터 게임을 압박하기 시작할 수 있다.

유지 관리

일단 게임이 출하되면, 비디오 게임의 정비 단계가 시작된다.프로그래머들은 가능한 한 많은 버그 보고서를 얻기 위해 기간을 기다린다.일단 개발자가 충분한 피드백을 얻었다고 생각하면, 프로그래머들은 패치 작업을 시작한다.이 패치는 개발하는데 몇 주 또는 몇 달이 걸릴 수 있지만, 대부분의 버그와 게임의 문제를 해결하기 위한 것이다.때때로 패치는 추가적인 특징이나 콘텐츠를 포함할 수도 있고 심지어 게임 플레이를 바꿀 수도 있다.

기간

대부분의 현대 게임들은 완성하는데 1년에서 3년이 걸린다.개발 기간은 여러 요소, 도구, 하드웨어에 따라 다르지만 게임 디자인의 초기 단계를 제외한 개발의 모든 단계에 걸쳐 프로그래밍이 필요하다.

도구들

다른 소프트웨어와 마찬가지로 게임 개발 프로그램도 컴파일러에 의해 소스 코드에서 실제 프로그램(실행 프로그램이라고 함)으로 생성된다.소스 코드는 거의 모든 텍스트 편집기로 개발할 수 있지만, 많은 전문 게임 프로그래머들은 완전한 통합 개발 환경을 사용한다.다시 한 번 말하지만, 어떤 IDE를 사용하는지는 대상 플랫폼에 따라 다르다.

IDE 외에도, 많은 게임 개발 회사들은 사내에서 사용하기 위해 개발된 맞춤형 도구를 만든다.이 중 일부는 프로토타입과 자산 전환 도구(예: 아트워크를 게임의 사용자 정의 형식으로 변경하는 프로그램)를 포함한다.레벨 에디터와 같은 일부 사용자 지정 도구는 게임과 함께 제공될 수도 있다.

게임 개발 회사들은 종종 프로그래머들이 최고의 도구를 잘 갖추도록 하기 위해 기꺼이 수천 달러를 쓰려고 한다.잘 적응한 프로그래머는 2~3개의 개발 시스템과 그들의 사무실이나 칸막이를 지배하는 다중 모니터를 가질 수 있다.

프로그래밍 언어

언어 특징들
조립 잠재적으로 최소 CPU 오버헤드
C 널리 알려져 있고, 널리 휴대 가능하며, 수많은 API가 기계 코드로 컴파일됨
C++ 객체 지향, 널리 알려진 수많은 API, 기계 코드로 컴파일
자바 객체 지향, 가비지 수집, 광범위한 이동 가능(가상 머신 사용)
C#, Visual Basic.NET 객체 지향, 가비지 수집, Microsoft 제품과의 인터페이스
목표-C, 스위프트 객체 지향, Apple 제품과의 인터페이스
Lua, Python, JavaScript, Tcl 등. 위의 언어에 쉽게 포함되어 스크립팅에 자주 사용되는 친숙한 구문
리스프, 파스칼, , 스몰토크 인기 있는 도서관에 바인딩하는 것이 일반적이지만, 프린지 게임 언어

게임의 초기 디자인이 합의되면 개발 언어가 결정되어야 한다.선택은 프로그래밍 직원의 언어 친숙성, 대상 플랫폼, 실행 속도 요건 및 사용 중인 게임 엔진, API 또는 라이브러리의 언어와 같은 많은 요인에 따라 달라진다.

개인용 컴퓨터의 경우, 선택한 언어는 선호도에 지나지 않을 수 있다.SDL, 알레그로 등 인기 도서관의 언어 바인딩이 널리 퍼져 있으며,[1][2] 현대 컴파일된 언어로 작성된 관용적 코드와의 성능 차이는 미미하다.[3][4]가장 인기 있는 언어는 대개 절차적 또는 객체 지향적이며 컴파일러(: C,[5] C++,[5][6] Java)를 통해 구현된다.[7]그러나 개발자들은 운영 체제와의 인터페이스와 온라인 비디오 게임의 역엔지니어링을 위한 복원력 같은 도메인 고유의 특징들을 고려할 수 있다.[8]많은 게임들이 하나의 언어로만 쓰여지지 않고, 두 개 이상의 언어를 결합할 수도 있다. 예를 들어, 인기 있는 게임 엔진인 유니티에는 C, C++, C#로 쓰여진 다른 작품들이 있다.

콘솔의 경우, 대상 플랫폼의 지원은 일반적으로 가장 고려되는 요소다.과거에는 콘솔용 비디오 게임이 저장과 처리 속도 측면에서 자원이 제한되어 거의 독점적으로 작성되었다.[9]그러나 기술이 발전함에 따라 콘솔에서 게임 개발을 위한 옵션도 발전하게 되었다.닌텐도,[10] 마이크로소프트, 소니[11] 각각 Wii U, 닌텐도 스위치, Xbox One, PlayStation 4 콘솔을 위한 서로 다른 SDK를 가지고 있다.

고급 스크립팅 언어는 원래 개발자와 게임을 조작하고자 하는 모든 사람의 편의를 위해 컴파일된 프로그래밍 언어로 작성된 기본 게임의 확장자로 점점 더 많이 사용되고 있다.루아는 API가 ANSI C로 작성되고 언어가 다른 어플리케이션에 내장되도록 설계되어 있어 매우 인기 있는 선택이다.[6][12]id Software's DeinC, Epic Games' UnrealScript와 같이 많은 개발자들이 그들의 게임에 대한 맞춤 언어를 함께 만들어냈다.

API 및 라이브러리

게임 프로그래밍에서 중요한 결정은 API라이브러리를 사용할 것인가이다.오늘날, 게임 프로그래밍의 주요 업무를 처리하는 수많은 도서관이 있다.일부 라이브러리는 사운드 처리, 입력 및 그래픽 렌더링을 처리할 수 있다.일부는 심지어 길찾기와 같은 일부 AI 업무를 처리할 수도 있다.심지어 게임 프로그래밍의 대부분의 업무를 처리하고 코딩 게임 논리만 요구하는 전체 게임 엔진도 있다.

어떤 API와 라이브러리를 선택하는지는 주로 대상 플랫폼에 달려 있다.예를 들어, 플레이스테이션 2 개발을 위한 라이브러리는 마이크로소프트 윈도우에 사용할 수 없으며 그 반대의 경우도 마찬가지일 수 있다.그러나 크로스 플랫폼 개발을 허용하거나 용이하게 하는 게임 프레임워크가 제공되어 프로그래머들은 하나의 언어로 게임을 프로그래밍할 수 있으며 Wii, PlayStation 3, Xbox 360, PSP, Microsoft Windows와 같은 여러 플랫폼에서 게임을 실행하게 한다.

그래픽 API

운영 체제 전체의 그래픽 API 사용:
OS 불칸 다이렉트X GNMX 금속
윈도 10 아니요. 아니요.
몰텐VK 아니요. 아니요.
리눅스 아니요. 아니요. 아니요.
안드로이드 아니요.
iOS 몰텐VK
타이젠 데브에 아니요. 아니요. 아니요.
돛새치 데브에 아니요. 아니요. 아니요.
엑스박스 원 아니요. 아니요. 아니요. 아니요.
Orbis OS(PS4) 아니요. 아니요. 아니요. 아니요.
닌텐도 스위치 아니요. 아니요. 아니요.

오늘날 그래픽은 대부분의 게임에서 중요한 정의 기능이다.1990년대 중반까지 출시된 게임의 경우 2D 그래픽이 표준이었지만, 현재 대부분의 AAA 게임은 문명 III와 같이 자연에서 주로 2D인 게임에서도 완전한 3D 그래픽을 자랑한다.그러나 순수하게 2D 그래픽은 인디게임으로 르네상스를 경험했다.[13]

잘 구축된 개인용 컴퓨터 플랫폼은 마이크로소프트 윈도다.판매된 PC의 거의 90%에 사전 설치되었기 때문에, 현재 가장 큰 사용자 기반을 가지고 있다.[citation needed]마이크로소프트 윈도용 가장 인기 있는 3D 그래픽 API 두 가지는 Direct3DOpenGL이다.각 API의 장단점은 윈도 게임 프로그래머들 사이에서 뜨겁게 논의되고 있다.

현재 가장 인기 있는 컴퓨팅 플랫폼은 구글 안드로이드다.판매되는 스마트폰의 약 80%에 사전 설치되기 때문에 안드로이드의 사용자 기반은 두 번째로 넓어지고 있다.안드로이드는 OpenGL ES & 벌칸(API)을 사용한다.

DirectX는 게임 API의 모음입니다.Direct3D는 DirectX의 3D API이다.DirectX API의 나머지 부분과 마찬가지로 Microsoft에서 Direct3D를 자유롭게 사용할 수 있다.마이크로소프트는 게임 프로그래머들을 위해 DirectX를 개발했고 API에 기능을 계속 추가하고 있다.DirectX 사양은 공개 중재 위원회에 의해 제어되지 않으며 마이크로소프트는 자유롭게 기능을 추가, 제거 또는 변경할 수 있다.Direct3D는 휴대성이 없으며 Microsoft Windows용으로 특별히 설계되었으며 다른 플랫폼은 없다(Microsoft의 Xbox, Windows Phone 7.5 스마트폰 및 Pocket PC 운영 체제를 실행하는 모바일 장치에서 Direct3D의 한 형태가 사용됨).

OpenGL은 휴대용 API 사양이다.OpenGL로 작성된 코드는 호환되는 구현이 가능한 플랫폼 간에 쉽게 포팅된다.예를 들어, OpenGL을 사용하는 지진 II는 게임 팬에 의해 윈도우에서 리눅스로 포팅되었다.OpenGL은 OpenGL ARB(Architecture Review Board)에서 관리하는 표준이다.ARB는 최신 3D 하드웨어의 기능에 대한 새로운 지원을 추가하여 표준을 업데이트하기 위해 정기적으로 모임을 갖는다.표준에 기반을 두고 있고 가장 오랜 시간이 걸리기 때문에 OpenGL은 전 세계 대학대학에서 사용하고 가르치고 있다.[citation needed]또 일부 비디오 게임기(닌텐도 게임큐브, 닌텐도 DS, PSP 등) 제조사가 제공하는 개발 도구는 OpenGL과 유사한 그래픽 API를 사용한다.OpenGL은 영구적인 개발 팀의 부재와 표준이 발표된 후 구현이 개발을 시작해야 한다는 요구사항 때문에 기능 업데이트에서 종종 뒤처진다.이를 사용하기로 선택한 프로그래머는 비표준화된 확장을 통해서만 일부 하드웨어의 최신 3D 기능에 액세스할 수 있다.이 문제에 대응하기 위해 OpenGL 아키텍처 검토 위원회(ARB)가 규격에 대한 통제를 크로노스 그룹에 넘기면서 향후 상황이 달라질 수 있다.[14]

기타 API

Microsoft Windows에서 개발하기 위해 DirectX의 다양한 API를 입력, 음향 효과, 음악, 네트워킹 및 비디오 재생에 사용할 수 있다.이러한 작업을 수행하기 위해 많은 상업용 라이브러리를 이용할 수 있지만, DirectX는 무료로 이용할 수 있기 때문에 가장 널리 사용되고 있다.

콘솔 프로그래밍을 위해, 콘솔 제조업체들은 그래픽과 게임 개발의 다른 업무를 렌더링하기 위한 시설을 제공한다.콘솔 제조업체들은 또한 완전한 개발 시스템을 제공하는데, 이 시스템 없이는 합법적으로 게임을 마케팅하거나 개발할 수 없다.제3자 개발자는 이러한 업무 중 하나 이상의 업무에 대해 개발을 용이하게 하거나 교차 플랫폼 개발 능력 등 특별한 혜택을 제공하는 툴킷이나 도서관도 판매한다.

게임 구조

프로그래밍 관점에서 어떤 게임의 중심 요소는 게임 루프다.게임 루프는 사용자의 입력이나 부족에 관계없이 게임을 원활하게 진행할 수 있게 해준다.

대부분의 전통적인 소프트웨어 프로그램들은 사용자 입력에 반응하고 그것이 없으면 아무것도 하지 않는다.를 들어 워드프로세서는 단어와 텍스트를 사용자 유형으로 포맷한다.사용자가 아무 것도 입력하지 않으면 워드프로세서는 아무 것도 하지 않는다.일부 기능은 완료하는 데 오랜 시간이 걸릴 수 있지만, 모든 기능은 사용자가 프로그램에게 무언가를 하도록 지시함으로써 시작된다.

반면에 게임은 사용자의 입력과 상관없이 계속 작동해야 한다.게임 루프는 이것을 허용한다.고도로 단순화된 게임 루프(가명)는 다음과 같이 보일 수 있다.

(사용자가 종료되지 않음) 사용자 입력 실행을 확인하는 동안 AI 이동 적성 충돌 해결 그래픽 재생 소리 종료

루프는 게임 개발이 진행됨에 따라 세련되고 변형될 수 있지만, 대부분의 게임은 이러한 기본적인 생각에 근거한다.[15]

게임 루프는 그들이 개발한 플랫폼에 따라 다르다.예를 들어, DOS를 위해 작성된 게임과 많은 콘솔은 제한 없이 사용 가능한 처리 자원을 지배하고 이용할 수 있다.그러나 마이크로소프트 윈도와 같은 현대적인 PC 운영체제용 게임은 프로세스 스케줄러의 제약조건 안에서 동작해야 한다.어떤 현대 게임들은 예를 들어, 캐릭터 AI의 계산이 게임 내에서 부드러운 움직임의 생성으로부터 분리될 수 있도록 다중 스레드를 실행한다.이것은 오버헤드를 증가시킨다는 단점을 가지고 있지만, 게임은 하이퍼스레딩 또는 멀티코어 프로세서와 멀티프로세서 플랫폼에서 더 부드럽고 효율적으로 실행될 수 있다.컴퓨터 업계가 더 많은 스레드를 실행할 수 있는 코어가 더 많은 CPU에 집중하면서, 이것은 점점 더 중요해지고 있다.Xbox 360PlayStation 3과 같은 콘솔은 이미 프로세서당 두 개 이상의 코어를 가지고 있으며 코어당 두 개 이상의 스레드를 실행한다.

취미로 하는 사람들

취미 활동가들이 프로그램 할 수 있는 유일한 플랫폼은 안드로이드, iOS, 윈도, 맥, 리눅스 등과 같은 소비자 운영 체제뿐이다.게임기 개발은 수천 달러가 드는 특수 개발 시스템을 필요로 하기 때문이다.종종 이러한 것들은 콘솔 제조업체로부터 얻어야 하며 전문 게임 개발 스튜디오에만 판매되거나 임대된다.하지만 마이크로소프트는 게임 개발 프레임워크인 XNA를 배포하곤 했는데 XNA는 단종되었지만, 모노게임샤프DX와 같은 다른 프로젝트들은 게임 코딩을 위해 동일한 접근을 허용하려고 하고 있다.최근 안드로이드는 모바일 개발자들에게 가장 인기 있는 취미 생활 플랫폼이다.[16]일부 취미 활동가들은 홈브루 게임, 특히 핸드헬드 시스템이나 변형된 콘솔을 개발하기도 한다.

일부 소프트웨어 공학 학생들은 프로그래밍 언어운영 체제를 배우기 위한 연습으로 게임을 프로그램한다.

일부 취미 활동가들은 Adobe Animate, Unity, Android Studio, pygame, Adventure Game Studio, GameMaker Studio, Godot, Unreal Engine, Pixel Game Maker MV 또는 Construct와 같은 게임 개발에 도움이 되는 소프트웨어 패키지를 사용할 수 있다.

참고 항목

참조

  1. ^ "SDL Language Bindings". Retrieved 2015-11-08.
  2. ^ "Allegro - Language bindings". Retrieved 2015-11-08.
  3. ^ Corlan, Alexandru-Dan (2003). "Programming language benchmarks". Retrieved 2015-11-08.
  4. ^ Corlan, Alexandru-Dan (2011-06-11). "Programming Languages Benchmarks". Retrieved 2015-11-08.
  5. ^ a b Corlan, Alexandru-Dan (2011). "Game Programming in C and C++". Retrieved 2015-11-08.
  6. ^ a b DeLoura, Mark (2009-03-05). "The Engine Survey: General results". Retrieved 2015-11-08.
  7. ^ Corlan, Alexandru-Dan. "LWJGL - Projects". Archived from the original on 2015-11-10. Retrieved 2015-11-08.
  8. ^ 'No Bugs' Hare (30 November 2015). "Chapter V(b) from "Development&Deployment of MMOG"".
  9. ^ Hyde, Randy (1985). Using 6502 Assembly Language.
  10. ^ Helgason, David (November 2, 2012). "Game developers, start your Unity 3D engines". GamesBeat (Interview). Interviewed by Dean Takahashi. VentureBeat. Retrieved July 13, 2014.
  11. ^ "[Phoronix] Why Sony Is Using LLVM/Clang On The PlayStation 4". Phoronix.com. Retrieved 17 November 2014.
  12. ^ Corlan, Alexandru-Dan (2015-03-24). "Lua: Uses". Archived from the original on 2019-07-24. Retrieved 2015-11-08.
  13. ^ "Why Are Most Indie Games 2D Instead of 3D?". Rampant Games. 2013-05-16. Retrieved 2017-01-01.
  14. ^ "Khronos Places OpenGL and OpenGL ES Conformance Tests into Open Source". Khronos Group Press Release. Archived from the original on 2008-05-03.
  15. ^ Stutz, Michael (2001). Programming Linux Games, Chapter 1. ISBN 1-886411-48-4.
  16. ^ "Report: 79% Of Mobile Developers Prefer To Build For Android". 29 August 2016.

외부 링크

위키