게임 엔진 레이어링 소개

게임 엔진 계층 아키텍처(하향식)

Tool Layer
현대 게임 엔진에서 우리가 가장 먼저 접하는 것은 복잡한 코드가 아닌 다양한 에디터일 수 있으며, 이러한 에디터를 사용하여 레벨, 캐릭터, 애니메이션 등을 생성하고 디자인할 수 있습니다. 엔진 레이어 - 도구 레이어.
여기에 이미지 설명을 삽입하세요.
기능 레이어

  • 3차원 가상 세계를 프레임별 2차원 이미지로 변환하는 과정에는 렌더링 시스템(Rendering)의 사용이 필요합니다.
  • 고정된 모델을 움직이게 하고 실제와 같은 움직임을 만들어 연속적인 그림을 형성하려면 애니메이션 시스템(애니메이션)을 사용해야 합니다.
  • 물리적 충돌과 다양한 힘의 작용은 물체의 움직임을 현실 세계에 더 가깝게 만듭니다.물리적 시스템(물리학)을 사용해야 합니다.
  • 각 게임 세계에는 고유한 규칙이 있으며, 게임 플레이 가능성을 풍부하게 하기 위해 스크립트(Script), 상태 머신(FSM) 및 AI를 사용해야 하는 NPC도 있습니다.

모든 게임의 작동은 일련의 기능을 포함하는 인간-컴퓨터 상호 작용과 분리될 수 없습니다. 위의 기능이 결합되어 게임 엔진의 기능 계층을 형성합니다.
여기에 이미지 설명을 삽입하세요.
Resource Layer
게임에는 소스 코드 라인뿐만 아니라 PhotoShop의 PSD 파일, 3DSMAX의 MAX 파일과 같은 다양한 형식의 멀티미디어 파일도 포함되어 있습니다. 이 파일은 이러한 일련의 그래픽, 이미지, 오디오, 비디오 파일 및 기타 데이터를 로드하고 관리합니다. 자원 계층의 작업. 리소스 레이어는 기능 레이어 아래에 위치하여 기능 레이어에 지속적으로 데이터를 제공하는데, 위는 화가가 그림을 그리는 것과 같고, 리소스 레이어는 아래에 지속적으로 물감을 제공합니다.
여기에 이미지 설명을 삽입하세요.
코어 레이어(Core Layer)
게임 엔진에서 가장 핵심적이고 중요한 레이어는 코어 레이어입니다. 코어 레이어는 상위 레이어의 빈번한 호출에 응답하고 메모리 관리, 컨테이너 할당, ​​데이터 계산, 멀티 스레드 생성 등 다양한 기본 기능을 제공하는 역할을 담당합니다.
여기에 이미지 설명을 삽입하세요.
플랫폼 계층
플랫폼 계층은 가장 쉽게 간과되는 계층입니다. 게임이나 엔진은 서로 다른 플랫폼에서 출시되고 서로 다른 그래픽 인터페이스를 가질 수 있으며, 서로 다른 사용자는 키보드, 마우스, 컨트롤러와 같은 서로 다른 하드웨어 장치를 사용할 수 있습니다. 다양한 플랫폼에 적응하는 것은 플랫폼 계층의 임무입니다. 여기에 이미지 설명을 삽입하세요.
타사 라이브러리
미들웨어 및 타사 라이브러리는 SDK(Software Development Kit) 형식이나 파일 형식으로 변환됩니다.
여기에 이미지 설명을 삽입하세요.
왜 계층화된 아키텍처인가?

여기에 이미지 설명을 삽입하세요.
게임 엔진을 분리하고 복잡성을 줄이기 위해 각 계층은 자체 작업을 독립적으로 완료하며, 하위 계층은 상위 계층에 기본 서비스를 제공하고 상위 계층은 기본 도구를 호출합니다. 이러한 계층화된 아키텍처는 상위 계층을 유연하게 하고 하위 계층을 안정적으로 만들어 기능 업데이트 및 개발에 더 도움이 됩니다.

자원 계층

Photoshop의 PSD 파일, 3DSMAX의 MAX 파일 등은 일반적으로 도구 자체의 정보, 엔진과 관련이 없는 대량의 데이터가 포함되어 있고 데이터 형식이 비교적 복잡하므로 직접 사용하면 효율성이 크게 떨어집니다. 리소스 예약의 효율성을 높이기 위해 엔진은 가져올 때 다양한 리소스를 자산 파일로 변환해야 합니다. 예를 들어 엔진에서 텍스처 파일을 사용하는 경우 JPG, PNG 형식의 파일을 가져올 수 있지만, 이 두 파일의 압축 알고리즘은 GPU에 효율적이지 않고 GPU에서 직접 사용하면 성능이 낭비되므로 성능이 저하됩니다. 일반적으로 dds로 변환되며 해당 형식은 비디오 메모리에 저장됩니다.
여기에 이미지 설명을 삽입하세요.
위 그림의 작은 로봇과 같은 게임 캐릭터의 경우 해당 재료, 텍스처, 그리드, 애니메이션 및 기타 리소스를 바인딩하고 XML 파일과 같은 리소스를 연결하기 위한 복합 자산 파일을 정의하고 GUID를 사용해야 할 수 있습니다. (Globally Unique Identifier) ​​기호) 식별 관리를 위한 것입니다.
여기에 이미지 설명을 삽입하세요.
실제로 게임을 실행할 때 에셋 라이프사이클(Asset Life Cycle)에 따라 에셋을 관리하는 에셋 매니저(Runtime Asset Manager), 에셋의 실시간 로딩 및 언로딩, 리소스 할당, 가비지 컬렉션도 함께 사용해야 한다. (GC)., 지연된 로딩 등이 포함됩니다.

