지진 엔진

Quake engine
지진 엔진
개발자id 소프트웨어, (John Carmack, Michael Abrash, John Cash)
최종 릴리즈
1.09 / 1999년 12월 21일, 22년 전(1999-12-21)
저장소github.com/id-Software/Quake
기입처C, 어셈블리(소프트웨어 렌더링 및 최적화용)
플랫폼DOS, AmigaOS, Microsoft Windows, macOS, Linux, Amiga, PowerPC, 닌텐도64, RiscPC, Zeebo
전임자 엔진
후계자Quake II 엔진, GoldSrc
면허증.GNU GPL-2.0 이후
웹 사이트www.idsoftware.com Edit this on Wikidata

Quake 엔진은 id Software가 1996년 비디오 게임 Quake를 작동시키기 위해 개발한 게임 엔진입니다.진정한 3D 실시간 렌더링특징으로 하며 현재 GNU General Public License v2.0 이후 조건에 따라 라이센스가 부여되었습니다.

출시 후 수평 설계와 마찬가지로 즉시 포크되었습니다.엔진의 대부분은 퀘이크 II와 퀘이크 III 아레나에 남아 있었다.Quake 엔진Doom 엔진과 마찬가지로 BSP(Binary Space Partitioning)를 사용하여 월드 렌더링을 최적화했습니다.퀘이크 엔진은 또한 움직이는 물체에 구라우 음영을, 움직이지 않는 물체에 정적 라이트맵사용했다.

역사적으로 퀘이크 엔진은 후속 모델인 퀘이크 II 엔진과는 별개의 엔진으로 취급되어 왔다.그러나 이제 두 엔진 모두 ID Tech 2의 변형으로 간주됩니다.단, Quake와 Quake II의 코드베이스는 별개의 GPL [1][2]릴리즈였습니다.

역사

퀘이크 엔진은 1996년 6월 22일 발매된 비디오 게임 퀘이크용으로 1995년부터 개발되었다.John Carmack은 알고리즘과 어셈블리 최적화 분야에서 Michael Avrash의 도움을 받아 엔진의 프로그래밍을 대부분 수행했습니다.Quake II 엔진(ID Tech 2)이 이를 기반으로 했습니다.

John Romero는 처음에 Quake를 Sega AM23D 격투 게임 Virtua Fighter에서 영감을 얻어 완전한 3D 폴리곤 세계에서 벌어지는 액션 게임으로 생각했습니다.퀘이크는 또한 Virtua Fighter의 영향을 받은 3인칭 난투극모습을 보여주려고 의도되었다.그러나 ID Software는 이것이 위험하다고 판단하여 엔진을 개발하는 데 시간이 더 걸렸을 것입니다.프로젝트가 너무 오래 걸려서, 3인칭 난투극은 결국 [3][4]중단되었다.

엔진 설계 및 마일스톤

3D 복잡성을 줄여 속도 향상

지진 발생 시 지도의 복잡성을 줄이기 위한 간단한 프로세스

Quake는 3D 환경의 일부 요소를 사전 처리 및 사전 렌더링하는 특수 지도 설계 시스템을 사용한 최초의 진정한 3D 게임으로, 당시 50~75MHz CPU에서 게임을 실행할 때 필요한 처리량을 줄였습니다.게임이 진행되는 3D 환경을 평면적인 2D 공간이라기보다는 3차원이라고 한다.지도 편집기 프로그램은 환경을 구축하기 위해 크기를 조정하고 회전하는 브러시로 알려진 다수의 단순한 볼록형 3D 기하학적 객체를 사용합니다.브러시를 배치하고 방향을 지정하여 밀폐된 빈 볼륨 공간을 만들고 설계가 완료되면 렌더링 사전 프로세서를 통해 지도를 실행합니다.프리프로세서는 두 가지 유형의 빈 공간을 맵에서 찾는 데 사용됩니다. 즉, 게임을 플레이할 브러시로 둘러싸인 빈 공간과 플레이어가 볼 수 없는 브러시 밖의 빈 공간입니다.그런 다음 프리프로세서는 게임 공간 외부에 있는 개별 브러시의 뒷면을 제거하고 폐쇄된 게임 공간의 바깥 둘레를 정의하는 몇 개의 폴리곤만 남습니다.

