# Game engine

Ảnh chụp màn hình trình chỉnh sửa PlayCanvas với cảnh BMW i8 được tải sẵn làm ví dụ.
**Game engine** (**phần mềm làm game**) là một phần mềm được viết để thiết kế và phát triển video game (trò chơi điện tử), hiểu đơn giản nó là loại phần mềm trung gian kết nối tương tác của nhiều ứng dụng trong cùng 1 hệ thống với nhau. Có rất nhiều loại game engine dùng để thiết kế trò chơi cho các hệ máy như hệ consoles hay máy tính cá nhân (PC). Chức năng cốt lõi của game engine phần lớn nằm trong tiếp xúc với phần cứng hay công cụ dựng hình (kết xuất đồ họa) cho các hình ảnh 2 chiều (2D) hay 3 chiều (3D), công cụ vật lý (hay công cụ tính toán và phát hiện va chạm), nhập/đọc tập tin chứa âm thanh và đồ họa, hát âm thanh, nâng cấp hình ảnh động (hoạt hình), trí tuệ nhân tạo cho những nhân vật trò chơi, phân luồng, tạo dòng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị, và (nếu cần) kết nối mạng. Quá trình phát triển trò chơi tiết kiệm được rất nhiều thời gian và kinh phí vào việc tái sử dụng và tái thích ứng một phần mềm làm game để tạo nhiều trò chơi khác nhau.

## Mục đích

Game engine cung cấp một bộ các công cụ phát triển trực quan và có thể tái sử dụng từng thành phần trong đó. Nói chung các bộ công cụ này cung cấp một môi trường phát triển tích hợp được đơn giản hóa. Phát triển ứng dụng nhanh (tiếng Anh:*rapid application development*) cho game theo cách lập trình hướng dữ liệu. Những game engine này đôi khi còn được gọi là các "phần mềm trung gian cho game"(*game middleware*), như ý nghĩa của thuật ngữ, chúng cung cấp một nền tảng phần mềm linh hoạt và dễ dàng sử dụng lại với mọi chức năng cốt lõi cần thiết ngay trong nó để có thể phát triển một ứng dụng game đồng thời giảm giá thành, độ phức tạp, và kịp thời hạn phát hành- tất cả các yếu tố quan trọng trong ngành công nghiệp game đầy cạnh tranh.

Giống như các phần mềm trung gian khác, game engine thường cung cấp một nền tảng trừu tượng hóa, cho phép một game có thể chạy trên nhiều hệ máy bao gồm các hệ console hoặc máy tính cá nhân với một vài, nếu có, thay đổi trong mã nguồn của game đó. Thông thường, phần mềm trung gian cho game được thiết kế với một nền tảng kiến trúc dựa trên các thành phần khác, cho phép các hệ thống khác nhau trong engine có thể thay thế hoặc mở rộng với các phần mềm trung gian khác chuyên biệt hơn (và cũng đắt đỏ hơn) như là Havok cho hệ thống vật lý trong game, Miles Sound System cho âm thanh, hay Bink cho các đoạn video. Một số game engine như RenderWare thậm chí còn thiết kế như một loạt các kết nối lỏng lẻo các phần mềm trung gian khác mà từ đó có thể chọn lọc và kết hợp để tạo ra một game engine theo yêu cầu, thay vì cách tiếp cận thông thường là mở rộng và tùy biến một cách linh hoạt để tạo ra giải pháp tích hợp. Tuy vậy, sự mở rộng vẫn cần thiết, đó vẫn là một ưu tiên cao do yêu cầu ứng dụng đa dạng trong game engine. Mặc dù có sự phức tạp trong tên gọi, các game engine vẫn thường được sử dụng cho các loại khác của ứng dụng tương tác với các yêu cầu đồ họa thời gian thực như giới thiệu các bản demo, dựng hình kiến trúc, đào tạo mô phỏng, và mô hình hóa môi trường.

Một số game engine chỉ cung cấp khả năng dựng hình (kết xuất) 3D thời gian thực thay vì rất nhiều chức năng trong phạm vi rộng mà game yêu cầu. Loại engine này tùy thuộc vào các nhà phát triển, sử dụng để thực hiện phần chức năng hoặc kết nối phần hình ảnh còn lại từ các game engine khác nhằm mục đích cải thiện hình ảnh cho game. Loại engine này thường được gọi là: "graphics engine", "rendering engine," hay "3D engine" thay vì thuật ngữ bao quát hơn là "game engine". Thuật ngữ không nhất quán này sử dụng với nghĩa một bộ công cụ đầy đủ chức năng để tạo hình ảnh 3 chiều trong game chứ không đơn giản chỉ là "3D engine". Một vài ví dụ cho các engine đồ họa là: RealmForge, Truevision3D, OGRE, Crystal Space, Genesis3D, Vision Engine, Irrlicht và JMonkey Engine. Game hoặc engine đồ họa ngày nay thường cung cấp bởi một trường đồ thị dựng sẵn, khiến việc biểu diễn hướng đối tượng của thế giới game 3D trong thiết kế được đơn giản hóa và có thể làm cho việc kết xuất thế giới ảo rộng lớn một cách hiệu quả hơn.

