Chính xác thì động cơ vật lý là gì?


57

Một chương trình nên lấy đầu vào, xử lý nó và đưa ra đầu ra. Vì vậy, chính xác những gì một động cơ vật lý lấy đầu vào và cung cấp như đầu ra?


36
Rất nhiều thuật ngữ câu hỏi mọi người. Không cần phải tải xuống các câu hỏi cơ bản đơn giản vì chúng là cơ bản.
MichaelHouse

16
Việc mô tả một chương trình như là một cái gì đó "nên lấy đầu vào, xử lý nó và đưa ra đầu ra" là một cách suy nghĩ đơn giản và giản lược đến mức vô dụng. Hãy suy nghĩ làm thế nào bạn sẽ trả lời câu hỏi "Một chương trình nên lấy đầu vào, xử lý và đưa ra đầu ra. Vậy chính xác thì trò chơi lấy đầu vào và cung cấp làm đầu ra là gì?", Bạn có thể trả lời nhưng đó không phải là cách suy nghĩ hữu ích về một trò chơi.
Jack Aidley

10
@JackAidley Tôi thấy quan điểm của bạn, nhưng thực sự, một trò chơi rất giống như vậy: input: keystrokes & mouse / joystick, output: hình ảnh vui nhộn trên màn hình và âm thanh giải trí từ loa. Thật đơn giản, đúng vậy, nhưng nó giúp hiểu "trò chơi" là gì về mặt tính toán và theo kinh nghiệm của tôi cũng là một cách cực kỳ hữu ích (nhưng tất nhiên không phải là cách duy nhất) để suy nghĩ về kiến ​​trúc mã, thiết kế tài sản, quản lý dự án, v.v.
wjl

Câu trả lời:


58

Một động cơ vật lý chịu trách nhiệm mô phỏng chuyển động và phản ứng của các vật thể như thể chúng ở dưới sự ràng buộc của vật lý trong thế giới thực (hoặc tương tự như thế giới thực). Đó là, tôi nên lưu ý, thường không phải là một chương trình độc lập mà là một thành phần của một chương trình lớn hơn, thú vị hơn (chẳng hạn như một trò chơi).

Đầu vào cho một mô phỏng vật lý nói chung là một tập hợp các vật thể ("cơ thể") với các thuộc tính (chẳng hạn như chúng cứng hay mềm, khối lượng, hình dạng, v.v.) cũng như tập hợp các lực tác động lên các cơ thể đó.

Dựa trên đầu vào đó, động cơ mô phỏng các vị trí và hướng được cập nhật của các thân máy và áp dụng ("đầu ra") cho chúng. Nói chung, khi các đối tượng va chạm hoặc chồng chéo, được bao gồm trong đầu ra của bước mô phỏng dưới dạng gọi lại mà mã máy khách có thể nối vào để xử lý logic trò chơi cụ thể có liên quan đến xung đột.


6

Đầu vào nó tốc độ, khối lượng và thời gian, đầu ra là tốc độ mới. Đôi khi động lượng xoay / góc cũng là một đầu vào và đầu ra.

Về cơ bản, các động cơ Vật lý cố gắng mô phỏng các tác động của cả trọng lực và va chạm. Đối với các động cơ vật lý tốt hơn có nghĩa là chúng bao gồm cả các vật thể biến dạng vĩnh viễn và tạm thời, bao gồm tách các vật thể thành nhiều vật thể và động lượng góc của các vật thể. Lý tưởng nhất là họ cũng mô phỏng căng thẳng, ví dụ có bao nhiêu xe tải có thể đi qua cây cầu đó cho đến khi nó sụp đổ, nhưng điều đó khá hiếm. Các biến mô phỏng khác như sức cản không khí cũng sẽ được tính là động cơ vật lý, nhưng theo như tôi biết thì chúng chưa đưa nó vào bất kỳ trò chơi nào.

Hầu hết các động cơ vật lý được chuyên môn hóa ở một mức độ nào đó và sẽ mô phỏng vật lý đến một điểm cần thiết cho trò chơi. Động cơ vật lý cho các trò chơi xe hơi thường khá khác với động cơ vật lý cho game bắn súng 3D. Và động cơ vật lý của một trò chơi golf có thể có sự tính toán quá mức về sự tương tác của quả bóng golf và từng chiếc lá cỏ, trong khi thiếu hoàn toàn việc xử lý các va chạm tốc độ cao và biến dạng của một chiếc xe hơi (trong trường hợp nó bị bóng golf đánh trúng) .