일반적으로 지도를 전처리한 후에는 원래 브러시를 잘라서 일반 방식으로 다시 편집할 수 없습니다.대신 브러시와 함께 원래 지도 편집기 데이터가 유지되고 새 버전의 지도를 만드는 데 사용됩니다.그러나 특수 정점 편집기에서 지도를 열고 원시 정점 데이터를 편집하거나 개별 삼각형 면을 추가하거나 제거하여 지도를 편집할 수 있습니다.어렵기는 하지만, 이 기술은 부정 행위자들이 벽에 창을 만들고, 문과 벽 뒤에서 정상적으로 숨어있는 적들을 보기 위해 종종 사용되었으며, 최근 3D 게임에서 게임에서 사용된 각 파일의 체크섬을 계산하여 잠재적으로 해킹된 지도 파일을 사용하는 플레이어를 탐지하는 부정행위 방지 메커니즘을 만들었다.

처리된 지도 파일은 원래 처리되지 않은 지도보다 훨씬 낮은 폴리곤 수를 가질 수 있습니다(대개 50~80%).당시의 50~75MHz PC에서는 이 플루닝 스텝이 맵 상에서 완료되기까지 많은 시간이 걸리고, 맵 설계가 매우 복잡할 경우 밤사이 실행되는 것이 일반적이었습니다.

이 전처리 단계는 실내 게임 공간과 외부 빈 공간을 연결하는 작은 구멍이나 "누출"이 있으면 작동할 수 없고, 지도 설계자가 지도의 누수를 찾지 못해 복잡한 지도 구축 프로젝트가 포기되는 경우가 흔했다.누출을 방지하기 위해 브러시는 서로 겹치고 약간 상호 침투해야 합니다. 그리드에서 비정상적인 모양의 브러시 가장자리를 따라 완벽하게 정렬하려고 하면 찾기 어려운 매우 작은 틈이 생길 수 있습니다.

퀘이크 지도의 탁 트인 하늘은 실제로는 열려 있지 않지만, 큰 붓으로 덮여 있고, 특수 스카이 박스 텍스쳐로 텍스쳐 되어 있어, 구면 매핑을 사용하도록 프로그램 되어 있기 때문에, 어느 위치에서 봐도 항상 같은 모습을 하고 있기 때문에, 먼 하늘 같은 착각을 일으킵니다.

조명 및 그림자 사전 계산