## Trừu tượng hóa phần cứng (hardware abstraction)

Thông thường, engine 3D hay hệ thống kết xuất đồ họa trong game engine thường được xây dựng trên một nền tảng giao diện lập trình ứng dụng đồ họa như Direct3D hay OpenGL cung cấp sẵn một hệ ảo hóa cho GPU hay card đồ họa. Thư viện mã nguồn cấp thấp (cấp cơ bản) như DirectX, SDL, và OpenAL (thư viện âm thanh mã nguồn mở) cũng thường được sử dụng trong các game khi chúng cung cấp khả năng truy cập phần cứng độc lập với phần cứng máy tính khác như các thiết bị đầu vào (chuột, bàn phím, và tay cầm điều khiển), card mạng, và card âm thanh, trước cả bộ điều hợp đồ họa 3D, phần mềm dựng hình được sử dụng. Phần mềm dựng hình vẫn được sử dụng trong một số trường hợp như là công cụ mô hình hóa hoặc kết xuất ảnh liên tục khi cần hình ảnh chính xác hơn là biểu diễn theo thời gian thực (đo bằng số khung hình/giây) hoặc trong trường hợp phần cứng máy tính không đủ mạnh để hỗ trợ hình ảnh như hỗ trợ tô bóng (đổ bóng, *shader*)

Với sự ra đời của các phần cứng tăng tốc xử lý vật lý, các giao diện lập trình ứng dụng vật lý như PAL và hệ vật lý mở rộng như COLLADA (một định dạng chuyển đổi cho các loại ảnh 3D) trở nên sẵn có để cung cấp một phần mềm ảo hóa cho vi xử lý vật lý của các nhà cung cấp phần mềm trung gian và hệ máy platform.

## Lịch sử

Trước khi có game engine, game thường được tạo ra từng phần nhỏ: ví dụ, một game cho hệ máy Atari 2600 phải được thiết kế từ mức cơ bản nhất để tối ưu việc hiển thị phần cứng (hay thiết kế hiển thị lõi - ngày nay người ta dùng từ nhân hệ điều hành). Các hệ máy khác thậm chí còn tiếp cận khó khăn hơn, nhưng kể cả khi việc hiển thị không phải là vấn đề thì việc bộ nhớ hạn chế thường hủy hoại các nỗ lực tạo ra một thiết kế dữ liệu lớn mà một engine yêu cầu. Kể cả trên các hệ thống có bộ nhớ lớn hơn, rất ít trong số chúng có thể sử dụng lại giữa các game. Các tiến bộ nhanh chóng của công nghệ phần cứng -khởi đầu thời kỳ thị trường hóa— có nghĩa là hầu hết các bộ mã nguồn tạo game trước đó sẽ bị quẳng đi sau đó, như các thế hệ game sau này sẽ sử dụng thiết kế khác hoàn toàn và đồng thời tận dụng cả các nguồn tài nguyên ngoài. Do đó phần lớn các game thiết kế trong thập kỷ 80 được tạo ra thông qua một bộ mã nguồn có quy tắc cố định với một lượng nhỏ cấp độ dữ liệu và dữ liệu hình ảnh.

Thế hệ đầu tiên của hãng phát triển engine đồ họa (kết xuất hình ảnh) thứ 3 (và tiền thân của game engine) đã thống trị bởi ba phần mềm ứng dụng: BRender từ Argonaut Software, Renderware từ Criterion Software Limited và Reality Lab của RenderMorphic. Reality Lab hoạt động nhanh nhất trong ba phần mềm này và là phần mềm đầu tiên được mua lại trong một động thái tích cực từ Microsoft. Đội ngũ phát triển của RenderMorphics: Servan Keondjian, Kate Seekings và Doug Rabson sau đó tham gia vào dự án của Microsoft và Reality Lab đổi tên thành Direct3D trước khi Keondjian và Rabson rời đi để lập một công ty viết phần mềm trung gian khác:Qube Software. Renderware về sau được EA mua lại nhưng lại bị bỏ mặc bởi "gã khổng lồ game" này.