1
Tôi muốn chỉ ra rằng sức cản không khí thực sự là một đặc điểm chung của động cơ vật lý. Bất kỳ trò chơi nào áp dụng vận tốc đầu cuối cho vật rơi đều được mô hình hóa sức cản không khí.
Patrick Roberts

@PatrickRoberts Terminal Velocity không chính xác như những gì tôi nghĩ khi đề cập đến sức cản không khí. Điều đó giống như nói rằng Pong có một động cơ vật lý mô hình các tác động động học.
Peter

12
cũng công bằng, trong một ý nghĩa lỏng lẻo nó làm. Nó mô hình va chạm hoàn toàn đàn hồi trong một môi trường không trọng lượng. Tôi hiểu rằng các mô hình có thể đơn giản, nhưng đó là lý do tại sao chúng được gọi là mô hình vì chúng là các xấp xỉ thực tế của các hiện tượng mà chúng ta trải nghiệm trong thực tế.
Patrick Roberts

4

Thông thường, một công cụ vật lý được sử dụng để làm cho vật thể trong trò chơi hoạt động theo cách thực tế so với môi trường của chúng mà không phải thiết kế hình ảnh động cụ thể cho mọi kịch bản có thể.

Cụ thể, một công cụ vật lý sẽ lấy một mô hình với một tập các thuộc tính (khối lượng, khớp v.v.) và hiển thị nó trong trò chơi theo một bộ thông số.

Một ví dụ ban đầu về điều này là các công cụ raggdoll (ví dụ như trong Unreal) mô hình hóa cách các cơ thể khập khiễng sẽ rơi xuống các bước, v.v.

Trong các công cụ vật lý công nghệ hiện tại thường sẽ được tích hợp chặt chẽ trong một gói thiết kế trò chơi tổng thể cùng với AI, giao diện người dùng trong trò chơi, thế hệ cutscene, v.v.

Bạn chắc chắn có thể lập luận rằng các động cơ vật lý quay trở lại bình minh của thiết kế trò chơi, ví dụ như pong có thể được coi là một động cơ vật lý thô. Tuy nhiên, điểm chính là một công cụ vật lý có khả năng tạo ra các điểm hoạt hình một cách nhanh chóng dựa trên một tập hợp các tham số thay vì chỉ sử dụng các chuỗi hoạt hình được xác định trước từ chụp chuyển động hoặc hoạt hình thủ công.

Như đã đề cập trong các câu trả lời khác, trong một số lớp học hoặc trò chơi như lái xe hoặc mô phỏng chuyến bay, động cơ vật lý có thể là nền tảng cho trò chơi và như vậy sẽ là đầu vào chính điều khiển hoạt hình trên màn hình. Mặc dù thông thường thuật ngữ này được sử dụng cho một công cụ có mục đích chung có thể được áp dụng cho nhiều tình huống khác nhau mà không đòi hỏi kiến ​​thức hoặc phân tích cụ thể về bối cảnh được đề cập từ phía nhà phát triển, thay vì một trình giả lập rất cụ thể được xây dựng từ mặt đất lên cho một ứng dụng cụ thể.


4

Một động cơ vật lý chịu trách nhiệm mô phỏng chuyển động của các vật thể trong "thế giới" (bất cứ điều gì có nghĩa là trong bối cảnh của động cơ). Hầu hết các động cơ vật lý hiện nay sử dụng cơ học Newton để làm điều này, vì chúng tương đối đơn giản để mô phỏng và "đủ chính xác" cho hầu hết các mục đích trừ khi bạn đang thực hiện một sim không gian.

Về lý thuyết, một động cơ vật lý "thuần túy" sẽ có ba đầu vào:

  • Trạng thái của thế giới (các vật thể, vị trí và vận tốc của chúng) tính đến lần "đánh dấu" cuối cùng (tức thời cuối cùng mà động cơ phải tạo ra)
  • Bao nhiêu thời gian đã trôi qua kể từ lần đánh dấu cuối cùng xảy ra
  • Một danh sách các lực lượng đã hành động trên các đối tượng khác nhau trên thế giới kể từ lần đánh dấu cuối cùng

Tính theo quán tính và các lực, động cơ di chuyển các vật thể xung quanh. Đầu ra của công cụ vật lý đơn giản là trạng thái mới của "thế giới" , sau đó trò chơi có thể đọc ra và sửa đổi khi cần thiết.