Quake는 또한 과거의 게임에서 사용되던 섹터 기반의 정적 조명과는 달리 라이트맵과 3D 광원을 사용했다.id Software의 혁신은 Doom 3의 통합 조명섀도잉 모델로 전환되었지만 id Software는 이후 출시된 많은 3D 게임에 사용되었습니다(그러나 id Software는 RAGE에서 시작하여 라이트맵 또는 세미라이트맵 방식으로 다시 전환되었습니다.여분의 폴리곤의 맵이 제거된 후, 두 번째 전처리 시스템을 사용하여 라이트맵을 미리 계산하고 게임 맵에 베이킹하여 게임을 플레이할 때 CPU에 대한 부하를 더욱 줄였다.그러나 풀 라이트 처리에는 매우 오랜 시간이 걸릴 수 있기 때문에 초기 지도 설계 프로세스에서는 낮은 품질의 라이트 처리를 할 수 있지만 조명 주위에 들쭉날쭉한 계단식 라이트캐스트를 만드는 비용이 듭니다.

속도를 높이기 위해 지도 분할

3D 렌더링의 작업 부하를 더욱 줄이기 위해 플레이어가 현재 볼 수 없는 지도의 큰 영역을 분할하는 메커니즘이 개발되었습니다. 따라서 엔진이 이러한 보이지 않는 공간을 렌더링할 필요가 없습니다.이러한 최적화 기능이 없는 3D 렌더링 엔진은 세계 모든 부분을 그린 다음 가장 가까운 폴리곤을 판별한 다음 이러한 가장 가까운 폴리곤(Z 버퍼링이라고 알려진 기술) 뒤에 위치한 모든 폴리곤을 숨겨야 합니다.폴리곤이 표시되지 않는다고 해서 씬(scene) 계산에서 제외되는 것은 아닙니다.

Quake 엔진은 이 문제를 피하기 위해 특별히 최적화되었습니다.플레이어가 볼 수 없는 공간에 있는 모든 객체의 렌더링을 계산하지 않도록 미리 엔진에서 지시할 수 있으므로 CPU의 렌더링 부하가 크게 감소합니다.이 같은 효과는 큰 공간에서 다른 공간으로 이어지는 90도 급커브 형태의 작은 터널에서 두드러진다.이 작은 터널은 인접한 렌더링되지 않은 공간에 대한 뷰를 차단하는 역할을 하며, 이 터널 내에 특수 유형의 투명 브러시(비시)를 배치하여 엔진이 인접 공간의 렌더링을 중지해야 하는 가장자리를 정의합니다.원래 지진에서는 지도의 전체 길이로 볼 수 있는 것은 드물고 야외 공간은 매우 높고 좁으며, 주로 열린 하늘 위나 아래 용암으로 거리를 이용하여 저다각형 형태의 광활한 착각을 일으킨다.

섹션의 실행 방법

맵에서 바이너리 스페이스 파티션(BSP) 트리가 구축되어 주어진 폴리곤을 O(폴리곤 수)로 검색하는 복잡성이 간단해진다.각 잎은 3D 공간의 일부 영역을 만듭니다(파이를 임의의 조각으로 자른다고 상상해 보십시오).이진 트리의 잎에는 원래 지도의 폴리곤이 연관되어 있으며, 이 폴리곤은 각 영역의 가시성을 계산하는 데 사용됩니다.VSD 알고리즘은 각 영역에 대해 지도에서 가시선이 존재하는 부분을 찾습니다.이것을 PVS([5]Potsible Visible Set)라고 합니다.

이 프로세스에서는 O2 O서 n n 폴리곤의 수) 비트(가시/숨김 정보만 필요)가 필요하므로 대량의 메모리가 사용됩니다.John Carmack은 한 영역이 다른 영역의 극히 일부만을 인식한다는 것을 깨닫고 RLE(Run-Length Encoding)를 사용하여 이 정보를 압축했습니다.이것이 퀘이크의 복잡한 기하학이 그 시대의 하드웨어에 그렇게 빨리 그려질 수 있게 해준 것이다.

렌더링 및 렌더링 순서 고속화

과도한 드로잉을 줄이기 위해(이전 작업은 무용지물이고 낭비임을 의미하며 이전에 렌더링된 점을 숨기는 새로운 픽셀을 렌더링함) 환경을 먼저 전면에서 후면으로 표시했습니다.다른 벽에 가려진 벽의 일부를 숨기기 위해 글로벌 에지 리스트는 이미 렌더링된 폴리곤의 가장자리를 정렬했습니다. 새 폴리곤은 먼저 이전 모서리에 대해 잘려서 보이는 부분만 프레임 버퍼에 도달하도록 했습니다.

또한 BSP 트리와 Global Edge List에서 각 픽셀이 한 번만 렌더링되었기 때문에 환경을 렌더링하는 동안 z 버퍼는 채워졌지만 읽지는 않았습니다.ZBuffer는 나중에 환경에 의해 부분적으로 숨겨진 문자 및 기타 움직이는 개체를 올바르게 렌더링하는 데 사용되었습니다.

픽셀 렌더링 루프가 어셈블리에 구현되었습니다.텍스처 좌표의 투시 보정보간은 정수 레지스터의 수가 제한되어 부동소수점 단위를 사용하여 이루어졌으며, 또한 정수 보간과 병렬로 부동소수점 단위의 고가의 분할 연산(투시 보정의 일부)을 계산할 수 있습니다(즉, 무료로).

베이스 텍스처와 벽의 라이트 맵을 동시에 렌더링했습니다.즉, "서피스 캐시"는 새로운 표면을 만들고 있었습니다.이것은 베이스 텍스처와 라이트 맵 텍스처를 함께 구운 새로운 조명 텍스처입니다.몇 개의 프레임이 출시된 이후 사용되지 않은 지표면이며, 필요한 새 지표면이 동적으로 작성되었습니다.표면 생성은 보조 조명 패스보다 시간이 적게 소요되었습니다.메모리를 절약하기 위해 벽면 추가를 위해 원래 텍스처의 을 사용하여 작은 표면을 먼저 생성했습니다.

