Cuối chương trước, mình có nêu một vấn đề về suy nghĩ, tư tưởng của nhiều bạn, trong số đó có mình trước đây về việc dùng game engine thay vì code từ đầu. Ban đầu mình định phân tích ngay trong phạm vi bài viết trước, nhưng nghĩ lại thì vấn đề này xứng đáng có một chương riêng để đem ra thảo luận.

Tư tưởng tôn thờ việc code từ đầu thay vì dùng engine, theo quan sát của mình, cực kỳ phổ biến trong những bạn sinh viên, hoặc những bạn mới bắt đầu vào ngành game. Mình có gặp một vài anh lớn tuổi và nhiều kinh nghiệm cũng có tư tưởng phần nào tương tự, tuy nhiên cách những anh này bày tỏ quan điểm không mạnh bạo như nhóm đối tượng trên. Trước hết, mình sẽ thử nêu ra những quan điểm của mình hồi đó về việc sử dụng engine, để xem bạn có suy nghĩ tương tự không, hoặc đã từng có.

Mình khẳng định, code từ đầu một game chỉ sử dụng OpenGL hay DirectX thực sự là một viễn cảnh hết sức lôi cuốn và không kém phần ha-oai . Ngoài ra, hiểu biết về cách hoạt động của những thứ mà mình trực tiếp dùng là rất có ích. Nhìn sang “lũ hạ đẳng dùng engine” chỉ biết kéo một mô hình 3D vào mà không biết cấu tạo của nó ra sao, ánh sáng hoạt động như thế nào, hay các đối tượng vật lý tương tác với nhau kiểu gì, trong khi bản thân mình lại rõ đến từng chân tơ kẽ tóc. Nghĩ đến cảnh giải thích từng li từng tý trong lúc “lũ hạ đẳng” chỉ có há hốc mồm chảy nước miếng, đã là phê lòi rồi .  Và cuối cùng, hồi ấy mình còn non và thiếu kinh nghiệm, lúc nào cũng muốn tự làm, thay vì dựa dẫm vào công sức của người khác - một game engine.

Nhưng làm một game/engine từ đầu lại không phải là một ý hay, ít nhất với mục tiêu là làm game, vì sao?

Thứ có thể nhận thấy rõ ràng nhất đó là công sức bỏ vào. Nếu làm hoàn toàn từ đầu với OpenGL hoặc DirectX, bạn sẽ phải nghiên cứu toàn bộ các phần: các thành phần của graphics pipeline, cấu tạo của model 3D, cách load chúng vào bộ nhớ và render chúng lên trên màn hình, rồi phủ texture lên như thế nào, ánh sáng ra sao, và còn ti tỉ thứ khác. Đó mới là engine đồ hoạ, một trong rất nhiều vấn đề khác của một game engine . Trong khi một người khác, dùng game engine có sẵn, có thể đã hoàn thành một con game trong thời gian đó rồi .

Cũng cần lưu ý rằng, những game engine như Unity hay Unreal được tạo ra hoàn toàn không phải bởi công sức của một người, mà là hàng chục người, thậm chí hàng trăm người - đều là những người có kinh nghiệm lâu năm và kiến thức uyên thâm. Liệu bạn có thể làm thay công việc của tất cả bọn họ? Tại sao lại phải ngồi đục đẽo lại cái bánh xe, trong khi bạn có thể lấy cái bánh xe của người khác và tạo ra một cái ô tô của riêng mình?

Mình cũng đã từng mày mò làm một engine và thất bại thảm hại . Quá nhiều khái niệm phải nắm, quá nhiều thuật toán phải thực hiện, quá nhiều sách phải đọc và những quyển sách này bao gồm một phạm vi kiến thức quá rộng. Nhưng quá trình này không hẳn là đống rác, vì mình có thu thập thêm được kha khá kiến thức, cũng như nhận ra một điều hết sức quan trọng: game và engine là hai sản phẩm hoàn toàn khác nhau, và chúng phục vụ những nhóm đối tượng khác nhau.

Nếu bạn làm engine, đối tượng phục vụ chính của bạn là những người phát triển game (game developer), bao gồm cả lập trình viên (programmer), hoạ sĩ (2D artist), dựng hình (3D artist), diễn hoạt (animator), thiết kế màn chơi (level design), kể cả người kiểm thử (tester) và đảm bảo chất lượng (QA), tóm lại là tất cả những người tham gia vào phát triển một con game. Những thứ bạn cần quan tâm, bên cạnh những gì mình vừa liệt kê ở trên, bao gồm thư viện lập trình có dễ hiểu không, quy trình import các tài nguyên vào có hiệu quả và dễ nắm bắt cho các artist không, các công cụ để dựng một màn chơi có trực quan không, vân vân và mây mây.

Nếu bạn lập trình game, bạn sẽ phải giải quyết các bài toán khác. Lưu ý là mình chỉ nói trong phạm vi lập trình thôi, các công việc khác như viết cốt truyện, thiết kế màn chơi, cân bằng thông số, rồi làm sao để tính năng này tính năng nọ ra tiền… mình tạm thời chưa bàn tới. Bạn được yêu cầu thực hiện một tính năng, đôi khi yêu cầu này rất mơ hồ (“Làm cho anh một con boss thật TO nhé, AI phải khôn hơn tí”), nhiệm vụ của bạn là phải phối hợp với các game designer, đôi khi là các artist và các lập trình viên khác để tìm ra cách giải quyết của vấn đề, sao cho ảnh hưởng tới những tính năng hiện tại của dự án là ít nhất có thể, không thì càng tốt. Một ví dụ thực tế: engine cung cấp cho bạn một hệ thống camera hiển thị chính xác những gì được đặt trước mặt nó, game designer yêu cầu một con game góc nhìn thứ ba, và bạn là người thực hiện. Cách bạn giải quyết vấn đề sẽ quyết định trực tiếp trải nghiệm của game.

Do vậy, để trả lời cho câu hỏi có nên dùng engine hay không, bạn nên trả lời câu hỏi này: bạn muốn làm game hay làm engine?