Game Engine Architecture_1

SYiee·2022년 10월 6일
0

게임엔진

목록 보기
1/5

Introduction

💁‍♀️ What is Game engine?

  • high-quality의 게임을 쉽고 빠르게 intensive programming skill이나 computational resources 없이 만들 수 있는 것

  • 옛날에 게임 엔진이 없던 시절에는 캐릭터가 앞으로 가면 걷는 애니메이션이 재생이 되어야 하는데 3frame에 해당하는 애니메이션이 루프가 되면서 걷는 애니메이션이 재생이 되는데 이것 자체가 굉장히 오래 걸림. 컴퓨터 성능에 따라 달라지지 않게 블라블라 뭔가 엄청 오래 걸리고 힘듬….

  • 사람들이 자주쓰는 data structure나 이런걸 다 지원해준다!

  • 원래 게임 엔진은 코딩 덩어리였는데 이제 gui로 바뀌었다.~ 하지만 함정이 발생… 엔진 내부를 잘 몰라서 엔진 내부에서 코드를 고쳐서 개발을 해야하는데 굉장히 어렵다~ 즉, 코딩 지식 없이 만드는 것은 소규모 게임만이다! 이 back단을 만들 수 없으면 코더와 디자이나와 다를 바 없다.

Runtime Engine Architecture

  • 게임 엔진도 계층 구조(layers)를 가지고 있다.
  • 플랫폼 independent layer


Target hardware

  • 게임이 작동할 하드웨어에 대한 표현이 들어가 있음
  • 대표적인것이 PC, iphone, android, ipad

Device drivers

  • 하드웨어의 종속적이고 OS가 하드웨어에 무지성으로(하드웨어 디바이스 별로 다르니까) 접근하는 것을 막는다. 드라이버 제공하는 규약에 따라 접근한다.

Operating system

  • os 위에서 여러 프로그램을 돌릴 수 있다. OS가 동시에 일어난 것 처럼 보이도록 관리 해둔다.
  • 파일을 지우거나 복사 할 때도 메모리에 안전하게 접근해서 해준다.
  • Operating system like Microsoft Windows employ a time-sliced approach to sharing the hardware with multiple running programs.
  • This mean that a PC game can never assume it has full control of the hardware - it must play nice with other programs in the system.
  • 조금 옛날에는…. On a console, the operating systems is often just a thin library layer that is compiled directly into your game executable. The game typically ‘owns’ the entire machine.
    • 과거 ) 콘솔 게임이 기기 전체를 사용하니 PC 대비 효율을 잘 낼 수 있다는 인식
    • 현재 ) 네트워크도 사용하고 PC와 콘솔이 비슷해진다.

Third-Party SDKs and Middleware

  • 대부분의 게임엔진은 Third-Party SDKs and Middleware을 사용

✔ Graphics

  • OpenGL: this is a cross-language API for rendering 2D and 3D vector graphics. The API is typically used to interact with a graphics processing unit (GPU), to achieve hardware-accelerated rendering.
    • 대부분 기기에서 돌아가는 그래픽 라이브러리
    • 모바일, 패드, 리눅스 등에서 모두 돌아가는 cross-language
    • 오픈소스이다.
    • 보통 DirectX가 발전하고 OpenGL이 따라가는 것이 많다. 발전속도나 대응속도 등이 조금 느리다.
    • window가 아니면 어쩔 수 없이 사용을 해야한다.
  • DirectX: this is Microsoft’s 3D graphics SDK and primary rival to OpenGL.
    • MS가 제공하는 3D 그래픽 라이브러리라서 윈도우에서만 돌아간다.
    • 9~11 버전까지는 학부생 수준에서도 괜찮았는데 갑자기 12로 넘어오면서 cpu, memory에게 일을 다시켜야 하는 뉴비학살이 되어버림.

💡 directX를 더 많이 사용한다. (DirectX vs OpenGL)

  • 쓰기 더 편하다.
  • 게임에 specific한 특징들을 많이 가지고 있다.
  • OpenGL은 게임이 아니라 그래픽이 필요한 모든 활동을 지원하기 위한 general한 느낌이다.
  • 책임지는 사람이 있어서 대응이 빠르다.
  • libgcm : this is a low-level direct interface to the playStation 3’s RSX graphics hardware.

  • Vulkan: A low-overhead, cross-platform API. This aims to provide a considerably lower-level API for the application than the older APIs (OpenGL and Direct3D 11).

