Đã Đến Lúc Bắt Đầu Một Dự Án Công Cụ 3D Dành Cho Thiết Bị Di Động.
Đã đến lúc khởi động một dự án động cơ 3D dành riêng cho thiết bị di động
Vào cuối năm 2011, công ty Jianyue (Giản Hành) mà chúng tôi sáng lập đã được Tập đoàn Giải trí Văn hóa Alibaba (Alibaba Culture & Entertainment Group) mua lại toàn bộ cổ phần. Toàn bộ nhân sự của Jianyue sau đó đã chuyển đổi thành một nhóm làm game trực thuộc Alibaba, tập trung vào lĩnh vực giải trí rộng lớn.
Khi quá trình mua lại này được hoàn tất, tôi nhận ra mình có thể suy nghĩ về tương lai theo một góc độ mới. Việc thiết kế và xây dựng một động cơ 3D hoàn toàn mới có thể được khởi động lại. Trong giai đoạn hoạt động của Jianyue, chúng tôi từng ấp ủ ý tưởng này nhưng chưa thể thực hiện, chủ yếu vì nguồn lực có hạn và phải ưu tiên cho việc phát triển sản phẩm có lợi nhuận. Còn đối với Alibaba, việc đầu tư vào một dự án ít sinh lời trong ngắn hạn nhưng lại mang lại giá trị chiến lược dài hạn là điều hoàn toàn tự nhiên.
Trên thị trường hiện tại đã tồn tại rất nhiều động cơ 3D xuất sắc như Unity - hiện đang phổ biến nhất, hay Unreal - có tiếng về chất lượng cao, cùng nhiều động cơ mã nguồn mở chất lượng tốt. Vậy tại sao chúng ta còn cần xây dựng một động cơ mới từ đầu?
Tôi đã suy nghĩ kỹ về câu hỏi này. Dù Unity và Unreal rất tuyệt vời, nhưng ngay từ đầu chúng không được thiết kế dành riêng cho nền tảng di động. Những hệ thống lâu đời đương nhiên có nhiều chi tiết hoàn thiện mà các sản phẩm mới khó sánh được, nhưng cũng dễ bị gánh nặng lịch sử cản bước phát triển. Đặc biệt đối với thiết bị di động, yếu tố then chốt không nằm ở tốc độ xử lý hay hiệu ứng hình ảnh hoa mĩ, mà là việc tối ưu hóa hiệu suất tiêu thụ năng lượng và quản lý bộ nhớ hiệu quả.
Xét về thực tế tại Trung Quốc, chúng ta cần các giải pháp quản lý và cập nhật tài nguyên linh hoạt hơn cho game di động - một lĩnh vực mà Unity vốn không mạnh. Với tư cách là một động cơ đóng nguồn, rất khó để người dùng cải tiến sâu sắc các cơ chế cốt lõi của Unity.
Hiện nay chúng tôi đã hợp tác thành công với Unity và sở hữu toàn bộ mã nguồn của họ. Công ty cũng đã thành lập một nhóm chuyên trách duy trì và hỗ trợ kỹ thuật mã nguồn Unity cho các nhóm phát triển khác. Trong tình huống này, việc xây dựng một hệ thống tương tự Unity là không cần thiết - bất kỳ nhu cầu nào chúng ta hoàn toàn có thể phát triển trực tiếp trên mã nguồn Unity. Điều tôi mong muốn là một thứ hoàn toàn mới mẻ.
Tôi đã hình dung ra động cơ mới với những đặc điểm nổi bật sau (và thực tế tôi đã bắt đầu triển khai):
-
Sớm phát hành theo giấy phép mã nguồn mở MIT, bao gồm phần lõi động cơ và toàn bộ chuỗi công cụ hỗ trợ. Việc duy trì mô hình đóng nguồn là không khả thi, lợi ích của mã nguồn mở đã được chứng minh rõ ràng qua dự án Skynet. Hơn nữa, do có hợp tác bảo mật với Unity, việc công bố mã nguồn sớm và duy trì phát triển theo hướng mở sẽ giúp loại bỏ mọi nghi ngờ - chúng tôi cam kết sẽ không sử dụng bất kỳ dòng mã nguồn nào của Unity.
-
Tối ưu hóa chuyên biệt cho thiết bị di động, phần rendering sẽ dựa trên OpenGL ES 3.0, hướng đến thị trường 2 năm tới. Nâng cao yêu cầu phần cứng giúp đơn giản hóa nhiều thiết kế phức tạp không cần thiết - tương tự như việc cách đây một thập kỷ, các động cơ thường phải tích hợp cả pipeline cố định lẫn pipeline lập trình được, còn ngày nay không còn hệ thống nào còn giữ lại kiến trúc cũ này. Khi giới hạn ở OpenGL ES 3.0, chúng ta có thể tự tin sử dụng định dạng texture ETC2 thống nhất (không cần bận tâm đến định dạng pvr đặc thù của Apple), triển khai rendering instance cho nhiều đối tượng, áp dụng công nghệ MRT để xây dựng mô hình ánh sáng deferred shading, v.v.
-
Khác biệt lớn nhất so với các động cơ hiện tại là tôi sẽ thiết kế kiến trúc client-server ngay từ đầu - phần editor và dự án sẽ chạy trên hai thiết bị khác nhau. Trong giai đoạn phát triển, nhà lập trình buộc phải chạy trực tiếp dự án trên thiết bị thật, biến smartphone/tablet thành màn hình hiển thị thứ hai chính thức, thay vì cách làm truyền thống của Unity là phát triển trên PC và chỉ upload lên thiết bị khi cần kiểm thử. Nhờ đó, toàn bộ quá trình phát triển, lập trình viên có thể theo dõi sát sao hiệu suất thực tế trên thiết bị: nhiệt độ máy, tỷ lệ khung hình, khả năng quản lý RAM, tính hợp lý của thao tác điều khiển… Mọi lúc, lập trình viên có thể dễ dàng kết nối và kiểm thử trên các thiết bị phần cứng khác nhau, loại bỏ hoàn toàn quy trình đóng gói phức tạp.
-
Tập trung vào tính dễ sử dụng của công cụ. Tương tự cơ chế component của Unity nhưng không sao chép nguyên mẫu. Sử dụng kiến trúc ECS (Entity - Component - System) làm nền tảng cốt lõi cho động cơ.
Về mặt triển khai kỹ thuật, tôi đã có những lựa chọn chiến lược:
-
Sử dụng bgfx làm nền tảng rendering thay vì xây dựng từ đầu. Đây là công việc phức tạp đòi hỏi đội ngũ giàu kinh nghiệm. Trong khi đó, mục tiêu của chúng ta không phải tối ưu hiệu năng ở tầng thấp nhất, mà là tập trung vào trải nghiệm người dùng. bgfx đã tích hợp thành công đa nền tảng trong nhiều năm qua, tác giả dự án có nền tảng phát triển game vững chắc, là lựa chọn cực kỳ đáng tin cậy.
-
Toàn bộ khung sườn hệ thống xây dựng bằng ngôn ngữ Lua, chỉ những module yêu cầu hiệu năng cực cao mới dùng đến C/C++ để đóng gói thành các thư viện chặt chẽ, sau đó gọi từ Lua. Không sử dụng C/C++ để viết bất kỳ phần framework nào. bgfx cung cấp giao diện C99 đầy đủ, hoàn toàn có thể bao bọc để tương tác với Lua - phần việc này tôi đã triển khai gần xong. Đối với module animation, tôi chọn thư viện ozz-animation, đây cũng là thư viện tuân thủ nguyên tắc đóng gói cao, chỉ cần bọc nhẹ là có thể dùng trực tiếp trong Lua. Các phần