
Về cơ bản, có hai cách để ghi nhận đường đạn trong trò chơi bắn súng, đó là hitscan và mô phỏng đạn đạo. Hitscan đơn giản hơn, chỉ cần di chuyển con trỏ và nhấn chuột vào đối thủ là game ghi nhận bắn trúng. Còn đối với mô phỏng đạn đạo (projectile ballistic), mỗi phát súng sẽ được CPU trong máy tính hoặc máy chơi game tính toán các tác động cụ thể từ môi trường, từ hiệu ứng vật lý và những yếu tố khác, thậm chí cả trọng lực của trái đất trước khi xác định liệu phát súng đó có trúng mục tiêu hay không.
Mô phỏng đạn đạo (projectile ballistics)
Trong giai đoạn đầu của việc phát triển ngành công nghiệp game, nhiều trò chơi đã sử dụng kỹ thuật raycasting, biến không gian 2D thành bản đồ 2D nhìn từ trên cao. Kỹ thuật này cho phép các nhà phát triển xác định vật thể đầu tiên 'đường ray' tiếp xúc, có thể coi như vật thể gần nhất mà người chơi thấy trong thế giới ảo. Điều này đã đặt ra câu hỏi, nếu áp dụng raycasting để xác định đường đạn trong game bắn súng thì sao? Và từ ý tưởng đó, hitscan đã ra đời.

Trong hầu hết các trò chơi bắn súng, hitscan được sử dụng để mô phỏng đường đạn. Engine mô phỏng vật lý của game sẽ thực hiện ba nhiệm vụ chính theo các bước sau: 1. Xác định hướng của vũ khí đang nhắm
2. Tạo ra một đường ray 2D từ vị trí ngắm đến điểm đích đã xác định trước, gọi là điểm A đến điểm B
3. Sử dụng raycasting để xác định xem đường ray này có đi qua vật thể trong màn chơi hay không

Sau bước thứ 3, nếu viên đạn từ điểm A đến điểm B chạm vào vật thể, engine vật lý sẽ thông báo cho mã nguồn game biết viên đạn đã bắn trúng mục tiêu. Các dòng code khác sau đó sẽ xác định vị trí viên đạn chạm vào như tay, chân, bụng, ngực hoặc đầu, từ đó tính toán sát thương gây ra bởi phát súng đó, và hiển thị chính xác trên màn hình. Hitscan đơn giản nhưng có thể trở nên đa dạng với một số thay đổi trong thuật toán và cách hoạt động của mỗi loại vũ khí. Raycasting từ vị trí ngắm đến điểm đích xa có thể hỗ trợ nhiều tính năng như:
1. Một phát súng có thể trúng nhiều mục tiêu trong một đường thẳng, như khẩu railgun trong Quake
2. Loại bỏ việc định rõ điểm đích để tạo ra vũ khí laser có tầm bắn rất xa
3. Tính năng phản xạ giúp viên đạn bị dội lại, như kỹ năng phản xạ của Genji trong Overwatch

Ưu điểm của raycasting là thuật toán đơn giản và nhanh chóng được CPU xử lý, không yêu cầu việc tạo ra thuật toán phức tạp sử dụng bộ nhớ hoặc khả năng tính toán của chip xử lý để mô phỏng viên đạn. Tuy nhiên, điều này cũng đồng nghĩa với việc, trong các trò chơi bắn súng trực tuyến sử dụng cơ chế hitscan để xác định việc bắn trúng mục tiêu, kỹ sư phát triển netcode không cần phải dành quá nhiều thời gian để đồng bộ hóa thời gian của tất cả client trong cùng một trận đấu. Việc điều chỉnh sự giật của súng cũng đơn giản hơn, chỉ cần tạo ra một mẫu spray pattern cố định và vũ khí sẽ vận hành theo code đã có sẵn.
Chính vì đơn giản nên hầu hết các tựa game bắn súng đầu tiên đều sử dụng kỹ thuật hitscan để mô phỏng đường đạn, như Wolfenstein 3D, Doom chẳng hạn. Tuy nhiên, hiện nay vẫn có các game tiếp tục sử dụng hitscan để mô phỏng đường đạn như một số nhân vật trong Overwatch (Soldier 76, McCree hoặc Widowmaker) hoặc hầu hết các phiên bản của Call of Duty.



