Làm thế nào tôi nên xử lý các vật thể nhỏ trong một động cơ vật lý?


13

Tôi đang làm một công cụ vật lý 3D để ném xúc xắc. Cho đến nay, một con xúc xắc đã là 1x1x1m và trọng lực là 9,82 m / s ^ 2. Điều này tất nhiên không có vẻ thực tế vì xúc xắc sẽ phản ứng với mọi thứ theo cách có vẻ hơi chậm.

Để khắc phục điều này, tôi đã cố gắng chỉ thay đổi tất cả các kích thước để tạo ra một con xúc xắc dài khoảng 0,02m dọc theo một bên. Chính điều này đã làm cho khối lượng nghịch đảo và ma trận quán tính nghịch đảo của tôi nhận được các giá trị rất lớn dẫn đến sự mất ổn định về số.

Con đường tốt nhất để xử lý này là gì? Tôi có thể giữ tỷ lệ lên để một con xúc xắc là 1x1x1 và chỉ cần thay đổi khối lượng hoặc kích thước của lực tác dụng không? Hay tôi nên điều chỉnh cái gì khác?

Tôi đoán vấn đề tương tự có thể xảy ra nếu bạn tạo ra một trò chơi có cơ thể vật lý rất lớn như tàu vũ trụ hoặc thứ gì đó để tôi hy vọng rằng ai đó đã gặp phải điều gì đó tương tự trước đây.


Tôi không phải là chuyên gia ở đây, nhưng, không có bất kỳ mã nào, làm thế nào chúng ta có thể biết vấn đề là gì? Mặc dù vậy, tôi có thể sai, vì Box2D có cùng một vấn đề.
jcora

1
(Nhìn thấy tất cả các upvote, phải có một cách mã hóa thông thường những thứ này và mọi người dường như biết vấn đề của bạn. Tôi đoán tôi đã sai.)
jcora

1
Có, tôi nghĩ rằng có thể có một cách thông thường để xử lý nó. Như tôi thấy đây không phải là vấn đề về mã mà là vấn đề với độ chính xác bằng số. Những gì tôi đang theo dõi không phải là một đoạn mã để giải quyết vấn đề của tôi mà là một lời giải thích về cách tiếp cận vấn đề.
Mikael Högström

Bạn có nghĩa là chính xác điểm nổi?
jcora

Trong một ý nghĩa có. Nghịch đảo ma trận quán tính mà tôi sử dụng trong xử lý va chạm có giá trị rất lớn. Nó không thực sự bị điều kiện vì các phần tử trục có giá trị lớn và không có nhiều bổ sung đang diễn ra nhưng bằng cách nào đó phải có vấn đề với độ chính xác bằng số khi mô phỏng nhanh chóng vượt khỏi tầm kiểm soát.
Mikael Högström

Câu trả lời:


1

Bạn có thể

  • Tăng trọng lực không đổi? Các trò chơi thường sử dụng 2 * 9,81 m / s ^ 2. Không thể nhớ tôi đã đọc nó ở đâu, nhưng các trò chơi thường sử dụng các đơn vị không nhạy cảm. Bất cứ điều gì hằng cảm thấy đúng (làm cho trò chơi vui vẻ). Sử dụng một hằng số thực tế làm cho vật lý có vẻ chậm và trôi nổi.
  • chạy mô phỏng với tốc độ nhanh hơn. Nếu bạn đang sử dụng dấu thời gian cố định, điều này sẽ tăng tỷ lệ hình ảnh động.
  • sử dụng phao có độ chính xác cao hơn?

Điểm thứ hai sẽ không làm gì ngoài việc làm cho mô phỏng mượt mà hơn, hoặc thậm chí có thể phá vỡ nó nếu mô phỏng được chạy quá nhanh (Tôi không chắc đây có phải là vấn đề thực tế không, nhưng nếu thế giới bước trước một mili giây đã qua, thời gian đã trôi qua sự khác biệt sẽ luôn là 0, và không có gì sẽ làm việc). Anh ta cũng có thể không muốn lãng phí bộ nhớ cho những chiếc phao có độ chính xác cao hơn.
jcora

