카테고리 보관물: 게임개발

게임개발

모든 게임은 각 프레임을 그려서 만들어 집니까? 업데이트를 그리는 것입니다.

컴퓨터 애니메이션 (게임용)에 대해 배우는 초보자입니다. 지금까지 내가 찾은 유일한 방법은 각 프레임, 모든 프레임 업데이트를 그리는 것입니다. 따라서 모든 프레임이 시작될 때 전체 프레임이 지워지고 해당 프레임에 필요한 항목이 다시 그려집니다.

내 질문은이 방법이 애니메이션과 게임을 만드는 데 사용되는 유일한 방법인지 여부입니다. 조금 비효율적 인 것 같습니다. 또한이 방법이 3D 게임에서 어떻게 작동하는지 이해하지 못합니다 . 누군가 이것을 더 자세히 설명해 주시겠습니까?



답변

아주 오래된 게임에서는 프레임의 일부만 다시 그려 해당 프레임에서 변경된 기술을 사용했습니다. 내가 기억할 수있는 게임 “Little Big Adventure”는이 기술 (1994)을 사용합니다. 그러나 게임에는 대부분 정적 카메라가 있다는 것을 알 수 있습니다. 보이는 영역 밖으로 이동할 때만 장면이 다시 그려집니다. 게임을하면 해당 프레임에서 약간의 지연이 발생합니다. 최신 게임 엔진이 장착 된 최신 GPU에서 상황이 변경되었습니다. 각 프레임마다 모든 것이 다시 그려집니다. 렌더링 기술에 따라 사물이 여러 번 렌더링 될 수도 있습니다. GPU를 올바르게 사용하면 GPU의 컴퓨팅 성능이 엄청나게 높아집니다. 그러나 재사용이 일어나고 있습니다. 예를 들어 엔진은 5 번째 프레임마다 섀도 맵을 업데이트하기로 결정할 수 있습니다. 또는 광원에 변화가없는 한 조명이 업데이트되지 않습니다.


답변

아니.

최소한 벡터 디스플레이를 사용한 70 년대의 오래된 게임을 포함하는 경우.

예를 들어, 널리 알려진 게임 소행성 (Asteroids)은 원래 그래픽을 화면에 렌더링하는 근본적으로 다른 방식 인 벡터 디스플레이 용으로 개발되었습니다.

벡터 모니터는 1970 년대 후반에서 1980 년대 중반까지 소행성, 폭풍우, 스타 워즈와 같은 아케이드 게임에서도 사용되었습니다. 비디오 게임 아케이드에서 사용되는 기술을 설명하기 위해 Quadrascan이라는 용어를 사용했습니다.

https://ko.wikipedia.org/wiki/Vector_monitor

현대 그래픽은 래스터 리자 톤을 위해 거의 100 % 만들어졌으며, 그래픽 버퍼의 내용을 매 프레임마다 디스플레이에 씁니다.


답변

가장 낮은 수준에서 컴퓨터의 그래픽 프로세서는 실제로 각 프레임을 처음부터 계산하여 화면으로 보냅니다. 그러나 저수준의 물건을 직접 관리하는 경우에만 노출됩니다. [1] 그러나 모든 그래픽 (및 그와 함께 게임) 엔진이 이러한 것들을 처리하므로 장면을 자유롭게 표현할 수 있습니다. 프레임 사이에서 수정할 수 있지만 영구적 일 수있는 여러 엔티티 측면에서

…이 방법이 3D 게임에서 어떻게 작동하는지 …

3D 공간의 요소는 지속되며 그래픽 엔진은 다시 발생하는 모든 변경 사항 (카메라 이동 등)에 대해 화면의 이미지를 다시 계산합니다.

[1] … 예를 들어 OpenGL과 같은 방식으로 자신의 엔진을 작성하는 경우 [2] 이 경우에도 프레임간에 지속적인 것을 저장할 수 있습니다.

[2] 현재 기술 수준의 옵션 이 아닙니다 .


답변

짧은 대답 : 아니요.

긴 이야기:

학교에서 게임 프로그래밍을 배웠을 때, 우리는 다음을 수행하도록 배웠습니다.

게임에서 원하는 fps 속도를 결정하십시오 (예 : 30).

각 간격마다 카운터에 1을 추가하는 코드를 작성하십시오 (30fps의 경우 33msec). 이 코드는 게임 루프와 동시에 실행됩니다.

그런 다음 게임 계산을 수행하는 게임 루프 (게임 상태 업데이트)는 각 프레임마다 동일한 카운터를 1 씩 줄입니다. 그러나 그래픽 계산 및 화면으로 그리기는 카운터가 0 인 경우에만 수행됩니다.

결과적으로 그래픽 프레임 속도는 CPU가 게임에서 계산을 얼마나 잘 처리하는지에 따라 조정됩니다. 게임에서 너무 많이 발생하지 않으면 계산이 쉽고 그래픽 프레임 속도가 실제 게임 상태 업데이트보다 높습니다 (화면에서 동일한 게임 상태를 두 번 이상 그리기 때문에 기본적으로 사이클 낭비).