✔ Data structures and algorithms

  • STL : this is a the c++ standard template library provides a wealth of code and algorithms for managing data structures, strings, and stream-based I/O.
    • 사람들이 오랜시간 고민을 해서 구현한 것이다.
    • 그런데 general한 상황에서 잘 쓰이도록 만든 것이지 게임 엔진에 specific하게 하려면 다른 것을 사용해야할 수도 있다.
  • Boost++
  • Loki

✔ Collision and physics

  • 물리와 관련된 것들

  • Havok : this is a popular industrial-strength physics and collision engine

  • PhysX : this is another popular industrial-strength physics and collision engine provided by NVIDIA.

✔ Character animation

  • Granny: This includes robust 3D model and animation exporters.
  • Spine: Spine is 2D skeletal animation software for game.
  • Havok animation: Havok company creates a complimentary animation SDK, which
    makes bridging the physics animation gap much easier than it ever has been.

platform independence layer

  • 하나 이상의 (다양한) 하드웨어 플랫폼에서 사용이 가능해야한다.
    • 많은 플랫폼을 지원할수록 시장에서 유리하다
    • 단점 PC에서 제공하는 환경을 모바일에서도 제공할 수 있을까? - 이런 것들때문에 아무거나 할 수는 없다.
    • 그래서 대다수의 게임들이 공략할 수 있는 많은 플랫폼을 제공하려고 한다.
  • platform independence layer 위에 무언가 필요하다고 요청을 하면 현재 사용하는 하드웨어는 00이니까 너의 요청은 이런식으로 처리해야겠네 하면서 하드웨어와 위쪽단을 연결해주는 역할을 한다.

Delegation

  • oop에서 receiver에게 오브젝트 자체를 센딩을 한다.
  • delegation 구조가 어떻든 종속적이든 신경 쓰지 않고일단 날린다. 실행을 할 때는 밑에 하드웨어 어떻게 생겼는지 어떤 방식의 응답을 받는지 고려해서 짠다.

wrapper

  • 원래 짜여진것이 있느데 wrapper로 감싸면 내가 필요한 형태로 실행할 수 있도록 만들어 주는 것
  • 안쪽에 있는 것에는 기능이 구현되어 있는데 지금 내가 원하는 방식으로 작동되는 것이 포함되어 있어서 wrapper로 감싸서 원하는대로 동작하도록 하는 것!

core systems

  • 게임을 개발하다보면 필요한 것들이 많은데 그런것들을 하나도 뭈어서 utility의 형태로 제공

Assertions

  • 에러를 체킹해줌

Memory management

  • 엄청나게 많은 리소스를 올렸다내렸다 하기 때문에 메모리 관리가 중요
  • 대부분 게임 엔진은 커스텀 메모리 allocation을 가지고 있다.
    OS는 어떤 프로그램이 켜질지 실행될지 모르기 때문에 general하게 동작을 할 수 밖에 없다. 하지만 게임에서는 우리가 어떤 리소스를 올릴 것인지 알고 있기 때문에 조금 더 specific하게 제작을 할 수 있다. 성능상 이득을 가지고 오기 위해

Math library

  • 수학적 연산이 굉장히 많이 들어가고 빠르게 해야한다.

Custom data structures and algorithms

  • os나 stl에서 제공을 해주는 것은 general한 것을 지원해주기 때문에 어떤 데이터를 사용할지 알 수 없으니까
  • 그런데 게임엔진에는 자주 사용하는 데이터의 특징을 이용해 최적화시키는 제이터 구조, 알고리즘을 제공

Resource manager

  • 소리 파일, 애미메이셔 파일, 텍스처 파일 … 을 하나의 큰 인터페이스에서 관리를 해서 지금 어떤 것들이 메모리에 올라가 있고 내려가 있고를 볼 수 있도록
  • 잘 만들어지지 않은 엔진에서는 프로그래머에게 직접하라고 한다.

🖇 Reference

해당 포스트는 강형엽 교수님게임엔진기초 [GameEngine-22-2] 수업을 수강하고 정리한 내용입니다. 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다😊

profile
게임 개발자

1개의 댓글

comment-user-thumbnail
2024년 9월 15일

Lena had always been skeptical about online casinos, preferring the atmosphere of physical casinos where she could feel the excitement firsthand. However, a friend’s enthusiasm about a new online roulette game made her curious. With https://mostbetkaz.kz/ a mix of apprehension and intrigue, Lena decided to give it a try. The game featured a unique roulette wheel with vibrant graphics and engaging sound effects that quickly drew her in. She set a budget and started with small bets, determined to test her luck in this new digital environment.

답글 달기