Jitter trong các va chạm trên tường với Bullet Vật lý: dung sai tiếp xúc / xuyên thấu?


7

Tôi sử dụng công cụ vật lý đạn thông qua Panda3d.

Khung cảnh của tôi vẫn rất đơn giản, hãy nghĩ 'Wolfenstein3d': dựa trên nền gạch, những bức tường là những hình khối vững chắc.

Tôi hy vọng các bức tường sẽ chặn người chơi và tôi hy vọng người chơi sẽ trượt dọc theo các bức tường trong trường hợp tỷ lệ không bình thường.

Những gì tôi nhận được là những gì tôi mong đợi, với một sự khác biệt: có một số jitter. Nếu tôi cố ép mình vào tường, thì tôi thấy các khung hình nhấp nháy nhanh giữa hai vị trí. Chúng khác nhau khoảng 0,04 đơn vị khoảng cách, tương ứng với 4 cm trong trò chơi của tôi.

Tôi nhận thấy 4 cm ở nơi khác: đáy của máy nghe nhạc của tôi nằm dưới mặt đất 4 cm, khi nghỉ ngơi.

Điều đó có nghĩa là có một nơi nào đó trong động cơ Bullet có dung sai dài 0,04 đơn vị mặc định để phân biệt tiếp xúc với va chạm? Nếu vậy, tôi nên làm gì? Tôi có nên thay đổi quy mô trò chơi của mình để các đơn vị 0,04 này tương ứng với 0,4 cm, làm cho jitter nhỏ hơn mười lần? Hoặc tôi có thể yêu cầu viên đạn thay đổi dung sai của nó thành giá trị nhỏ hơn không?

Biên tập

Đây là jitter tôi nhận được: 6.155 - 6.118 = 0.036

LPoint3f(0, 6.11694, 0.835)
LPoint3f(0, 6.15499, 0.835)
LPoint3f(0, 6.11802, 0.835)
LPoint3f(0, 6.15545, 0.835)
LPoint3f(0, 6.11817, 0.835)
LPoint3f(0, 6.15726, 0.835)
LPoint3f(0, 6.11876, 0.835)
LPoint3f(0, 6.15911, 0.835)
LPoint3f(0, 6.11937, 0.835)

Tôi tìm thấy một phương thức setMargin. Tôi đặt nó thành 5 mm cả trên BoxShape cho các bức tường và trên hình dạng Capsule cho người chơi. Nó vẫn dao động khoảng 35 mm như được minh họa bởi nhật ký này (11.117 - 11.082 = 0.035):

LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1169, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.082, 0.905)
LPoint3f(0, 11.117, 0.905)
LPoint3f(0, 11.0821, 0.905)
LPoint3f(0, 11.1175, 0.905)
LPoint3f(0, 11.0822, 0.905)
LPoint3f(0, 11.1178, 0.905)
LPoint3f(0, 11.0823, 0.905)
LPoint3f(0, 11.1183, 0.905)

Tuy nhiên, phần lề trên viên nang đã thay đổi sự thâm nhập của tôi với sàn, tôi cao hơn một chút (0,90 thay vì 0,835). Tuy nhiên, nó không thay đổi bất cứ điều gì khi va chạm với các bức tường.

Làm thế nào tôi có thể làm cho các va chạm vào các bức tường bớt bồn chồn?

Chỉnh sửa, ngày hôm sau:

Sau khi điều tra nhiều hơn, có vẻ như các đối tượng năng động cư xử tốt. Vấn đề của tôi xuất phát từ btKinIALCharacterControll mà tôi sử dụng để di chuyển nhân vật của mình; những thứ đó hoàn toàn bị lỗi, theo toàn bộ Internet: /.

Câu trả lời:


4

Điều này nghe có vẻ không ổn định về số lượng do không chính xác điểm nổi. Bạn có đang sử dụng các yếu tố tỷ lệ cho cảnh / đối tượng của mình theo khuyến nghị của nhà cung cấp không?