기능층

여기에 이미지 설명을 삽입하세요.
기능 레이어를 사용하면 틱이 지나갈 때마다 게임 내 가상 세계가 앞으로 이동합니다. Tick ​​내에서는 TickLogic(), TickRender() 함수가 각각 실행되는데, 일반적으로 논리적인 TickLogic()이 먼저 실행되며 입출력 처리, 카메라 시점 위치 변환, 충돌 감지 등 게임 세계를 시뮬레이션하는 데 주로 사용됩니다. 연산; 월드를 그리는 데 사용되는 TickRender()는 TickLogic()에서 계산된 각 자산의 위치를 ​​기반으로 렌더링됩니다.
여기에 이미지 설명을 삽입하세요.
기능 계층은 매우 복잡하고 규모가 크며, 특히 네트워크 프로그래밍의 경우에는 일반적으로 멀티스레드 컴퓨팅이 필요합니다. 현재 주류인 멀티스레딩은 병렬로 계산할 수 있는 작업을 분할해 여러 스레드에 넣어 계산하는 방식이지만, 병렬 컴퓨팅에 적합하지 않은 작업이 있을 경우 단점이 노출된다. 앞으로 엔진은 각 작업을 매우 작은 실행 단위로 나누고 각 원자 작업을 실행을 위해 여러 스레드에 할당하여 리소스를 보다 효율적으로 사용할 것입니다.
여기에 이미지 설명을 삽입하세요.

코어 레이어

핵심 계층은 상위 계층의 모든 논리에 대한 기반을 제공하며 수학 라이브러리(예: 행렬 연산), 데이터 구조 및 컨테이너(예: 이진 트리), 메모리 관리 및 기타 도구를 제공합니다. 엔진의 모든 것이 효율성에 중점을 두기 때문에 수학적 연산을 수행할 때 대략적인 연산 또는 SIMD(동일한 명령을 동시에 동기 방식으로 실행하는 단일 명령 다중 데이터 스트림)를 사용하여 컴퓨팅 효율성을 향상시킬 수 있습니다. 프로그래밍 언어와 함께 제공되는 데이터 구조는 몇 가지 문제를 일으킬 수 있습니다. 예를 들어 C++에서 Vector가 여는 저장 공간은 객체를 추가할 때 기하급수적으로 증가합니다. 많은 수의 객체를 추가한 후에는 사용할 수 없습니다. 메모리 홀이 발생할 수 있는 것으로 알려져 있으며, 엔진 내의 데이터 구조는 메모리 관리에 더 편리하고 접근 효율성을 향상시킵니다. 엔진의 메모리 관리는 운영체제의 메모리 관리와 매우 유사합니다. 핵심 원칙은 다음과 같이 요약할 수 있습니다: 데이터를 가능한 한 많이 함께 저장하고 쉽게 액세스합니다. 순서대로 액세스하고 일괄 처리합니다.
여기에 이미지 설명을 삽입하세요.

플랫폼 레이어

플랫폼 계층을 사용하면 게임이 Xbox, Mac, Windows 등 다양한 플랫폼은 물론 컨트롤러, 키보드, 마우스 등 다양한 장치와 호환될 수 있습니다. 플랫폼 계층에서는 RHI(Render Hardware Interface)를 사용하여 서로 다른 그래픽 API(예: DirectX11, DirectX12, OpenGL) 간의 차이점을 제거하므로 상위 계층에서는 서로 다른 API를 사용하여 발생할 수 있는 문제에 대해 신경 쓸 필요가 없습니다.
여기에 이미지 설명을 삽입하세요.

도구 레이어

여기에 이미지 설명을 삽입하세요.
툴 레이어는 일반적으로 에디터(블루프린트 에디터, 머티리얼 에디터 등)의 형태로 제공되며, 다양한 프로그래밍 언어(C++, C#, Html5 등)를 이용하여 개발이 가능하며, 개발 효율성이 최우선으로 필요합니다. 다양한 사용자가 게임 콘텐츠를 제작할 수 있도록. . 많은 게임 디지털 자산이 다양한 DCC(Blender, MAYA 등)에서 생성되기 때문에 도구 계층에는 일반적으로 게임 리소스를 가져오고 내보내기 위한 가져오기 및 내보내기 도구가 포함되어 있습니다.

추천

출처blog.csdn.net/gghhb12/article/details/136437631