캐릭터가 서 있는 바닥의 조도에 따라 캐릭터는 주변 조명과 고정 거리 조명으로 조명되었다.가까운 글자는 구라우가 음영 처리되어 친근한 질감을 가지고 있는 반면, 먼 글자는 삼각형 [6]분할을 사용하여 그려졌습니다.

하드웨어 3D 액셀러레이션

Quake는 3D 하드웨어 가속을 지원하는 최초의 게임 중 하나입니다.처음에는 소프트웨어 렌더링만으로 출시되었지만, John Carmack은 Rendition의 Vérité 1000 그래픽 칩(VQuake)을 활용한 Quake 실행 파일을 만들었습니다.OpenGL 지원은 Windows 95 이상용 GLQuake 실행 파일 형태로 추가되었습니다.GLQuake를 렌더링할 수 있는 다른 카드로는 프로페셔널하고 매우 비싼 Intergraph 3D OpenGL 카드와 이후 PowerVR 카드가 있습니다.

소프트웨어 렌더링 엔진을 최적화하기 위해 공간에 가까운 폴리곤과 BSP 트리의 같은 리프에서 라이트맵을 공유했습니다.즉, 다중 텍스처 두 번째 장치를 다른 라이트맵으로 재구성해야 하므로 동일한 주 텍스처를 사용하는 폴리곤을 3D 가속과 동시에 렌더링할 수 없습니다.이 아키텍처 결정으로 하드웨어 가속 렌더링 [clarification needed]성능이 저하되었습니다.

네트워크 재생

Wake에는 LAN 또는 인터넷통한 협동 데스매치 멀티플레이 모드가 포함됩니다.나중에 mods를 사용하여 추가 멀티플레이어 모드가 추가되었습니다.

Quake 클라이언트-서버 모델을 사용하여 서버가 모든 게임 이벤트를 제어합니다.모든 플레이어는 참가하기 위해 이 서버에 접속하고 서버는 게임에서 무슨 일이 일어나고 있는지 클라이언트에 알립니다.서버는 전용 서버 또는 Listen 서버 중 하나입니다.후자의 경우에도 일부 다른 게임에서 사용되는 피어 투 피어 네트워킹과 달리 Quake는 여전히 클라이언트 서버 모델을 사용합니다.따라서 서버가 항상 최종 권한이기 때문에 서로 다른 클라이언트에서 발생하는 비동기 네트워크 게임에 시달릴 수 없습니다.

파생 엔진

Quake 엔진의 파생 모델을 나타내는 가계도

1999년 12월 21일 id Software의 John Carmack은 Quake 엔진의 소스 코드를 GPL-2.0 이후 조건에 따라 인터넷에 공개하여 프로그래머가 엔진을 편집하고 새로운 기능을 추가할 수 있도록 했습니다.프로그래머들은 곧 새로운 버전의 엔진을 인터넷에 공개했습니다.가장 잘 알려진 엔진은 다음과 같습니다.

  • Dark Places Engine – 여러 독립형 게임 Quake [7]모드에서 사용되는 대폭 수정된 엔진입니다.2014년 5월 13일에 마지막으로 안정 발매가 되었지만,[8] 이후로 SVN 저장소를 통해 수많은 업데이트를 받았습니다.이 홈페이지는 Icculus.org에서 호스팅되고 있으며, 2021년까지도 저장소를 호스팅했으며, 엔진이 GitHub에서 [9]호스팅되는 Git 저장소로 전환되었다.Team Xonotic은 게임이 개발 버전의 엔진과 함께 구축되고 배포되기 때문에 다양한 소셜 코딩[10][11] 플랫폼에 Dark Places 소스 코드의 미러를 제공합니다.
  • GoldSrc – 밸브에서 최초로 개발한 엔진.하프라이프 시리즈에 사용되어 소스 엔진을 만들었습니다.
  • vkQuake – (Quakespasm의 파생어)[12][13] GPLv2로 출시된 id Software 직원 Axel Gneiting이 프로그래밍한 렌더링에 Vulkan API를 사용합니다.