Bởi vì đơn giản nên hitscan cũng tạo ra nhược điểm về tính chân thực trong các tựa game. Đầu tiên, đường ray khi thực hiện raycasting di chuyển với tốc độ gần như vô cùng nhanh, khiến việc xác định điểm trúng của viên đạn trở nên rất dễ dàng. Trong thực tế, viên đạn di chuyển với vận tốc gần bằng với âm thanh hoặc còn nhanh hơn (mỗi loại đạn có một tốc độ đạn đạo khác nhau, trên tốc độ âm thanh được gọi là siêu âm, dưới là siêu âm, điều này có thể là một chủ đề đáng xem xét riêng), với tốc độ này, hitscan trở nên quá chính xác, gần như làm mất khả năng né đạn nếu người chơi ngắm trúng và bấm chuột đúng thời điểm.

Một trong những nhược điểm thứ hai của hitscan về mặt độ chân thực là việc đường raycasting thường di chuyển thẳng tắp, không có sự mô phỏng các yếu tố như gió, trọng lực và những ảnh hưởng khác đối với viên đạn sau khi rời khỏi nòng súng. Dù có thể thêm vào vài dòng code để mô phỏng sự rung của vũ khí khi bắn, nhưng một khi viên đạn đã rời khỏi nòng, thì gần như không thể thay đổi hướng di chuyển của nó do tính chất cơ bản của kỹ thuật hitscan.
Do đó, khi muốn tạo ra một tựa game bắn súng với độ chân thực cao hơn, các nhà phát triển game hiện đại thường lựa chọn cách thứ hai để mô phỏng đường đi của viên đạn.
Mô phỏng đạn đạo (projectile ballistics)
Dù nghe có vẻ phức tạp và khó hiểu, nhưng thực ra ý tưởng của cách mô phỏng đạn đạo trong game rất đơn giản. Khi bắn, game sẽ tạo ra một viên đạn và coi nó như một vật thể tuân thủ các quy tắc vật lý trong môi trường ảo. Viên đạn này có khối lượng, vận tốc và hitbox riêng, và engine của game sẽ theo dõi và tính toán vật thể này.

Ưu điểm lớn nhất của việc mô phỏng đạn đạo đó là sự thực tế mà nhiều tựa game đề cao. Mỗi viên đạn tồn tại một cách độc lập, cho phép các nhà phát triển game thêm các yếu tố đặc biệt như gió, ma sát không khí, trọng lực, nhiệt độ, tất cả những yếu tố này ảnh hưởng đến quỹ đạo của viên đạn trong thế giới ảo. Đồng thời, nhờ khả năng thay đổi quy tắc vật lý, người chơi có thể sử dụng các trang bị như lựu đạn hay súng cối phóng tên lửa.
Hệ thống mô phỏng đạn đạo không di chuyển viên đạn theo tốc độ ánh sáng như hitscan, điều này mở ra nhiều tính năng thú vị như:
1. Bullet-time giúp làm chậm thời gian như trong Max Payne, Sniper Elite hoặc Superhot. 2. Ghi nhận thời gian mà viên đạn di chuyển, ví dụ như trong Battlefield, nơi cần tính toán trọng lực để ngắm lên cao hơn so với mục tiêu, hoặc trong Sniper Elite cần phải tính cả gió. 3. Các trang bị như lựu đạn có thể được kích nổ theo thời gian.