Thuật ngữ "game engine" xuất hiện vào giữa những năm 90, đặc biệt là trong mối quan hệ với game 3D như game bắn súng góc nhìn người thứ nhất(FPS). Như các thương hiệu nổi tiếng của Id Sortware: Doom và Quake chẳng hạn, thay vì phải làm việc từ đầu, các nhà phát triển khác (nếu được cấp phép) sẽ có quyền truy nhập vào phần lõi (mã nguồn) của game và thiết kế các hình ảnh, nhân vật, vũ khí, và các màn chơi của riêng họ-gọi là *game content*(nội dung game) hay "game assets"(tài sản game).Sự tách biệt trong việc làm game - các quy định cụ thể và dữ liệu từ các khái niệm cơ bản như hệ thống vật lý và các thực thể trong game (như nhân vật phụ, đồ vật) có nghĩa rằng các nhóm phát triển có thể tăng lên và chuyên môn hóa dần.

Các game sau này, như Quake III Arena và sản phẩm năm 1998 của Epic Games: Unreal (không phải Unreal Tournament) được thiết kế với cách tiếp cận mới này, game engine và nội dung game được chia thành các phần riêng biệt để phát triển. Việc thực hiện cấp phép như cấp phép sử dụng công nghệ đã chứng minh là một nguồn doanh thu phụ trợ hữu dụng cho một số nhà phát triển, như thỏa thuận cấp phép cho một game engine cao cấp có thể nằm trong khoảng 10.000 tới 10 triệu USD, và số lượng các hãng phát triển được cấp phép sử dụng engine có thể lên tới hàng tá (như đã thấy ở Unreal Engine). Và điều cuối cùng, vì engine có thể tái sử dụng khiến việc phát triển game tiếp theo nhanh hơn và dễ dàng hơn, một thuận lợi to lớn trong ngành công nghiệp cạnh tranh này.

Game engine hiện đại là một trong những ứng dụng được viết ra (bằng các ngôn ngữ lập trình) phức tạp nhất, thường xuyên phải có rất nhiều tinh chỉnh trong hệ thống để đảm bảo kiểm soát chính xác trải nghiệm người dùng. Sự phát triển liên tục của game engine đã tạo ra một sự phân chia mạnh mẽ giữa dựng hình, kịch bản, thiết kế hình ảnh, và thiết kế cấp độ(các màn chơi...). Bây giờ thông thường nhất là: một đội ngũ phát triển game điển hình phải có số lượng họa sĩ gấp vài lần số lượng lập trình viên.

Các game bắn súng góc nhìn người thứ nhất thường chiếm ưu thế về việc sử dụng engine của các hãng thứ 3, nhưng chúng cũng được sử dụng để tạo các game thể loại khác. Ví dụ, game nhập vai: *The Elder Scrolls III: Morrowind* (của studio Bethesda Softworks) và game MMORPG: *Dark Age of Camelot* đều được làm trên engine Gamebryo, game MMORPG khác *Lineage II* đều dựa trên Unreal Engine. Game engines cũng thường được sử dụng để chuyển game sang các hệ máy khác nhau; ví dụ, engine RenderWare được sử dụng trong các thương hiệu như Grand Theft Auto và Burnout.

Phân luồng dữ liệu giờ đây hết sức quan trọng do các hệ thống đa nhân hiện đại và để tăng cường tính hiện thực trong game. Một luồng điển hình bao gồm dựng hình, tạo dòng, xử lý âm thanh, và xử lý vật lý(phát hiện va chạm). Game đua xe là điển hình đi đầu trong việc xử lý luồng với hệ thống vật lý chạy với một luồng tách biệt trước khi các hệ thống con khác hoạt động, phải tách riêng vì dựng hình và các nhiệm vụ xử lý liên quan chỉ cần tần số cập nhật khoảng 30–60 Hz trong khi xử lý vật lý lại cần một tần số cao hơn nhiều. Ví dụ, Need For Speed trên hệ máy PlayStation chạy với tần số vật lý cỡ 100 Hz so sánh với Forza Motorsport 2 (hệ máy Xbox 360) có tần số vật lý là 360 Hz.

Mặc dù thuật ngữ lần đầu được sử dụng vào những năm 90, nhưng vẫn có một vài hệ thống trước đó trong thập niên 80 cũng được coi như là game engine, như là 2 hệ thống AGI và SCI của Sierra, SCUMM của LucasArts và Freescape engine của Incentive Software. Không như hầu hết các game engine ngày nay, các engine này chưa bao giờ được sử dụng bởi bất kỳ một hãng thứ 3 nào(trừ trường hợp hê thống SCUMM đã được cấp phép và sử dụng bởi Humongous Entertainment).

