Số 09
CẢM VỀ GAME

ENGINE - ĐỒ NGHỀ CỦA DÂN SÀNH ĐIỆU
“SHINRA” NGUYỄN KIM THÀNH

Nếu bạn từng chơi game, chắc chắn bạn cũng đã từng mơ đến chuyện làm một game cho riêng mình, với luật lệ và kịch bản do bạn tự bịa lấy... Còn gì thú vị hơn khi bạn đóng vai trò của “Thượng đế” - sáng tạo nên một thế giới mà trong đó mọi quy luật, mọi tính mệnh đều do bạn làm chủ. May mà hiện nay, với sự ra đời hàng loạt của các engine, các authoring system, việc tạo game đã trở nên dễ dàng, nhanh chóng đến nỗi nó không còn nằm ngoài tầm với của chúng ta nữa...

TẠI THUNG LŨNG SILICON ở Mỹ, trong một trường học xập xệ, tràn lan những thứ “rác rưởi” như máy tính Pentium4 3GHz, màn hình LCD 21 inch,... có một ông giáo già bảo với học trò của mình: “Mỗi game trên thị trường hiện nay đều có một engine phía sau nó. Nếu như kịch bản là linh hồn thì engine chính là xương sống của game”.

Vâng, đó là lớp học GameDevelopers - chuyên về thiết kế game của Trung tâm MITC tại Silicon Valley. Và vị giáo sư đó đang nói về engine, thứ mà người ta buộc phải nhắc đến khi tiến hành làm một game chuyên nghiệp. Vậy rốt cuộc thì engine là... “thần thánh phương nào”?

SỰ TÍCH ENGINE

Ngày xửa ngày xưa, khi quá hứng thú, Thượng đế đã tạo ra vô thiên lủng những “bộ tăng tốc đồ họa 3D”. Các thiên thần rất vui thích với vật này, lại làm thêm báu vật API cho các bộ tăng tốc 3D. Để tranh giành chúng, các lãnh chúa của vùng đất Ai-Ti gây nên những trận chiến API, tạo ra vô số những thay đổi. MiniGL xuống, ICD lên, DirectX 7.0 ra, Direct 8.1 vào. Glide2x biến mất, Glide3x xuất hiện, rồi OpenGL 1.2 1.1, v.v... Thế nhưng API vẫn là một thứ quá cao sang, chỉ dành cho dân quý-sờ-tộc, những kẻ suốt ngày chải chuốt chúng bằng lược hình chữ C... Cho đến một ngày nọ, có một hoàng tử đã quá chán ngán việc dùng lược hình chữ C để chải API nên quyết định tạo ra một con rối để thay chàng làm việc đó, và chàng đặt tên nó là EnGiNe.

3D engine cơ bản là một bộ thư viện các hàm xử lý đồ họa ba chiều. Có rất nhiều 3D engine trên internet, một số miễn phí, trong khi một số khác đòi hỏi phí bản quyền. Nếu bạn có kinh nghiệm về C++, DirectX và muốn “vọc” mã lệnh, bạn có thể dùng một engine miễn phí. Với một hệ phát triển ứng dụng (như Visual C++), bạn sẽ bắt đầu lập trình để thiết kế giao diện người dùng, AI, âm thanh, hoạt cảnh, giao tiếp mạng, và cuối cùng là game của mình. Lập trình tất cả những món này sẽ cho bạn độ tùy biến tối đa, nhưng cũng kéo theo đó tối đa những vấn đề cần giải quyết.

3D engine đáp ứng tốt những yêu cầu của một lập trình viên nhưng vẫn còn là thứ quá xa xỉ đối với những người bình thường. Nắm bắt được điều đó, các authoring system ra đời. Một authoring system như GameMaker, 3DGamemaker bao hàm luôn bộ phận thiết kế, khiến việc tạo game dường như chỉ còn là “kéo và thả”. Thông thường những authoring system cũng cung cấp một ngôn ngữ đơn giản để mở rộng thêm tính năng cho game.

Bằng cách này, những dự án game rất phức tạp có thể đuợc hoàn thành chỉ bằng một ít câu lệnh và một ít thời gian, so với việc dùng một engine và viết trực tiếp từ C++. Người ta tiên đoán rằng authoring system sẽ là thế hệ tiếp theo của ngôn ngữ lập trình game và sẽ được dùng trong hầu hết các công ty trong vòng mười năm tới.

