Động cơ vật lý tùy chỉnh của Easel: Giải pháp rollback tăng dần cho game multiplayer quy mô lớn
Easel đã giới thiệu một động cơ vật lý mới được xây dựng riêng để giải quyết vấn đề hiệu năng trong các game multiplayer lớn. Bằng cách chỉ thực hiện chụp nhanh và khôi phục (rollback) trên các đối tượng thực sự thay đổi, công nghệ này giúp giảm tải 30-50 lần so với các phương pháp truyền thống.

Easel, nền tảng phát triển game, đang đặt mục tiêu tạo ra những tựa game multiplayer quy mô lớn mà người chơi có thể dành hàng giờ để khám phá. Tuy nhiên, một thách thức lớn trước đây là các động cơ vật lý thương mại sẵn có yêu cầu phải chụp nhanh (snapshot) và khôi phục (rollback) toàn bộ thế giới game mỗi khung hình để hỗ trợ kiến trúc multiplayer dự đoán. Điều này tạo ra gánh nặng tính toán quá lớn, khiến các thế giới game bị giới hạn kích thước.
Giờ đây, Easel đã giải quyết vấn đề này bằng một động cơ vật lý tùy chỉnh mới. Thay vì xử lý toàn bộ, động cơ này chỉ chụp nhanh và khôi phục những phần của thế giới thực sự thay đổi. Trong một con tàu vũ trụ lớn với hàng ngàn vật thể, có thể chỉ có dưới 30 vật thể thay đổi mỗi khung hình khi người chơi di chuyển. Với việc giảm thiểu dữ liệu phải xử lý từ 30-50 lần, các game multiplayer với thế giới rộng lớn trên Easel giờ đây đã hoàn toàn khả thi.
Dưới lớp vỏ kỹ thuật
Động cơ vật lý mới của Easel được xây dựng riêng biệt để tối ưu hóa cho nền tảng này, hỗ trợ đầy đủ các tính năng nhưng hiệu quả hơn nhiều. Dưới đây là những tính năng nổi bật giúp nó trở nên đặc biệt.
Chế độ ngủ (Sleep)
Cách nhanh nhất để xử lý một tác vụ là không phải làm gì cả. Khi một vật thể ở trạng thái ngủ, nó không yêu cầu bất kỳ thao tác chụp nhanh, khôi phục hay tính toán vật lý nào cho đến khi thức dậy.
Khác với các động cơ khác chờ đợi vài giây bất hoạt, Easel đưa vật thể vào chế độ ngủ ngay lập tức khi vận tốc của chúng về 0 (trong một ngưỡng sai số nhỏ). Một trường hợp phức tạp là trọng lực, lực này có thể giữ cả thế giới thức giấc. Easel theo dõi các lực và phản lực trên mọi vật thể để xác định xem chúng có cân bằng hay không. Chỉ cần một vật thể trong chồng vật thể có lực không cân bằng, cả chồng sẽ giữ thức giấc cho đến khi đạt trạng thái cân bằng.
Lập chỉ mục không gian (Spatial Indexing)
Giống như nhiều động cơ vật lý khác, Easel sử dụng Phân cấp thể tích giới hạn (Bounding Volume Hierarchy - BVH) ở giai đoạn rộng để tìm kiếm va chạm tiềm năng nhanh chóng. Tuy nhiên, thuật toán BVH của Easel được tối ưu hóa để giảm thiểu việc chụp nhanh và khôi phục không cần thiết, chỉ thực hiện cân bằng lại tăng dần khi cây đang thay đổi.
Một mẹo khác là BVH của Easel cũng theo dõi Danh mục (Categories) của từng va chạm, giúp tăng tốc đáng kể các truy vấn phổ biến trong game. Ví dụ, khi một bot cần tìm người chơi gần nhất, việc tìm kiếm một "Kim" trong đống "Rơm" sẽ nhanh hơn nhiều nếu biết cách lọc đúng danh mục.
Di chuyển (Stepping)
Việc điều khiển nhân vật đi từng bước là phổ biến nhưng lại phức tạp trong vật lý. Một phương pháp thường thấy là thêm vận tốc cho bước đi, sau đó trừ đi nó sau khi mô phỏng vật lý hoàn tất. Tuy nhiên, vấn đề phát sinh khi nhân vật va chạm với vật cản giữa chừng. Ngay cả khi động cơ vật lý triệt tiêu vận tốc va chạm, việc trừ đi vận tốc bước đi sau đó sẽ tái tạo ra lực nảy ngược lại, khiến nhân vật bị nảy lung tung.
Easel tích hợp tính năng bước đi không nảy trực tiếp vào bộ giải (solver). Sử dụng ForcefulStep với tham số restitution=0, Easel đảm bảo bước đi không gây nảy lại. Bí quyết ở đây là Easel xử lý việc bước đi tương tự như việc sửa chữa vị trí chồng lấn. Lực đẩy nhân vật ra khỏi tường được áp dụng ngay lập tức vào vị trí mà không thay đổi vận tốc, giúp vận tốc đẩy không kéo dài sang khung hình tiếp theo.
Phát hiện va chạm liên tục (Continuous Collision Detection)
Tính năng này rất quan trọng để xử lý va chạm giữa các vật thể di chuyển nhanh như hai quả cầu lửa. Nếu chỉ kiểm tra va chạm một lần mỗi khung hình, ta có thể bỏ lỡ thời điểm chính xác hai quả cầu chạm nhau.
Easel thực hiện phát hiện va chạm liên tục bằng cách quét và đúc hình dạng như các động cơ khác, nhưng có sự khác biệt lớn trong cách xử lý. Trong khi động cơ Rapier có thể cho kết quả sai khi quả cầu lửa chạm gương ngay đầu khung hình, hoặc Box2D 3.0 không hỗ trợ va chạm động-động, thì Easel giải quyết va chạm trước, sau đó mới tìm kiếm thời điểm va chạm. Điều này tránh được việc quét theo hướng sai và đảm bảo tính chính xác cao hơn.
Vật thể có thể tự di chuyển
Một trường hợp đặc biệt trước đây là vật thể có vận tốc nhưng không có va chạm (collider) sẽ không di chuyển. Easel đã thay đổi điều này. Giờ đây, nếu bạn cấp vận tốc cho một vật thể, nó sẽ tự di chuyển ngay cả khi không có khối lượng hoặc va chạm. Điều này hữu ích để nhóm các sprite lại với nhau hoặc tạo các bảng hiệu đơn giản trôi nổi trên màn hình.
Động cơ vật lý mới này được xây dựng dựa trên các thuật toán phát hiện va chạm của thư viện Parry (mã nguồn mở từ Dimforge). Nhờ việc chỉ chụp nhanh và khôi phục các phần thay đổi, Easel giờ đây cho phép các nhà phát triển tạo ra những thế giới game rộng lớn hơn bao giờ hết.
Bài viết liên quan

Công nghệ
Python 3.16 sẽ ngừng phát hành trình cài đặt .exe truyền thống
03 tháng 5, 2026

Công nghệ
Bóng tối của trí tuệ nhân tạo: Chatbot Grok và ChatGPT bị cáo buộc gây ảo tưởng nghiêm trọng cho người dùng
03 tháng 5, 2026

Công nghệ
Dự án công nghệ của Ngân hàng Trung ương Anh được khen ngợi: Một ví dụ hiếm hoi thành công trong khu vực công
03 tháng 5, 2026