## Xu hướng hiện tại

Với công nghệ tạo game engine càng phát triển và trở nên thân thiện hơn với người sử dụng, ứng dụng của nó càng được mở rộng, và giờ đây được sử dụng để tạo các game mang mục đích khác với giải trí đơn thuần như: mô phỏng, huấn luyện ảo, y tế ảo, và mô phỏng các ứng dụng quân sự. Để tạo điều kiện tiếp cận này, các nền tảng phần cứng mới đang là mục tiêu của game engine, kể cả điện thoại di động (như iPhone, điện thoại Android) và trình duyệt web (như Shockwave, Flash, WebVision của Trinigy, Silverlight, Unity Web Player, O3D và thuần dhtml).

Thêm vào đó, nhiều game engine đang được tạo ra bằng các ngôn ngữ lập trình cấp cao như Java và C# hay .NET(ví dụ TorqueX, và Visual3D.NET) hay Python (Panda3D). Vì hầu hết các game 3D hiện nay đều có giới hạn cho GPU(giới hạn bởi sức mạnh của card đồ họa), khả năng gây chậm máy của các ngôn ngữ lập trình cấp cao trở nên không đáng kể, trong khi việc tăng năng suất được cung cấp bởi các ngôn ngữ này lại có lợi cho các nhà phát triển game engine. Những xu hướng này gần đang được thúc đẩy bởi các hãng như Microsoft để hỗ trợ các nhà phát triển game độc lập. Microsoft phát triển XNA (Microsoft XNA) như là một gói phần mềm phát triển (SDK) cho tất cả các game trên hệ máy Xbox và các sản phẩm liên quan. Nó bao gồm kênh thiết kế XBox Live Indie Games đặc biệt cho các nhà phát triển nhỏ không có nguồn lực mở rộng cần thiết để đóng gói một game để bán trên các giá bán lẻ. Việc này trở nên dễ dàng hơn và rẻ hơn bao giờ hết để phát triển một game đa hệ máy có hỗ trợ managed frameworks.

## Phần mềm trung gian

Một số hãng hiện nay chuyên tập trung vào phát triển các bộ phần mềm gọi là phần mềm trung gian (*middleware*). Các nhà phát triển middleware cố gắng "tái phát minh ra bánh xe" bằng cách phát triển một bộ *phần mềm mạnh mẽ* (là khả năng của một hệ thống máy tính để đối phó với các lỗi trong khi thực hiện để tiếp tục hoạt động bất chấp những bất thường ở đầu vào, tính toán) mà bao gồm hầu hết các yếu tố một nhà phát triển game cần đến để xây dựng một game. Phần lớn các chương trình phần mềm trung gian cung cấp các cơ sở để phát triển một cách dễ dàng, như hình ảnh, âm thanh, hệ thống vật lý và chức năng AI. Gamebryo và RenderWare là hai phần mềm trung gian được sử dụng khá rộng rãi.

Một số middleware chỉ làm một chức năng nhưng nó còn hiệu quả hơn cả toàn bộ engine. Ví dụ, SpeedTree được sử dụng để dựng hình ảnh cây cối thêm thực tế trong game nhập vai: The Elder Scrolls IV: Oblivion.

Bốn gói phần mềm trung gian được sử dụng rộng rãi nhất mà cung cấp các chức năng trong hệ thống con gồm có Bink của hãng RAD Game Tools, hãng Firelight với FMOD, Havok, và GFx của Scaleform. RAD Game Tools phát triển Bink cho dựng hình video cơ bản, đi cùng với âm thanh Miles, và dựng hình 3D Granny. FMOD của Firelight là một thư viện và bộ công cụ phần mềm âm thanh mạnh mẽ giá rẻ. Havok cung cấp một hệ thống mô phỏng vật lý mạnh, cùng với các bộ phần mềm hình ảnh động và mô phỏng hành vi. Scaleform đem lại GFx dùng cho các biểu diễn cao cấp trên nền giao diện Flash, cùng với các giải pháp trình chiếu video chất lượng cao, và một Input Method Editor (IME) phần bổ sung nhằm hỗ trợ trò chuyện trong game bằng ngôn ngữ châu Á.