그러나 게임에서 많은 일이 일어나고 있으며, CPU는 더 많은 작업을해야하며 게임 상태 업데이트는 화면에 그리는 것보다 우선합니다.

대부분의 경우 게임은 의도 한 속도로 계속 업데이트되지만 화면에 각 업데이트가 표시되지 않기 때문에 “지연 한”것으로 나타납니다. 화면에 각 업데이트를 강제로 적용하기 때문에 전체 게임 속도가 느려지는 것이 좋습니다.

이것은 모두 C ++로 이루어졌으며 게임 엔진이나 그래픽 카드는 없었습니다. 모든 것이 단일 코어 CPU에서 실행되었습니다. 우리는 2D 그래픽을 위해 일부 라이브러리를 사용했습니다.


답변

비디오 게임이 매 프레임마다 디스플레이를 “그리기”여부를 말하기 전에 먼저 “그리기”의 의미를 정의해야합니다. 비트 맵을 처음부터 조립하여 모든 프레임을 그리는 것은 아닙니다. 실제로 많은 게임 플랫폼이 전체 비트 맵 전혀 조립하지 않습니다 .

비디오 게임이 디스플레이를 생성하기 위해 취할 수있는 몇 가지 방법이 있습니다. 매우 적은 수의 CPU는 CPU가 전자 빔을 켜고 끄거나 모든 픽셀 또는 벡터 스캔 게임의 경우 플롯 할 모든 도트의 XY 좌표를 설정합니다. 이 작업을 수행하는 대부분의 게임은 CPU가 충분히 빠르다는 것을 보여주기 위해 그렇게합니다. 보다 일반적으로 게임에는 CPU가없는 경우 일부 패턴의 픽셀 또는 벡터를 디스플레이에 반복적으로 출력하는 하드웨어가 있습니다. 이 패턴은 메모리 영역으로부터 순차적으로 데이터를 판독하고 각 비트 또는 비트 그룹을 픽셀 컬러로 해석함으로써 생성 될 수있다 (이를 비트 맵 디스플레이 라 함). 경우에 따라 하드웨어는 8×8, 16×16, 또는 디스플레이의 다른 크기 영역을 선택한 다음 해당 바이트를 사용하여 픽셀 데이터에 대해 읽을 메모리 범위를 선택합니다 (종종 문자 맵 디스플레이라고 함). 일부 하드웨어 플랫폼은 구성 가능한 위치로 여러 비트 맵 디스플레이를 오버레이 할 수 있습니다. 이것을 스프라이트라고합니다.

일부 플랫폼에서는 화면으로 전송되는 동안 디스플레이 패턴을 변경할 수 없지만 빔이 한 프레임 그리기를 완료 한 후 다음 프레임 그리기를 시작하기 전에 모든 업데이트를 수행해야합니다. 이러한 플랫폼에서 프레임에 표시 될 모든 항목은 해당 프레임을 시작하기 전에 디스플레이 하드웨어에로드해야하며 디스플레이는 한 번에 설정할 수있는 패턴을 표시하도록 제한됩니다. 프레임이 표시되는 동안 CPU가 실행을 중지 한 경우 동일한 프레임이 계속 표시됩니다. 다른 플랫폼에서는 패턴이 화면에 그려지는 동안 패턴을 변경하거나 재구성 할 수 있습니다. 이것은 비디오 회로 자체가 처리 할 수있는 것보다 훨씬 복잡한 화면을 보여줄 수있게합니다.

대부분의 개인용 컴퓨터 게임은 단일 비트 맵 화면을 그리도록 구성된 하드웨어를 사용하고 이미 존재하는 것과는 다른 것을 그 화면에 그리십시오. 때로는 특정 경우에 실제로 필요한지 여부에 관계없이 사물을 그리는 것이 더 쉬울 수 있지만 코드에서 화면의 일부를 변경할 이유가 없다는 것을 쉽게 알 수 있으면 해당 부분을 건너 뛰어 성능을 향상시킬 수 있습니다. 오늘날의 플랫폼은 종종 프레임이 진행되는 동안 전체 화면을 여러 번 그릴 수있을 정도로 빠르지 만 역사적으로는 그렇지 않았습니다. 예를 들어 Apple II 컴퓨터의 고해상도 화면에서 모든 픽셀을 작성하는 가장 빠른 코드는 두 개 이상의 프레임을 사용하고 Apple II 컴퓨터의 모든 픽셀을 복사하는 가장 빠른 코드입니다. 다른 버퍼의 고해상도 화면은 두 배가 걸립니다. 좋은 성능을 얻으려면 게임에서 실제로 변경된 내용 만 업데이트해야하며 이는 좋은 게임이 일반적으로 한 것입니다.


답변

간단히 말해서, 모든 프레임이 그려지는 것이 아니라 게임이나 게임 플레이의 이야기 또는 주제를 제시하는 데 필요한 프레임 만 있다고 말합니다. 또한 특정 인스턴스에서 일어나고 싶은 일의 타이밍이 중요합니다.


답변