Trong thực tế, động cơ vật lý không nhất thiết phải "tinh khiết" như vậy . Các đối tượng cần được tạo ra và phá hủy, và đôi khi chúng cần được di chuyển xung quanh theo cách mà các định luật của động cơ vật lý không cho phép. Điều này đôi khi có thể được thực hiện bên ngoài động cơ, nhưng đôi khi nó được thực hiện bên trong và để làm điều đó, động cơ cần nhiều đầu vào hơn. Nhưng ba đầu vào nêu trên bao gồm những điều cơ bản.

Ví dụ: giả sử bạn cần di chuyển một nhân vật trong trò chơi bằng cần điều khiển. Nếu bạn không sử dụng công cụ vật lý, điều này khá đơn giản: khi bạn thấy người dùng đang di chuyển cần điều khiển, bạn sẽ di chuyển đối tượng tương ứng. Với động cơ vật lý, bạn không di chuyển vật thể trực tiếp: bạn tác dụng một lực lên nó, tương ứng với hướng bạn muốn vật đi và để động cơ xử lý thực sự di chuyển nó .

Có gì khác biệt? Ngay cả khi không có gì khác trên thế giới, vật thể không có khả năng di chuyển theo cách tương tự, bởi vì động cơ vật lý sẽ xử lý những thứ như gia tốc thực tế. Nhưng cũng có thể các lực khác có thể tác động lên vật thể cùng một lúc, theo quán tính và động cơ sẽ tính đến tất cả chúng . Ví dụ: nếu bạn tác dụng một lực hướng bắc lên vật thể, nhưng một thứ khác đang tác dụng một lực hướng tây (hoặc vật thể đã di chuyển về phía tây và không có gì làm chậm điều đó), thì động cơ sẽ di chuyển vật thể theo hướng tây bắc.

Đó là những gì một động cơ vật lý mang lại cho bạn: Nó theo dõi các vật thể, vị trí và vận tốc của chúng, và các lực tác động lên chúng. Nhờ các định luật cơ học, nó thậm chí có thể tự tạo ra một số lực, để tự động xử lý những thứ như va chạm, ma sát và trọng lực, tất cả mà không có bạn, nhà phát triển trò chơi, phải làm thêm bất cứ điều gì.


1

Một Engine Engine về cơ bản là một mô phỏng của các cơ thể vật lý.

Đầu vào

Nó cho phép bạn tạo một cơ thể (hoặc nhiều người) chỉ định các thuộc tính vật lý của nó như khối lượng, kích thước, mật độ, v.v ...

Nó cũng cho phép bạn xác định các thuộc tính của thế giới vật lý nơi mô phỏng xảy ra (ví dụ như trọng lực).

Cuối cùng, nó cho phép bạn áp dụng lực hoặc tạo khớp giữa các cơ thể.

Đầu ra

Khi bạn định nghĩa tất cả những điều bạn có thể bắt đầu mô phỏng và Engine Vật lý sẽ cho bạn biết nơi mỗi cơ thể sẽ được đặt trên tiếp theo bước thời gian (mà thường tương ứng với các khung tiếp theo trong trò chơi của bạn). Và cái tiếp theo, v.v.

Bạn thấy Sprites di chuyển trên màn hình vì mọi khung hình của Game Engine đều hỏi Engine Engine

Cơ thể này hiện đang ở đâu?

và Game Engine cập nhật biểu diễn đồ họa tương ứng.

Cân nhắc

Tôi thường thích xem Công cụ Vật lý giống như một công cụ để áp dụng các định luật vật lý theo cách khai báo .

Nguyên vẹn thay vì viết mã để mô tả những tính toán nào sẽ được thực hiện để xác định vị trí của một cơ thể trong dấu thời gian tiếp theo. Tôi chỉ mô tả thế giới vật lý thiết lập các thuộc tính của cơ thể (và của chính thế giới vật lý) và tôi để động cơ vật lý trả lời câu hỏi đó cho tôi


Phần 'cân nhắc của bạn hoàn toàn không rõ ràng (với tôi). Nếu bạn cải thiện điều đó rõ ràng và cụ thể / thực tế hơn (ví dụ: cung cấp các ví dụ hệ thống thực tế bạn đã quan sát, xây dựng, v.v.), thì tôi sẽ cho bạn +1.
code_dredd

@ray: Cảm ơn bạn đã gợi ý của bạn. Tôi sẽ sửa nó càng sớm càng tốt!
Luca Angeletti

Hãy chắc chắn để bắn cho tôi một nhận xét sau khi bạn hoàn thành và đừng vội vàng. Nó sẽ hữu ích cho những người khác sau này.
code_dredd
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.