[Ký sự làm game] Chương 3: Engine hay không engine?

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?

 

Print Friendly, PDF & Email

7 thoughts on “[Ký sự làm game] Chương 3: Engine hay không engine?”

  1. Anh bổ sung thêm, làm engine phải làm thêm ngôn ngữ ở tầng script nữa! Rất là mất thời gian cho phần này luôn!
    Đội ngũ làm Unreal engine của Epic Games có khoảng 60 người! Ko phải tất cả đều làm engine nhưng đều tham gia vào sự phát triển của Unreal engine! Cụ thể, họ là game designer, artist, programmer, sử dụng và góp ý, cũng như tìm bug để engine luôn luôn phát triển!

    Do đó nếu em hiểu dc làm engine khó như thế nào, sẽ tốt hơn trước khi em bắt đầu!

    1. Em không kể phần này vì em không muốn đưa quá nhiều chi tiết kỹ thuật vào post, vốn không phải là mục tiêu của loạt bài. Nhưng thông tin anh đưa ra rất có ích, cảm ơn anh ạ!

  2. Developing a game engine here 😀
    Đối với mình, cách mà bạn thực hiện công việc mà bạn muốn rất quan trọng.

    Nói riêng về việc làm game engine, có rất nhiều cách tiến hành.
    Viết từ đầu với OpenGL/DirectX như Giang nói là một trong số đó, hơn hết đó có thể là thứ bạn đã trải qua và chưa mấy suôn sẻ.
    Cá nhân mình cũng đã thử viết engine, không chỉ một lần.

    Nhận định của mình đó là bài viết này theo hướng chia sẻ suy nghĩ về những việc bạn đã trải qua và có một kết luận nào đó cho bản thân. Nếu để nó trở thành một bài phân tích thật tổng quát để so sánh giữa sử dụng engine và làm engine, chắc sẽ cần đến vài trang và một cấu trúc bài viết thật chặt chẽ. Tuy nhiên đây là ký sự của tác giả nên điều đó tác giả quyết định :v.

    Các ý kiến của mình nhằm hỗ trợ người đọc hiểu rõ hơn về các quan điểm để có thể tìm ra chủ đề hẹp dễ dàng trao đổi hơn.

  3. Vâng và em đã và đang có suy nghĩ như vậy . và bây giờ đắm chìm không có lối ra . càng vào càng muốn đi sâu xuống . Thực sự chưa mường tượng ra được khối kiến thức khổng lồ cần nắm để có thể tiếp tục cuộc hành trình . Cảm thấy mình thật nhỏ bé .
    Đối với em việc tiếp cận code từ đầu mang lại nhiều thứ khá mới mẻ và bản thân cảm thấy hứng thú với việc đó nên sẽ thiên về ” code từ đầu” hơn .

  4. Bài viết hữu ích, mình đồng tình với những gì tác giả đã đưa ra. Có lẽ sẽ giới thiệu các bạn newbie muốn đi vào con đường làm game đọc bài này để có định hướng tốt hơn :3

    Well, riêng trường hợp của mình thì lại nằm ở đâu đó ở giữa. Tức là mình đang maintain một cái engine, và mình dùng engine đó để làm game của mình. Game cần features gì, hay có bug, hay phần code nặng performance, thì lại qua engine. Nghĩa là vẫn gọi là làm engine, tuy nhiên không phải để học (một phần nhỏ trong đó, nhưng rất ít) mà để phục vụ cho mục tiêu của mình (là cái game).

Leave a Reply

Your email address will not be published. Required fields are marked *