Biên tập:

Danh sách kiểm tra chung cho jitter động cơ vật lý

  • Hãy chắc chắn rằng bạn đang sử dụng các yếu tố tỷ lệ chính xác
  • Đảm bảo rằng số lượng hợp lý (ví dụ: 10m, 80kg, ...)
  • Cho phép ngủ nếu đây là một đối tượng không có bất kỳ nội lực nào (nghĩa là nó không có bộ điều khiển / bộ tạo lực)
  • Khám phá tất cả các cài đặt liên quan đến đúc tia. Nguyên nhân chính đáng cho vấn đề của bạn
  • Thư giãn khoan dung độ xuyên sâu để cho phép một số thâm nhập . Có khả năng gây ra vấn đề của bạn


Điều này có khả năng cho phép các camera "nhìn xuyên qua" các bức tường và có thể được giải quyết bằng cách đặt một vật thể mỏng, vô hình trước bức tường hoặc mở rộng AABB để hoạt động như một bộ đệm.


Nếu bạn đang nói về quy mô của các mô hình 3D của tôi (và do đó là các hộp / hình dạng va chạm), thì tất cả đều là 1.
Niriel

Và đại khái là những loại kích thước và khoảng cách đang chơi?
awdz9nld

1 đơn vị tương ứng với 1 mét.
Niriel

1

Âm thanh như động cơ của bạn liên tục cố gắng cập nhật các thông số của đối tượng đó. Đối tượng sẽ đóng băng tại vị trí một khi nó đạt đến trạng thái mà Bullet đã quyết định là "ổn định". Mặt khác, các lỗi số sẽ không bao giờ dẫn đến việc xử lý va chạm chính xác, do đó chuyển động lộn xộn (cuối cùng các lực tích tụ, các vật thể lại xâm nhập, kết quả dao động). Một số ý tưởng được đề cập ở đây . Tôi sẽ bắt đầu điều tra " vấn đề giấc ngủ ". Có lẽ ai đó có kinh nghiệm với động cơ này có thể cung cấp một cách để thiết lập ngưỡng ngủ hiệu quả trong trường hợp của bạn.


Sau khi điều tra nhiều hơn, có vẻ như các đối tượng năng động cư xử tốt. Vấn đề của tôi xuất phát từ btKinIALCharacterControll mà tôi sử dụng để di chuyển nhân vật của mình; những thứ đó hoàn toàn có lỗi, theo toàn bộ Internet.
Niriel

Rất tiếc khi biết về điều đó, tôi không phải là chuyên gia Bullet và chưa có cơ hội để xem cơ chế đó. Một quan sát là nhân vật chuyển động của bạn không thể vào "chế độ ngủ" bởi vì nó liên tục cần được cập nhật lực sẽ khiến nó thoát khỏi chế độ "đóng băng / ngủ".
teodron

Tôi chắc chắn sẽ ghi nhớ khái niệm 'chế độ ngủ' này trong tương lai. Tôi cũng nên kiểm tra định mức của mình, có lẽ tôi có đa giác hai mặt?
Niriel

0

Một điều bạn có thể muốn xem xét là một tùy chọn CCD. Trong một số động cơ vật lý, bạn có thể tùy chọn bật "Phát hiện va chạm liên tục".

Nó tốn nhiều tài nguyên hơn, nhưng thay vì giải quyết va chạm là Có / Không tại mỗi bước, nó hoạt động để tìm điểm va chạm thực tế và dừng bạn ở đó.

Tôi không quen với động cơ đạn, nhưng điều đó có thể cung cấp cho bạn thứ gì đó để tìm kiếm. Điều thú vị là nó thường được sử dụng cho những thứ như đạn để ngăn chặn sự xâm nhập của tường.


liên tục hay không, điểm nổi vẫn sẽ sớm trở lại cái đầu xấu xí của nó :)
awdz9nld
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.