Quake 엔진을 사용한 게임

연도 제목 개발자 퍼블리셔
1996 흔들리다 id 소프트웨어 GT 인터랙티브
1997 지진 미션 팩 1호: 아마곤의 재앙 Hipnotic 인터랙티브 3D 영역
퀘이크 미션 팩 2호: 영원의 해체 로그 엔터테인먼트 3D 영역
헥센 II 레이븐 소프트웨어 id 소프트웨어, 액티비전
악의 래트루프 양자액세스
엑스맨: 아포칼립스의 파괴 무중력 엔터테인먼트 WizardWorks
1998 Hexen II 미션 팩: Praevus 포털 레이븐 소프트웨어 id 소프트웨어, 액티비전
2000 레이저 아레나 열차 파괴 스튜디오 밸류 소프트
2001 CIA 요원: 단독 미션 2015년 주식회사 트레인워크렉 스튜디오 밸류 소프트
도시 용병 모시핏 엔터테인먼트
2002 영원한 전쟁: 빛의 그림자 투 가이즈 소프트웨어 투 가이즈 소프트웨어
2005 넥서즈 알리엔트라프 알리엔트라프
2011 Xonotic 팀 Xonotic 팀 Xonotic
2021 (얼리 액세스) 둠브링거 아노믹 게임 아노믹 게임
2022 분노: 파멸의 이온 3D 영역 3D 렐름, 1C

엔진 공구 흔들기

  • QuArK – Quake 엔진 기반 게임용 다목적 도구입니다.
  • Trenchbroom 2.0 – Quake 엔진 기반 게임용 맵 에디터.
  • PakExpl – Progs.dat 파일뿐만 아니라 Quake의 모델, 사운드 및 레벨 데이터를 포함하는 .pak 파일을 열 때 사용합니다.
  • fteqccgui : 엔티티의 동작을 제어하는 quakec 파일을 편집하기 위해 progs.dat 파일을 열기 위해 사용합니다.
  • qME 3.1 – Quake 모델 편집 도구의 최종 버전을 사용하여 기존 3D 모델 파일을 Quake의 .mdl 형식으로 변환할 수 있습니다.
  • qPAK : Quake .pak 아카이브를 열기 위한 다른 도구.qME에 번들되어 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "Quake engine GPL release". Retrieved May 24, 2020.
  2. ^ "id Tech 2 GPL release". Retrieved May 24, 2020.
  3. ^ "Does John Romero Still Enjoy Shooting People?". Next Generation. No. 30. June 1997. pp. 9–12.
  4. ^ Edge, May 1997, My original idea was to do something like Virtua Fighter in a 3D world, with full-contact fighting, but you'd also be able to run through a world, and do the same stuff you do in Quake, only when you got into these melees, the camera would pull out into a third-person perspective. It would've been great, but nobody else had faith in trying it. The project was taking too long, and everybody just wanted to fall back on the safe thing – the formula.
  5. ^ Abrash, Michael. "Quake's 3-D Engine: The Big Picture". Retrieved August 22, 2012.
  6. ^ "Surface Caching Revisited, Quake's Triangle Models, and More".
  7. ^ "DarkPlaces Homepage". icculus.org. Retrieved November 6, 2017.
  8. ^ "Darkplaces subversion repository". svn.icculus.org. Retrieved August 9, 2019.
  9. ^ darkplacesengine/darkplaces, DarkPlaces Engine, June 14, 2021, retrieved June 21, 2021
  10. ^ "DarkPlaces Quake Engine on Xonotic GitLab". Retrieved February 3, 2020.
  11. ^ "DarkPlaces Quake Engine on Xonotic GitHub". Retrieved November 6, 2017.
  12. ^ Gneiting, Axel (July 20, 2016). "My Vulkan Quake 1 Port running "In the Shadows" mod. Some stuff still missing. Code is here https://github.com/Novum/vkQuake". Twitter. Retrieved August 6, 2016.
  13. ^ "Vulkan Quake port based on QuakeSpasm". github.com/Novum/vkQuake. Retrieved August 6, 2016.

외부 링크