• Thứ Ba, 20/10/2009 07:36 (GMT+7)

    Physics engine – Engine vật lý

    Khi người ta nói đến khía cạnh vật lý học trong một trò chơi, thì thường sẽ là việc các định luật vật lý chi phối phương thức chuyển động của các vật thể lớn dưới tác dụng của trọng lực và các loại lực khác (như lực ma sát chẳng hạn). Đặc điểm đó thường được người chơi quan sát kỹ qua một số hình thái như lửa khói, đường đạn, các vụ nổ hay sự phá hủy các khối vật liệu.

    Trong một game đơn giản, một số chuyển động vật lý học đã được lập trình sẵn cho riêng game đó. Chẳng hạn, game chỉ có duy nhất tình tiết bắn cung thì đường bắn của mũi tên sẽ được xây dựng sẵn và “ráp” vào, do đó mũi tên sẽ được điều khiển bay theo một quỹ đạo nhất định. Bạn có thể thấy điều này ở các game flash hiện nay. Trong một game phức tạp hơn, bên cạnh tình tiết bắn cung thì có thêm tình tiết bắn súng. Rõ ràng là quỹ đạo của mũi tên nói trên không thể dùng cho viên đạn bởi những sự khác biệt về tầm bắn giữa cung và súng, tốc độ bay giữa mũi tên và viên đạn v.v. Vì vậy, người lập trình game sẽ phải viết thêm 1 quỹ đạo cho viên đạn. Nói rộng ra, nếu có n vật thể bay thì người lập trình game sẽ phải viết n quỹ đạo cho n vật thể bay đó.

    Để giải quyết bài toán n quỹ đạo, người ta sử dụng physics engine – một chương trình máy tính (computer program) được dùng để mô phỏng các định luật vật lý Newton trong các môi trường khác nhau. Về cơ bản, physics engine có đủ các thuật toán cần thiết để mô phỏng các quỹ đạo: nếu “đầu vào” là mũi tên thì physics engine sẽ cho “đầu ra” là quỹ đạo của mũi tên, còn nếu “đầu vào” là viên đạn tất nhiên “đầu ra” sẽ là quỹ đạo viên đạn. Thông qua physics engine, n quỹ đạo của n vật thể bay sẽ được tính toán và mô phỏng, người lập trình game sẽ không cần phải viết n quỹ đạo. Như vậy, lợi điểm đầu tiên khi dùng physics engine là tiết kiệm được thời gian.

    Muốn có thêm các hiệu ứng vật lý cho tựa game mới trên nền physics engine đang dùng, người ta có thể bổ sung dữ liệu vào physics engine. Chẳng hạn, thay vì người chơi chỉ có thể tìm cửa để vượt qua một tường gạch “không có gì có thể phá vỡ” trong phần 1, ở phần 2 nếu có sự bổ sung mức độ tổn hại của gạch trước sức công phá của đạn pháo thì người chơi có thể dùng đạn pháo bắn vỡ tường thành để tạo lỗ hổng chui lọt qua, chẳng cần đi tìm cửa. Vì vậy, lợi điểm thứ hai khi dùng physics engine là có thể nhanh chóng nâng chất lượng của phiên bản game mới thông qua việc nâng cấp physics engine.

    Dù có 2 lợi điểm rõ ràng như trên song không phải lúc nào dùng physics engine cũng là tối ưu. Quá trình tính toán của physics engine sẽ khiến một trò chơi đơn giản trở nên nặng nề về nhiều mặt như dung lượng game lớn không cần thiết (chứa nhiều dữ liệu thừa), các yêu cầu về phần cứng (CPU, GPU phải đáp ứng được sức tính toán của physics engine v.v). Mặt khác, việc sử dụng physics engine sẽ tốn một khoản chi phí, tối thiểu cũng là chi phí ứng dụng physics engine.

    Physics engine được phân chia thành 2 dạng là scientific engine và real-time physics. Scientific engine ưu tiên tính chính xác cao, áp dụng nhiều trong lĩnh vực nghiên cứu. Real-time physics thì được dùng để tăng cường độ thực của vật lý học trong các game nhưng ưu tiên tốc độ mô phỏng tính vật lý cao hơn. Một số real-time physics được biết nhiều hiện nay là: Havok, PhysX, Farseer Physics Engine.

    Hoàng Kim

    ID: G0910_94