nói dối e blog

Thiết Kế Cuộc Đua Ngân Hà

Trong số những trò chơi thẻ bài xây dựng động cơ, Race for the Galaxy (RFTG) luôn nằm trong top những tựa game yêu thích của tôi. Dù đã trải qua nhiều năm phát triển, tôi vẫn tin rằng đây là mẫu game thẻ bài xây dựng động cơ xuất sắc nhất. Gần đây, bài phát biểu của tác giả Tom Lehmann tại hội nghị GDC 2018 đã mang đến cho tôi nhiều cảm hứng mới mẻ, vì vậy tôi muốn chia sẻ lại những điểm nổi bật nhất.

Kỹ Thuật Loại Trừ Và Quản Lý Không Gian Trong Động Cơ Game

Hôm nay chúng ta hãy cùng khám phá một chủ đề thú vị về mô-đun Culling trong các động cơ game hiện đại. Đây là một thành phần then chốt giúp tối ưu hiệu suất rendering, đặc biệt khi xử lý những cảnh game phức tạp với hàng ngàn đối tượng.

Vai trò của Culling trong rendering

Khi một cảnh game chứa hàng chục nghìn đối tượng có thể render, nhưng chỉ có một phần nhỏ thực sự xuất hiện trên màn hình, việc áp dụng kỹ thuật Culling trở nên cực kỳ quan trọng. Mục tiêu chính của Culling là loại bỏ sớm những đối tượng không cần render, tránh việc gửi dữ liệu vô ích đến GPU, từ đó tiết kiệm băng thông CPU-GPU và tăng tốc độ rendering.

Lựa Chọn Mô-Đun UI Trong Phát Triển Game

Trong quá trình phát triển game (bao gồm cả engine), khi đề cập đến mô-đun UI, thường có hai khái niệm cần phân biệt rõ:

  1. UI dành cho công cụ phát triển - giao diện sử dụng trong quá trình xây dựng engine hoặc công cụ hỗ trợ nhà phát triển.
  2. UI dành cho game - giao diện trực tiếp xuất hiện trong sản phẩm game hoàn chỉnh.

Hai loại UI này thường bị trộn lẫn trong cùng một mô-đun. Ví dụ, Unity thời kỳ đầu đã tận dụng luôn hệ thống UI của công cụ phát triển để phục vụ cho việc xây dựng giao diện game. Tuy nhiên, các nhà phát triển nhanh chóng nhận ra rằng UI tối ưu cho công cụ (với yêu cầu hiển thị dữ liệu phức tạp, hỗ trợ sửa đổi tham số) lại không phù hợp với trải nghiệm người chơi. Điều này dẫn đến sự bùng nổ các plugin UI của bên thứ ba, và cuối cùng buộc Unity phải xây dựng lại hệ thống UI chuyên dụng cho game.

Quản Lý Font Chữ Động Trong Hệ Thống Render Game

Trong bài viết trước, tôi đã chia sẻ về thiết kế module giao diện người dùng (UI) và một trong những thách thức cốt lõi khi triển khai module này chính là bài toán render chữ. Khác với hệ thống chữ viết phương Tây chỉ gồm vài chục ký tự, bảng chữ Hán với hàng vạn ký tự khiến việc nướng toàn bộ glyph vào texture trở nên thiếu hiệu quả. Phương pháp lưu trữ tĩnh chỉ phù hợp với các dự án sử dụng giới hạn font chữ, nhưng với các ứng dụng đa dạng font như game mobile hiện đại, chúng ta cần một giải pháp linh hoạt hơn.

Bao Bọc Đối Tượng Khối Bộ Nhớ Trong Lua

Gần đây, tôi đã thực hiện một số cải tiến cho phần bọc Lua của thư viện bgfx. Do đã thay đổi ngữ nghĩa của API gốc, tôi cần ghi lại chi tiết những thay đổi này.

Trong các thư viện đồ họa 3D, các API thường yêu cầu xử lý nhiều thao tác trên các khối bộ nhớ. Việc tạo lập buffer, texture hay shader đều cần cung cấp các khối dữ liệu đầu vào. Phần lớn các khối dữ liệu này là chỉ đọc, chỉ một phần nhỏ cần hỗ trợ ghi lại. Đối với dữ liệu chỉ đọc, lớp bao bọc có thể dùng chuỗi Lua (Lua string) để thay thế, còn với dữ liệu có thể ghi thì dùng userdata.

Một Số Cải Tiến Cho Mô Hình Đồng Thời Của Skynet

Mô hình xử lý song song Skynet và một số hướng cải tiến

Skynet được xây dựng dựa trên nền tảng của một hệ thống phân phối tin nhắn đa luồng. Mỗi dịch vụ trong hệ thống đều sở hữu một hàng đợi tin nhắn riêng. Bất kỳ dịch vụ nào cũng có thể gửi tin nhắn đến hàng đợi của dịch vụ khác, nhưng chỉ có thể đọc và xử lý tin nhắn từ hàng đợi của chính mình.

0%