1
Trò chơi thường sử dụng trọng lực gấp đôi? Nói ai?
GameDev-er

Tôi không thể thay đổi tỷ lệ hoặc độ chính xác nhưng tôi sẽ thử thay đổi trọng lực.
Mikael Högström

Thay đổi trọng lực không đổi làm cho xúc xắc thường di chuyển nhanh hơn, tạo ấn tượng rằng mọi thứ đều ở quy mô nhỏ hơn. Điều này làm cho hành vi trở nên bồn chồn hơn mặc dù ngay cả với các vi điều khiển để xử lý gia tốc giữa các khung. Tôi đoán tôi sẽ phải điều chỉnh nó :)
Mikael Högström

4

Trong trường hợp bạn đang gặp rắc rối với các giá trị số nhỏ, tôi khuyên bạn chỉ cần thu nhỏ mọi thứ lại. Bạn thậm chí có thể không sử dụng các đơn vị đo lường "thực", mà chỉ một số đơn vị "chung chung" chỉ có ý nghĩa bên trong động cơ.

Tùy chọn đầu tiên, thu nhỏ lại, sẽ yêu cầu bạn sử dụng milimet hoặc centimet làm đơn vị đo cơ sở. Kích thước khối lập phương của bạn sẽ không bị mất độ chính xác.

Giải pháp thứ hai về cơ bản là giống nhau, nhưng sau đó bạn sẽ không cần phải suy nghĩ về các đơn vị thực tế.

Ngoài ra, tại sao bạn không thay đổi khối lượng của khối lập phương?


Vì các máy phát lực duy nhất tôi có là khối lượng thay đổi dựa trên trọng lực / gia tốc kế không thay đổi hành vi. Mặc dù vậy, đề xuất của bạn có thể được sử dụng theo cách khác (có thể đó là ý bạn) cho các vật nhỏ có khối lượng lớn hơn, làm cho khối lượng nghịch đảo của chúng gần với một hơn và do đó làm giảm sự mất ổn định về số. Điều này đưa ra các vấn đề tương tự như chỉ tăng hằng số trọng lực mặc dù.
Mikael Högström


0

Tôi nghĩ rằng tôi nên chia sẻ giải pháp cuối cùng của tôi cho vấn đề. Việc tăng hằng số trọng lực như đề xuất đã thực sự làm cho xúc xắc di chuyển nhanh hơn do đó tạo ấn tượng về tỷ lệ chính xác. Điều này, tuy nhiên, tăng các vấn đề của vi mạch. Tôi đã thêm các vi lệnh giúp giảm thiểu vấn đề mặc dù không giải quyết được một cách hoàn hảo. Lưu ý rằng điều này chỉ trở thành vấn đề đối với các đối tượng "nhỏ", nếu bạn đang gặp vấn đề ngược lại và muốn mô phỏng các đối tượng rất lớn (tàu vũ trụ hoặc một cái gì đó tương tự) thì bạn sẽ không gặp phải bất kỳ vấn đề vi phạm nào và có thể tranh cãi giải pháp đó.

Vì vậy, tôi đã tìm thấy mức độ hấp dẫn cao nhất mà tôi có thể có mà không cần phải đi quá nhiều "vi điều khiển". Sau đó, tôi đã sử dụng một tính năng phát hiện rung đơn giản trên điện thoại để đáp ứng những thay đổi lớn từ chỉ số gia tốc và xung áp dụng cho tất cả các đối tượng khi phát hiện những rung lắc như vậy. Nó không hoàn hảo nhưng vì nó sẽ đặt xúc xắc di chuyển nhanh khi điện thoại bị rung, nó sẽ tạo ấn tượng về xúc xắc "nhỏ". Đó là một chút hack nhưng nó sẽ phải làm :) Đây là một clip của động cơ đang hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.