Các tính toán về quỹ đạo của viên đạn là phức tạp hơn nhiều so với hitscan, đòi hỏi máy tính và máy chủ game phải làm việc nhiều hơn. CPU phải tính toán các yếu tố tác động lên viên đạn, trong khi máy chủ game online phải đồng bộ hóa thời gian cho tất cả người chơi, đảm bảo logic của thuật toán không gây ra sự không đồng nhất giữa hàng chục người chơi trên cùng một máy chủ.
Có một số cách để tối ưu việc xử lý quỹ đạo viên đạn, giúp cho trải nghiệm chơi game bắn súng trở nên mượt mà hơn, thậm chí có tính chân thực khi cả hai bên cùng bị hạ gục bởi viên đạn của đối phương thay vì chỉ một bên kết thúc sau khi máy chủ xác định người chơi đã hết máu. Tuy nhiên, việc mô phỏng quỹ đạo đạn đạo đòi hỏi nhiều tài nguyên xử lý. Một cách đơn giản để tối ưu hóa engine game là tạo ra một bản dữ liệu trước khi trò chơi bắt đầu, mô phỏng từng loại đạn có trong game. Khi một viên đạn va chạm với mục tiêu (đối thủ hoặc tường), bản dữ liệu này sẽ ngừng theo dõi và mô phỏng quỹ đạo của viên đạn đó, giúp tiết kiệm tài nguyên xử lý cho các viên đạn tiếp theo.
Khái niệm 'tick' được áp dụng vào game. Ví dụ, máy chủ của Call of Duty hoạt động ở tốc độ 20 tick mỗi giây, trong khi máy chủ CS:GO matchmaking là 64 tick và Valorant là 128 tick mỗi giây. Mỗi tick ghi nhận một lần di chuyển của nhân vật và quỹ đạo của viên đạn khi chơi game. Tốc độ tick càng cao, máy chủ ghi nhận được nhiều thay đổi hơn, từ đó mô tả thế giới ảo một cách chính xác hơn.
- Tick được đo lường độc lập với thuật toán render đồ họa game, đảm bảo các pha bắn súng được mô tả chính xác hơn vì vật thể được đo lường độc lập với tốc độ truyền hình ảnh từ máy tính lên màn hình. Tốc độ tick càng cao, thuật toán càng phức tạp vì phải tính đến độ trễ từ khung hình trước đó. - Mỗi khung hình của trò chơi cũng được đo lường với tick rate, áp dụng thuật toán vật lý cho mỗi khung hình. Nếu người chơi giới hạn khung hình hoặc máy tính không đủ mạnh, thuật toán có thể gây ra sự giật lag khi bắn súng.
Đây là lúc những lỗi trong game xuất hiện, khi mà người chơi nghĩ rằng họ đã bắn trúng mục tiêu nhưng do tốc độ khung hình và tick rate không chính xác, dẫn đến việc máy chủ ghi nhận họ đã bắn trượt. Đây là điều mà ai chơi CS:GO cũng gặp phải ít nhất một lần.

Nghe có vẻ phức tạp nhưng thực ra, khái niệm về projectile ballistics không phải mới mẻ, nó đã tồn tại từ rất lâu trước cả hitscan. Ngay từ những trò chơi bắn súng góc nhìn từ trên cao như Asteroids, Space Invaders hay Galaxian đã mô phỏng đường đạn bay tới mục tiêu từ những năm 70 của thế kỷ trước.
Hệ thống kết hợp
Có cách nào để mô phỏng đường đạn trong game theo cả hai phương pháp trên không? Câu trả lời là có. Hầu hết các tựa game bắn súng hiện nay đều hỗ trợ cả hai phương pháp, như Halo, GTA, Half-Life. Mỗi loại vũ khí lại có cách hoạt động riêng biệt. Ví dụ, trong Halo, khẩu Assault Rifle sử dụng hitscan, trong khi khẩu Needler lại mô phỏng đạn đạo.


Các nhà sản xuất game cũng có thể kết hợp cả hai kỹ thuật mô phỏng đường đạn để giảm thiểu nhược điểm của mỗi kỹ thuật, tạo ra trải nghiệm chơi game chân thực hơn. Ví dụ, để tránh việc ngắm đúng nhưng bắn trượt do lệch tick, mỗi viên đạn được mô phỏng theo projectile ballistics sẽ tự động vẽ đường ray để thực hiện kỹ thuật hitscan mỗi tick, thậm chí còn có thể tính toán được nếu hai viên đạn va chạm vào nhau trong quá trình bay.
Cũng với hệ thống kết hợp, nhiều tính năng hay ho trong game được tạo ra. Một ví dụ điển hình là Sniper Elite. Sau khi bóp cò súng, engine game sử dụng hitscan để xác định liệu đạn có trúng mục tiêu hay không. Nếu trúng, hiệu ứng làm chậm thời gian mà người chơi rất thích sẽ được kích hoạt.

Với những gì đã đạt được, có thể rằng cả hai cách mô phỏng đường đạn này sẽ tiếp tục được áp dụng trong thời gian tới. Đồng thời, các hãng game cũng sẽ tiếp tục cải tiến từng kỹ thuật nhỏ nhặt để làm cho trải nghiệm chơi game trở nên chân thực hơn, như việc tăng số lượng tick mỗi giây khi CPU mạnh hơn để ghi nhận đường đạn một cách chính xác hơn.
Theo Tristan Jung/Gamasutra