[Đầu trang]

ĐI CHỢ ENGINE

Hiện có vô số engine trên mạng, bạn có thể xem danh sách của chúng tại 3D Engines List (http://cg.cs.tuberlin.de/~ki/engines.html). 3D Engines List cung cấp cái nhìn tổng quát về các engine 3D. Mỗi engine đều có phần giới thiệu tính năng, thông tin liên hệ (e-mail, trang chủ) và có cả liên kết để tải về bản demo hay mã nguồn. Hiện trang này đang chứa thông tin về 643 engine khác nhau. Bạn có thể chọn từng nhóm engine đã được xếp loại theo nhiều cách: theo ngày tháng, tính năng, ngôn ngữ, phần cứng được engine đó hỗ trợ, v.v...

Con số 643 engine có lẽ nói lên được phần nào sự khó khăn cho chúng ta khi chọn một engine như ý. Bên cạnh đó, có một phần khá lớn các engine được liệt kê vẫn còn đang trong giai đoạn hoàn thiện, nhiều engine thậm chí mới ở giai đoạn thí nghiệm, version chưa-được-mộtchấm cũng đưa lên. Vì vậy, điều bạn nên chú ý đầu tiên là phiên bản của engine, số càng lớn chứng tỏ engine được xây dựng lâu năm, đầu tư nghiêm túc. Kế đến là các tính năng kỹ thuật, khi chọn engine để làm game, bạn nên có:

Culling System: Hệ thống culling chỉ render bộ phận nào của dòng không bị che bởi tường hay các vật thể khác. Hầu hết các engine 3D chuyên nghiệp đều sử dụng một vài dạng culling system, thường là BSP tree hay thuật toán Portal (hệ thống cây BSP thường tỏ ra hiệu quả hơn portal system) Những engine nửa mùa dành cho dân a-ma-tơ thường không có culling system, dẫn đến việc mọi vật thể trong cảnh đều chiếm thời gian render, mặc kệ chúng có bị che khuất hay không. Như vậy có nghĩa là khi màn chơi càng lớn, và càng có nhiều vật thể, game chạy càng chậm và càng giật. Với hệ thống culling system, tốc độ render gần như độc lập so với độ lớn của màn chơi và số lượng vật thể, nhất là đối với những game “nội cảnh” (cảnh trong nhà).

LOD system: Giúp tăng cường tốc độ khung cho những màn có cảnh ngoài trời. Nó tự động chuyển vật thể thành những hình khối đơn giản hơn khi chúng ở xa camera, nhờ đó hạn chế số lượng mặt polygon được vẽ trên một dây.

Shadow mapping (cũng được gọi là Lightmapping): Một hệ thống tạo ra ánh sáng và bóng rất thực mà không làm chậm tốc độ khung. Hệ thống Shadow mapping cho phép bạn đặt vô số nguồn sáng tĩnh vào màn chơi, sau đó nó sẽ tự tính toán độ phủ của ánh sáng và bóng tối lên mỗi bề mặt. Hầu hết những game nổi tiếng hiện nay đều dùng. Bạn có thể xem ảnh bên dưới và nhận thấy game sẽ trở nên “chuyên nghiệp” như thế nào khi dùng tính năng này.

Particle System: Một hệ thống phát sinh hiệu ứng bằng cách tạo ra vô số những mảnh hạt nhỏ để mô phỏng hiệu quả đặc biệt như khói, lữa, vụ nổ, v.v... Hiệu ứng particle (hình động) nếu được làm tốt sẽ đẹp hơn sprite rất nhiều; thêm nữa, ngày nay hầu hết game đều dùng kỹ thuật này.

Game dùng Shadow Mapping

Game không dùng Shadow Mapping

Client/Server Network System: Nếu bạn đang định làm một game mạng thì nên chú ý kỹ phần này, tùy theo loại game bạn muốn làm, phải xem engine có hỗ trợ peer-to-peer normal client/server, hay mới hơn là zone không? Hệ thống peer-to-peer liên kết các máy tính (PC) ngang hàng nhau. Mỗi PC chạy bản game của riêng nó và trao đổi cập nhật thông tin với tất cả PC khác. Trong một hệ thống client/server, một PC được dùng làm máy chủ - server sẽ chứa và chạy game. Tất cả các PC khác đều là khách - client , chúng chỉ cập nhật nhân vật và thông tin từ máy chủ. Để tránh việc phải cần thêm một PC làm máy chủ, thông thường server cũng có thể đảm nhận vai trò của máy khách trong cùng lúc.

Peer-to-peer system thường được dùng nhiều trong những game mạng thế hệ đầu, nhưng ngày nay chúng trở nên hiếm vì có nhiều điểm dở khó cải thiện. Game Peer-to-peer chạy không thống nhất (còn tùy thuộc vào tốc độ từng máy và đường truyền), do đó một viên đạn có thể trúng vào nhân vật trong máy này nhưng lại trật trong máy khác cùng chơi. Bên cạnh đó, Peer-to-peer không thể hỗ trợ số lượng người chơi lớn. Chính vì vậy, ngày nay hệ thống client/server được dùng phổ biến. Hệ thống zone system thật ra cũng vẫn là client/server nhưng mạnh hơn nữa vì nó hỗ trợ đa server. Thế giới trong game sẽ được chia làm nhiều màn (zone) được điều khiển bởi những máy chủ riêng lẻ. Hệ thống Zone cho phép số lượng người chơi cực lớn cùng tham gia.

Peer-to-Peer... tối đa 4-5 người

Client/Server... tối đa 25-50 người chơi

Zone... vô số, tùy vào lượng server

Sau đây là những engine và authoring system đang được ưa chuộng trên internet:

3DState: Tên cũ là 3DMorfit (miễn phí), có nhiều hơn là một engine thông thường: Một bộ chương trình khá đầy đủ để xây dựng và điều chỉnh game - World Builder cho việc tạo màn chơi, Terrain Builder để phát sinh địa hình, và Developing Studio để phối hợp tất cả lại. Bên cạnh đó, 3DState hỗ trợ nhiều loại ngôn ngữ: Delphi, C++, VB và Javascript. Chỉ có điều, bạn sẽ phải trả 399 USD cho bản chuyên nghiệp nếu muốn có thêm nhiều tính năng mạnh. Địa chỉ: http://www.3dstate.com.

DarkBasic: Có phí, sử dụng ngôn ngữ Basic. DarkBasic có số lượng người dùng vô cùng lớn so với các engine khác vì là một công cụ thực sự mạnh để tạo nên những game chuyên nghiệp. Phiên bản mới hỗ trợ thêm BSP, Bump và Light mapping, cử động bằng khung xương, hệ thống hạt Particle System. Tuy nhiên về mạng, DarkBasic chỉ hỗ trợ Peer-to-peer. Địa chỉ: http://www.darkbasic.com.

3DGameMaker: Đây thực sự là “mì ăn liền” cho những bạn không thích lập trình. Là họ hàng của DarkBasic, 3DGamemaker hướng tới người dùng không chuyên và trở thành hệ thống tạo game đơn giản nhất. 3D GameMaker có một bộ thư viện nhân vật, dòng, âm thanh dựng sẵn khổng lồ. Người dùng không cần viết code, thậm chí không phải thiết kế nhân vật, vũ khí mà vẫn có thể tạo ra những game trông cũng rất... chuyên nghiệp như ai. Địa chỉ: http://t3dgm.darkbasic.com.

Game Maker: Miễn phí hoàn toàn. Dù authoring system này sử dụng công nghệ 2D nhưng bạn cũng có thể dùng nó để tạo ra những game thực sự chuyên nghiệp. Game Maker có cộng đồng người dùng khá lớn và được biết đến nhiều ở Việt Nam. Địa chỉ: http://www.cs.uu.nl/people/markov/gmaker/download.html.

RPG-Maker: Miễn phí, cũng là một 2D authoring system, chuyên về thiết kế game dạng nhập vai (RPG). Địa chỉ: http://www.makeruniverse.webcalifa.com.br/rm2k3/rm2k3v104. exe.

[Đầu trang]

THỬ DÙNG GAME MAKER ĐỂ LÀM MỘT TRÒ CHƠI ĐƠN GIẢN

Chơi game trên máy tính thiệt đã. Nhưng đã hơn nữa là làm một game theo ý mình và đưa cho người khác chơi. Thật không may, làm game cho máy tính nào phải là chuyện dễ. Những game xịn đang bán trên thì trường mà bạn đã chơi thường đuợc thiết kế khoảng từ một đến ba năm với một lực lượng kỹ sư, họa sĩ, nhạc sĩ,... hùng hậu. Kinh phí lên đến hàng triệu USD.

Vậy tức là tôi không thể tự làm game? May mắn là không. Dĩ nhiên, bỏ qua chuyện làm ra những game cỡ Heroes hay Age of Empires trong vài tuần. Những game đơn giản hơn như Tetris, Pacman, Space Invaders, v.v... cũng rất thú vị để giải trí và lại dễ dàng tạo ra. “Kẹt” một nỗi là chúng vẫn yêu cầu bạn phải là một tay lập trình cứng cựa để có thể điều quản hình ảnh, âm thanh cũng như việc tương tác với người chơi, v.v...

Nhưng bây giờ bạn đã có Game Maker. Game Maker được tạo ra để làm cho việc thiết kế những game như vậy dễ như... ăn chuối. Chẳng cần lập trình. Một hệ thống chỉ cần kéo và thả, ráp và nối cho phép bạn tạo ra game riêng của mình một cách nhanh chóng. Bạn chỉ cần nhập hình, sprites (các hình động) âm thanh vào và... khuấy đều. Và hơn thế, nếu bạn muốn game mình phức tạp và chuyên nghiệp, Game Maker cũng có sẵn một ngôn ngữ đơn giản cho bạn tùy biến.

Game Maker chỉ chuyên về game hai chiều (2D). Vậy nên sẽ chẳng có thế giới 3-D như Quake. Nhưng đừng để điều đó làm bạn thất vọng. Rất nhiều game hay như Age of Empires, Command & Conquer, và Diablo dùng kỹ thuật sprite hai chiều, mặc dù trông chúng rất 3-D. Với lại thiết kế game hai chiều dễ và nhanh hơn nhiều! Nhưng điều tuyệt nhất là Game Maker miễn phí!

Tìm hiểu khái niệm

Trước khi bắt tay vào làm game, bạn nên có vài khái niệm về chương trình. Game được tạo bằng Game Maker bởi một hay nhiều room. Room phẳng, không 3D, nhưng chúng có thể chứa những hình ảnh giả-3-D. Trong những room này, bạn đặt object, thứ bạn có thể định nghĩa qua chương trình. Những vật thể thông thường là tường, banh tưng, nhân vật chính, quái vật, v.v... Một số object (vật thể), như tường, chỉ nằm đó và chẳng làm gì cả. Những vật thể khác, như nhân vật chính, sẽ di chuyển và phản ứng theo nút người chơi bấm (từ chuột, bàn phím hay joystick) và phản ứng lẫn nhau. Ví dụ, khi nhân vật chính đụng vào quái vật, anh ta sẽ chết. Object là thành tố quan trọng nhất trong Game Maker, vậy chúng ta hãy bàn thêm về nó.

Trước tiên, hầu hết object cần có hình ảnh để chúng có thể xuất hiện trên màn hình. Những hình ảnh đó gọi là sprites. Sprite thường không là một ảnh đơn mà là một tập ảnh nối tiếp nhau để tạo thành hoạt hình. Bằng cách này, ta có thể làm nhân vật đi, trái banh xoay, phi thuyền nổ tung, v.v... Trong suốt game, sprite cho một object riêng biệt có thể thay đổi (như làm cho nhân vật trở nên khác đi khi anh ta bước sang trái hay phải). Bạn có thể tạo sprite theo ý muốn trong Game Maker hay tải chúng từ file bên ngoài (như GIF động,...).

Rồi sẽ có điều gì đó xảy ra cho object, gọi là event (sự kiện). Object có thể có một vài action (hành động) khi sự kiện xảy ra. Có hàng trăm sự kiện có thể xảy ra đối với object và nó cũng có chừng đó hành động để phản ứng trở lại. Ví dụ, sẽ có sự kiện “khởi tạo” khi object được tạo ra. Ví dụ, khi một trái banh được tạo ra, bạn có thể gán cho nó một loại hành động di chuyển. Khi hai object gặp nhau, sẽ phát sinh sự kiện “đụng chạm”. Trong trường hợp này, bạn có thể dùng nó để làm banh ngừng lại hay chuyển hướng (cũng có thể dùng nó để chơi một đoạn âm thanh). Khi người chơi bấm một nút trên bàn phím, sẽ có sự kiện keyboard event, v.v... Với mỗi object lúc thiết kế, bạn có thể gán cho nó rất nhiều hành động tương ứng với những sự kiện khác nhau (và tất cả những hành động để phản ứng đối với sự kiện, chúng ta gọi nó là phương thức hoạt động của vật thể).

Một khi bạn đã khai báo những object của mình rồi thì cũng chính là lúc định nghĩa các room - nơi để object tồn tại. Room có thể dùng làm màn chơi hay những vùng khác nhau trong game. Có những action có thể chuyển từ room này sang room khác. Room cơ bản phải có một cái nền. Nền có thể là một màu đơn giản hay là một hình ảnh. Những hình nền như vậy có thể được tạo ra trong Game Maker, hoặc bạn có thể tải chúng từ bên ngoài (thật ra nền có nhiều công dụng, nhưng mới đầu bạn chỉ cần nhớ là nó làm cho room đẹp hơn). Tiếp theo, bạn sẽ đặt object vào room. Bạn có thể đặt nhiều object giống nhau trong một room, chẳng gì phải lo cả. Như thế, ví dụ, bạn chỉ cần định nghĩa một bức tường một lần nhưng có thể xài nó ở nhiều nơi khác nhau. Tương tự với những object quái vật, miễn là chúng có cùng phương thức hoạt động.

Tóm lại, chúng ta có những thứ sau đây đóng vai trò chủ yếu:

Objects: Những thực thể trong game.

Rooms: Nơi chứa đựng object.

Sprites: Những hình ảnh (động) được dùng để biểu thị objects.

Sounds: Dùng trong game dưới dạng nhạc nền hay hiệu ứng âm thanh,...

Backgrounds: Ảnh dùng làm nền cho rooms.

Thật ra còn một yếu tố quan trọng nữa: Scripts, những mẩu mã lệnh nhỏ được dùng để mở rộng khả năng của Game Maker.

Bắt đầu!

Trước tiên, bạn nên tự mô tả game mình muốn làm (bạn nên thường xuyên làm điều này trước vì nó sẽ giúp bạn tiết kiệm rất nhiều thời gian sau này). Game chúng ta thử làm sẽ rất đơn giản: Một trái banh dội giữa các bức tường. Người chơi sẽ cố nhấp chuột vào banh. Mỗi lần anh ta thành công sẽ được tăng điểm.

Như vậy, chúng ta cần hai loại object: banh và tường. Chúng ta cũng cần hai loại sprite: một cho object banh và một cho object tường. Cuối cùng, chúng ta muốn máy phát ra một âm thanh nhỏ khi người chơi nhấp chuột trúng vào banh. Chúng ta sẽ chỉ dùng một room để làm game này. (Nếu không muốn tự mình làm, bạn có thể tải nó từ thư mục Examples với tên “touch the ball.gmd”.)

Trước tiên, chúng ta làm các sprite. Từ menu Add chọn Add Sprite (bạn cũng có thể dùng nút tương ứng trên thanh công cụ). Một form sẽ hiện ra. Trong trường Name, nhập vào “wall”. Chọn nút Load Sprite và chọn một hình (bạn có thể tìm thấy nó trong thư mục Maze). Xong, đóng form lại. Làm tương tự để tạo một sprite banh. Kế tiếp chúng ta sẽ xử lý phần âm thanh. Từ menu Add chọn Add Sound. Một form khác xuất hiện. Đặt tên cho âm thanh và chọn Load Sound. Chọn một âm thanh thích hợp và thử nghe nó có hay không bằng cách nhấp nút Play. Nếu bạn hài lòng rồi, đóng form lại.

Bước tiếp theo, chúng ta sẽ tạo ra hai object. Ta sẽ làm object bức tường trước. Một lần nữa, bạn vào menu Add, chọn Add Object. Một form phức tạp hơn sẽ xuất hiện. Bên trái là một số thông tin chung của object. Hãy đặt tên object của bạn và từ menu bung chọn đúng sprite bức tường. Đánh dấu kiểm hộp chọn Solid. Vậy là xong. Tiếp tục tạo object mới, đặt tên nó là ball, và gán cho nó sprite trái banh. Lần này khác với bức tường, chúng ta phải khai báo cách hoạt động của trái banh. Ở giữa, bạn sẽ thấy một danh sách rỗng cho sự kiện. Bên dưới nó là nút Add Event. Nhấn nút này, bạn sẽ thấy tất cả những sự kiện dựng sẵn. Chọn sự kiện creation. Sự kiện này được thêm vào danh sách sự kiện cho trái banh. Phía xa bên phải, bạn sẽ thấy tất cả những hành động dựng sẵn được xếp nhóm. Trong nhóm move, chọn action với tám mũi tên đỏ và kéo nó vào danh sách action ở giữa. Hành động này sẽ làm object di chuyển theo một hướng riêng biệt. Khi bạn thả nó vào danh sách action, một hộp thoại sẽ hiện ra để bạn chọn hướng chuyển động cho banh. Chọn cả tám mũi tên để tạo ra một hướng ngẫu nhiên. Bạn có thể giữ nguyên speed là 8. Đóng hộp thoại. Bây giờ, trái banh sẽ bắt đầu di chuyển ngay lúc nó được tạo ra. Kế đến, chúng ta phải xác định chuyện gì sẽ xảy ra khi có sự kiện banh va chạm với tường. Tiếp tục nhấn Add Event. Nhấn vào nút sự kiện collision và trong menu bung chọn vật thể wall. Với sự kiện này, ta cần hành động dội lại - bounce action. (Bạn có thể xem công dụng của những action bằng cách giữ yên chuột trên tên của nó.) Cuối cùng, chúng ta phải xác định chuyện gì sẽ xảy ra khi người chơi nhấp chuột trái vào banh. Chèn một sự kiện corresponding event và chọn chuột trái (left mouse) button từ menu bung. Với sự kiện này, ta cần vài hành động: một để phát ra âm thanh (có thể tìm trong nhóm Misc. actions) và một tăng điểm số (trong cùng nhóm), cùng hai hành động nữa để di chuyển banh đến vị trí và hướng mới (giống như trong sự kiện creation event). Với action sound, chọn âm thanh bạn muốn. Cho action score, nhập vào giá trị 1 và đánh chọn hộp Relative. Có nghĩa là 1 sẽ được thêm vào điểm hiện hành (nếu bạn lỡ làm sai, có thể nhấp đúp chuột vào action để thay đổi các tham số của nó).

Bây giơ, các vật thể đã sẵn sàng. Chúng ta sẽ làm room. Thêm một room mới vào game bằng menu Add. Bên phải, bạn sẽ thấy một room trống. Bên trái, bạn sẽ có một số thuộc tính để tinh chỉnh, như độ dài rộng của room. Và ở góc trái dưới, bạn có thể chọn một object từ menu bung. Bằng cách nhấp vào room, bạn có thể đặt object vào đó. Bạn có thể xóa bằng nút chuột phải. Hãy tạo một vòng khung xung quanh room bằng vật thể tường-wall object. Cuối cùng, đặt một hoặc hai object banh vào room. Sẵn sàng. Bây giờ là lúc bạn chơi thử game. Nhấn nút Run và xem chuyện gì xảy ra. Nếu bạn làm đúng thì trái banh sẽ bắt đầu di chuyển. Thử nhấp chuột vào nó và xem chuyện gì xảy ra. Bạn có thể ngưng trò chơi lại bằng phím Esc. Bạn có thể thay đổi thêm vài thứ theo ý thích!

Xin chức mừng, bạn đã làm ra một game đầu tiên cho mình!

[Đầu trang]
Trang chủ
Thư ngỏ
Nội lực "Peter Pan"
Cầu nối Intel Việt Nam
Chuyện trong tuần
Nhóm Frontpage
Cõi người ta
Kim cương doanh nghiệp
Bình luận thị trường
Cõi Mô-bai
Chuyên đề
Bổ ngửa
Nuôi hồn Robot
Túi càn khôn IT
Hồ lô biến
Cảm về Game
Nhật ký e-CHÍP
Bản quyền VASC Orient, Công ty phát triển phần mềm VASC
99 Triệu Việt Vương HN; Tel: (04) 9782235 • email: echip@vasc.com.vn