Trong ứng dụng giải trí, quả bóng nảy hay chiếc xe trượt bánh không được “vẽ sẵn” mà được tính lại sau mỗi bước thời gian rất ngắn: cộng lực, đổi vận tốc, dời vị trí, rồi kiểm xem có chạm vào thứ gì không. Mấy phép cộng nhân đơn giản đó, lặp vài trăm lần mỗi giây, tạo ra cảm giác vật lý thật. Bài này giải thích cách máy tính bước từng bước thời gian, cách nó phát hiện va chạm, vì sao vật bay nhanh đôi khi “xuyên tường”, và vì sao vật lý trên màn hình luôn được nắn lại cho dễ chịu hơn đời thật.
Bước nhỏ, lặp nhiều: vật lý trên máy là một vòng lặp
Định luật Newton nói lực làm thay đổi vận tốc, vận tốc làm thay đổi vị trí. Máy tính không giải phương trình một lần cho cả trận; nó chia thời gian thành những bước nhỏ, chẳng hạn một phần một trăm hai mươi giây, và ở mỗi bước làm đúng ba việc:
- Cộng lực: trọng lực kéo xuống, lực cản không khí ngược hướng bay, lực ma sát của mặt sân, lực từ cú đánh nếu có.
- Cập nhật vận tốc: vận tốc mới = vận tốc cũ + gia tốc × bước thời gian.
- Cập nhật vị trí: vị trí mới = vị trí cũ + vận tốc mới × bước thời gian.
Cách làm này gọi là tích phân số. Thứ tự hai dòng cuối nghe như chi tiết vụn vặt nhưng quan trọng: cập nhật vận tốc trước rồi mới dùng vận tốc mới để dời vị trí (cách “Euler bán ẩn”) giữ cho quỹ đạo ổn định hơn hẳn so với làm ngược lại. Làm ngược, quả bóng nảy có thể mỗi lần lên cao hơn một chút, như được bơm thêm năng lượng từ hư không.
Bước thời gian nên cố định, không phụ thuộc máy nhanh hay chậm. Chúng tôi đã có bài riêng về vòng lặp khung hình; ở đây chỉ cần nhớ: cùng một cú đánh, máy nào cũng phải ra cùng một đường bóng.
Phát hiện va chạm: hai vòng tròn có chạm nhau không
Sau khi dời vị trí, máy phải hỏi: có vật nào đang chồng lên nhau không? Kiểm hình dáng thật của một chiếc xe hay một cầu thủ thì quá tốn, nên người làm bọc mỗi vật trong một hình đơn giản:
| Hình bọc | Phép kiểm | Hợp với |
|---|---|---|
| Hình tròn (hoặc cầu) | Khoảng cách hai tâm nhỏ hơn tổng hai bán kính là chạm | Bóng, quả cầu lông khi tính va chạm thô, đầu nhân vật |
| Hình chữ nhật thẳng trục | Hai khoảng ngang chồng nhau và hai khoảng dọc chồng nhau | Tường, sàn, lưới, ô bàn cờ |
| Hình chữ nhật xoay được | Kiểm theo vài trục chiếu, phức tạp hơn | Thân xe, cánh máy bay |
| Đoạn thẳng có độ dày (viên nang) | Khoảng cách từ điểm tới đoạn thẳng | Mặt vợt, chân tay khi ra đòn |
Phép kiểm hình tròn rẻ tới mức máy làm hàng nghìn lần mỗi khung mà không tốn sức. Khi có nhiều vật, người làm còn chia sân thành ô lưới, chỉ kiểm những vật nằm chung hoặc cạnh ô nhau, thay vì kiểm từng cặp trong toàn bộ.
Sau khi chạm: nảy, trượt hay dính
Phát hiện chạm mới là nửa việc. Nửa còn lại là phản ứng: tách hai vật khỏi chỗ chồng nhau, rồi đổi vận tốc. Hai con số quyết định cảm giác:
- Hệ số đàn hồi: phần vận tốc giữ lại theo phương vuông góc với mặt chạm. Gần 1 là nảy gần như nguyên vẹn; gần 0 là “bịch” rồi nằm im. Cùng một quả bóng tennis, trên sân cỏ nảy thấp và trượt nhanh, trên sân đất nện nảy cao và chậm hơn — chỉ vì mặt sân khác nhau.
- Ma sát: làm giảm vận tốc theo phương song song với mặt chạm, và làm bóng xoáy hoặc mất xoáy.
Trong Giao Đấu, mỗi môn — tennis, pickleball, cầu lông, bóng bàn — cần một bộ con số riêng cho bóng và mặt sân; quả cầu lông còn chịu lực cản không khí lớn tới mức bay nhanh rồi rơi gần như thẳng đứng, khác hẳn quỹ đạo của bóng tennis. Muốn cảm giác đúng từng môn, người làm phải chỉnh các con số đó bằng tay rồi thử đi thử lại.
Bóng xuyên tường: bẫy kinh điển của vật bay nhanh
Giả sử bóng bay nhanh tới mức trong một bước thời gian nó đi được quãng dài hơn bề dày của lưới. Ở bước trước, bóng ở trước lưới; ở bước sau, bóng đã ở sau lưới. Không có bước nào bóng đang chồng lên lưới, nên phép kiểm va chạm không bao giờ thấy gì. Bóng xuyên qua như ma. Hiện tượng này gọi là xuyên hầm (tunneling).
Ba cách chữa thường gặp, từ đơn giản tới tốn kém:
- Bước nhỏ hơn: chia mỗi khung thành nhiều bước con. Dễ làm nhưng tốn sức máy theo đúng tỉ lệ.
- Kiểm cả đoạn đường: thay vì hỏi “bây giờ có chồng không”, hỏi “đoạn thẳng từ vị trí cũ tới vị trí mới có cắt qua lưới không”. Gọi là phát hiện va chạm liên tục, chỉ cần dùng cho vài vật bay nhanh như bóng.
- Giới hạn tốc độ tối đa: không cho vật nào nhanh hơn mức an toàn. Cách này thô nhưng thường được dùng kèm, như một lưới đỡ cuối cùng.
Lái xe: lực bám là thứ khó nhất
Xe trên màn hình không trượt như một cục gạch. Mỗi bánh xe có lực bám giới hạn: bánh xe chỉ đẩy được xe sang ngang tới một mức nhất định, quá mức đó là trượt. Khi vào cua quá nhanh, lực cần để bẻ hướng vượt giới hạn bám, đuôi xe văng ra — đó là chỗ sinh ra những pha trôi bánh.
Mô phỏng đầy đủ lốp xe đời thật rất phức tạp và cũng không vui lắm khi cầm điện thoại bằng hai ngón cái. Ứng dụng giải trí thường dùng một mô hình giản lược: tách vận tốc xe thành phần dọc thân xe và phần ngang thân xe, rồi “ăn mòn” phần ngang mỗi bước với tốc độ tuỳ mặt đường. Mặt nhựa ăn mòn nhanh — xe bám đường. Đường đất, đường ướt ăn mòn chậm — xe trôi nhiều. Cano trên nước thì gần như không có lực bám ngang, nên cảm giác lái khác hẳn ô tô dù dùng cùng một khung tính toán. Một ứng dụng như Rượt Đuổi, có cả ô tô, xe máy lẫn cano, cần mỗi loại xe một bộ con số bám đường riêng.
Vật lý được nắn cho dễ chịu
Một điều ít người nghĩ tới: vật lý trong ứng dụng giải trí cố ý không giống đời thật ở nhiều chỗ, vì đời thật nhiều khi khó chịu. Vài kiểu nắn phổ biến:
- Vùng đánh trúng rộng hơn mặt vợt thật: ngón tay trên kính không chính xác như cổ tay cầm vợt.
- Trọng lực mạnh hơn lúc rơi: nhân vật nhảy lên chậm, rơi xuống nhanh, cho cảm giác chắc chân thay vì lơ lửng.
- Cho bấm nhảy trễ một chút sau khi rời mép: mắt người thấy mình còn trên mép, ứng dụng chiều theo mắt.
- Hút nhẹ về đúng làn: xe hơi lệch làn được kéo về, đỡ phải lái từng milimét.
- Giảm xóc khi va: chạm tường không làm xe dừng chết, chỉ mất tốc độ một phần.
Những thứ này không phải gian dối; chúng bù cho việc bạn không có cảm giác lực trong tay như khi cầm vợt hay vô lăng thật.
Vì sao vật lý phải giống nhau trên mọi máy
Nếu cùng một cú đánh mà máy này cho bóng rơi trong sân, máy kia cho ra ngoài, thì bảng xếp hạng mất ý nghĩa và máy chủ không kiểm lại được kết quả. Người làm giữ tất định bằng ba việc: bước thời gian cố định, số ngẫu nhiên có hạt giống (cùng hạt giống thì cùng chuỗi “ngẫu nhiên”), và tránh để kết quả phụ thuộc vào tốc độ khung hình. Phép tính số thực giữa các loại chip vẫn có thể lệch ở chữ số rất xa, nên phép kiểm phía máy chủ thường so theo luật và khoảng hợp lý, không so từng chữ số.
Câu hỏi thường gặp
Ứng dụng giải trí tính đường bay của bóng như thế nào?
Máy chia thời gian thành các bước rất ngắn. Mỗi bước cộng trọng lực, lực cản và lực xoáy để đổi vận tốc, rồi dùng vận tốc mới dời vị trí, lặp vài trăm lần mỗi giây.
Vì sao bóng đôi khi xuyên qua lưới hay tường?
Vì bóng bay nhanh tới mức trong một bước thời gian nó đi qua hẳn vật cản, không có thời điểm nào đang chồng lên vật cản để máy phát hiện. Ứng dụng làm kỹ sẽ kiểm cả đoạn đường bóng vừa đi hoặc chia bước nhỏ hơn.
Vật lý trong ứng dụng có giống ngoài đời không?
Giống ở nguyên lý nhưng được nắn nhiều chỗ: vùng đánh trúng rộng hơn, rơi nhanh hơn, va chạm êm hơn. Mục đích là bù cho việc ngón tay trên kính không có cảm giác lực như tay cầm vợt thật.
Vì sao xe trôi bánh khi vào cua nhanh?
Lực bám của bánh xe có giới hạn. Khi lực cần để bẻ hướng vượt giới hạn đó, phần vận tốc ngang không bị triệt tiêu kịp và đuôi xe văng ra.
Máy yếu có làm vật lý chạy sai không?
Nếu ứng dụng dùng bước thời gian cố định thì không: máy yếu chỉ vẽ ít khung hình hơn, còn đường bóng và tốc độ xe giữ nguyên. Ứng dụng làm ẩu, cho vật lý chạy theo khung hình, mới ra kết quả khác nhau giữa các máy.