Một số middleware bao gồm toàn bộ mã nguồn trong nó, số khác chỉ cung cấp một giao diện lập trình ứng dụng dùng để tham khảo như một thư viện mã nhị phân. Mặt khác một số có thể được cấp phép, thường là phải trả một cái giá cao hơn cho toàn bộ mã nguồn.

## Phần mềm trung gian cho game trực truyến nhiều người chơi(MMOG)

Middleware cho game trực truyến nhiều người chơi phức tạp hơn nhiều so với game chơi đơn. Về mặt kỹ thuật tất cả các game engine thông thường đều có thể sử dụng để thực hiện một game trực tuyến nhiều người chơi bằng cách kết hợp nó với một phần mềm trung gian MMO (*MMO middleware*). Sự tăng cường tính phổ biến của các game MMOG thúc đẩy sự phát triển các gói phần mềm trung gian MMO. Một số gói này còn bao gồm luôn cả game engine trong đó, trong khi số khác lai chỉ hỗ trợ mạng và do vậy phải kết hợp với một game engine cùng với nó để tạo một game trực tuyến nhiều người chơi. Một số MMO middleware nổi bật bao gồm:

* Bigworld Technology
* Exit Games Neutron
* HeroEngine
* Monumental Games
* Multiverse Network
* Q (game engine)
* RedDwarf Server (mã nguồn mở)
* Vision Engine

## Game engine cho game bắn súng góc nhìn người thứ nhất (FPS)

Một trong các loại game engine được biết đến nhiều nhất là game engine cho các game FPS. Là bước đột phá của các nhà phát triển về chất lượng hình ảnh khi thực hiện các game FPS trên góc nhìn của con người. Trong khi các game mô phỏng như điều khiển máy bay hay xe cộ và game chiến thuật thời gian thực (RTS) tăng cường tính thực tế trong hình ảnh ở mức độ vĩ mô, thì game bắn súng góc nhìn thứ nhất lại đi đầu về xử lý hình ảnh thực tế ở cấp độ nhỏ hơn.

Sự phát triển của các engine đồ họa cho game FPS đặc trưng bởi sự tăng trưởng ổn định của công nghệ chế tạo phần cứng, với một số bước đột phá. Nỗ lực xác định các thế hệ tách biệt cho game engine FPS sẽ dẫn đến sự lựa chọn tùy tiện giữa một cái là bản nâng cấp của một engine "đời cũ" và một cái là một engine hoàn toàn mới.

Sự phân loại rất phức tạp vì game engine là sự pha trộn giữa các công nghệ cũ và mới. Các tính năng được coi là cao cấp trong một game mới phát hành trong năm nay sẽ trở thành tiêu chuẩn dự kiến trong năm tới. Các trò chơi với sự pha trộn của các thế hệ trước và các tính năng mới hơn sẽ là tiêu chuẩn. Ví dụ game Jurassic Park: Trespasser (1998) lần đầu giới thiệu hệ thống vật lý trong thể loại FPS, nhưng nó đã không trở nên phổ biến cho đến khoảng năm 2002. Red Faction (2001) đã có tính năng phá hủy các bức tường và mặt đất, thứ mà vẫn chưa phổ biến trong các engine vài năm sau đó (ví dụ trong game Unreal Tournament 2004 vẫn chưa có các vật thể phá hủy được). Battlezone (1998) và Battlezone II: Combat Commander (1999) thêm các phương tiện chiến đấu cơ bản vào một game FPS, vậy mà vẫn không phải là điểm nhấn chủ đạo cho tới về sau, khi Tribes 2, Battlefield 1942, Halo: Combat Evolved và Unreal Tournament 2004 tái hiện đầy đủ khả năng cho các phương tiện chiến đấu kết hợp với bắn súng góc nhìn người thứ nhất trong game.

Một số game engine nổi bật ở thể loại này:

* SnowDrop (được sử dụng trong Tom Clancy's The Division)
* Source (được sử dụng trong Half-Life 2)
* Unreal Engine 4 (được sử dụng trong Gears of War 5 )
* Dagor Engine (được sử dụng tron Enlisted)
* IW 8.0 (được sử dụng bởi Call of Duty: Modern Warfare (2019) & Call of Duty: Warzone)

## Game engine cho thể loại visual novel

Do tính chất đặc trưng ít đồ họa của game visual novel, engine làm game thể loại này cũng đơn giản hơn rất nhiều so với game FPS. Các engine làm game visual novel bao gồm:

* KiriKiri
* NScripter
* Ren'Py
* Digital Novel Markup Language
* Nekonovel
* Vasilriot
* VNAP(Visual Novel Adventure Platform)

## Tham khảo