เครื่องยนต์ฟิสิกส์คืออะไร?


57

โปรแกรมควรรับอินพุตประมวลผลและให้เอาต์พุต แล้วเอนจินของฟิสิกส์จะใช้อะไรเป็นค่าอินพุทและเอาท์พุท


36
คำศัพท์มากมายตั้งคำถามกับผู้คน ไม่จำเป็นต้อง downvote คำถามพื้นฐานเพียงเพราะเป็นคำถามพื้นฐาน
MichaelHouse

16
คำอธิบายของโปรแกรมเป็นสิ่งที่ "ควรนำเข้าประมวลผลและให้ผลลัพธ์" เป็นวิธีที่ง่ายและไร้เหตุผลที่คิดว่ามันจะไร้ประโยชน์ คิดว่าคุณจะตอบคำถามได้อย่างไร "โปรแกรมควรรับอินพุตประมวลผลและให้ผลลัพธ์ดังนั้นเกมใช้อะไรเป็นอินพุตและให้เป็นเอาต์พุต" คุณสามารถตอบได้ แต่มันไม่ใช่วิธีคิดที่มีประโยชน์เกี่ยวกับ เกม.
Jack Aidley

10
@ JackAidley ฉันเห็นประเด็นของคุณ แต่จริงๆแล้วเกมเป็นอย่างนั้น: อินพุต: การกดแป้นพิมพ์และการเคลื่อนไหวของเมาส์ / จอยสติกเอาท์พุท: ภาพที่สนุกสนานบนหน้าจอและเสียงที่สนุกสนานจากลำโพง มันง่าย แต่ใช่ว่าช่วยให้เข้าใจว่า "เกม" คำนวณได้อย่างไรและจากประสบการณ์ของฉันก็เป็นวิธีที่มีประโยชน์อย่างมาก (แต่แน่นอนไม่ใช่วิธีเดียว) ในการคิดเกี่ยวกับสถาปัตยกรรมโค้ดการออกแบบสินทรัพย์การจัดการโครงการเป็นต้น
wjl

คำตอบ:


58

เครื่องยนต์ฟิสิกส์มีหน้าที่รับผิดชอบในการจำลองการเคลื่อนไหวและปฏิกิริยาของวัตถุราวกับว่าพวกเขาอยู่ภายใต้ข้อ จำกัด ของฟิสิกส์โลกแห่งความจริง (หรือคล้ายกับโลกแห่งความจริง) ฟิสิกส์ ฉันควรทราบว่าไม่ใช่โปรแกรมแบบสแตนด์อโลน แต่เป็นองค์ประกอบของโปรแกรมที่มีขนาดใหญ่และน่าสนใจกว่า (เช่นเกม)

การป้อนข้อมูลในการจำลองทางฟิสิกส์โดยทั่วไปเป็นชุดของวัตถุ ("ร่างกาย") ที่มีคุณสมบัติ (เช่นไม่ว่าจะแข็งหรืออ่อนมวลของมวลรูปร่างและอื่น ๆ ) รวมถึงชุดของกองกำลังที่ทำหน้าที่บนวัตถุเหล่านั้น

เครื่องยนต์จะจำลองตำแหน่งและทิศทางของร่างกายที่ได้รับการปรับปรุงและนำไปใช้ ("เอาต์พุต") โดยทั่วไปเมื่อวัตถุชนกันหรือทับซ้อนกันซึ่งรวมอยู่ในผลลัพธ์ของขั้นตอนการจำลองในรูปแบบของการโทรกลับที่รหัสลูกค้าสามารถเชื่อมต่อเพื่อจัดการกับตรรกะการเล่นเกมเฉพาะที่เกี่ยวข้องกับการชนกัน


6

อินพุตมันความเร็วมวลและเวลาผลลัพธ์คือความเร็วใหม่ บางครั้งการหมุน / โมเมนตัมเชิงมุมก็เป็นอินพุตและเอาต์พุตด้วยเช่นกัน

เครื่องมือฟิสิกส์พื้นฐานพยายามจำลองผลของแรงโน้มถ่วงและการชนกัน สำหรับเครื่องยนต์ฟิสิกส์ที่ดีกว่านั่นหมายถึงพวกมันรวมการเสียรูปถาวรและชั่วคราวของวัตถุรวมถึงการแยกวัตถุออกเป็นหลาย ๆ วัตถุและโมเมนตัมเชิงมุมของวัตถุ พวกเขาควรจะจำลองความเครียดเช่นว่ามีรถบรรทุกกี่คันที่สามารถข้ามสะพานนั้นได้จนกว่าจะยุบลง ตัวแปรการจำลองเพิ่มเติมเช่นความต้านทานอากาศจะนับเป็นเอนจินฟิสิกส์ แต่เท่าที่ฉันรู้ว่าสิ่งเหล่านี้ยังไม่ได้ทำให้เป็นเกมใด ๆ

เอ็นจิ้นฟิสิกส์ส่วนใหญ่มีความเชี่ยวชาญในระดับหนึ่งและจะจำลองฟิสิกส์จนถึงจุดที่จำเป็นสำหรับเกม เอนจิ้นฟิสิกส์สำหรับเกมรถมักแตกต่างจากเอนจิ้นฟิสิกส์สำหรับนักกีฬา 3 มิติ และเอ็นจิ้นฟิสิกส์ของเกมกอล์ฟอาจมีการคำนวณการโต้ตอบของลูกกอล์ฟและหญ้าแต่ละใบมากเกินไปในขณะที่ขาดการจัดการการชนความเร็วสูงและการเสียรูปของรถอย่างสมบูรณ์ (ในกรณีที่ลูกกอล์ฟโดน) .


1
ฉันต้องการชี้ให้เห็นว่าการต้านทานอากาศนั้นเป็นลักษณะทั่วไปของเครื่องมือฟิสิกส์ เกมใดก็ตามที่ใช้ความเร็วเทอร์มินัลกับวัตถุที่ตกลงมาคือการสร้างแบบจำลองความต้านทานอากาศ
Patrick Roberts

@PatrickRoberts Terminal Velocity ไม่ใช่สิ่งที่ฉันคิดเมื่อพูดถึงความต้านทานอากาศ นั่นก็เหมือนกับการบอกว่าโป่งมีเครื่องมือทางฟิสิกส์ที่จำลองผลกระทบจลน์
ปีเตอร์

12
ดีที่จะเป็นธรรมในความรู้สึกหลวมมัน มันจำลองการชนที่ยืดหยุ่นอย่างสมบูรณ์แบบในสภาพแวดล้อมที่ไร้น้ำหนัก ฉันเข้าใจว่าแบบจำลองนั้นง่าย แต่นั่นคือสาเหตุที่พวกเขาถูกเรียกว่าแบบจำลองเพราะพวกมันประมาณการณ์เชิงปฏิบัติของปรากฏการณ์ที่เราพบในความเป็นจริง
Patrick Roberts

4

โดยทั่วไปแล้วเครื่องยนต์ฟิสิกส์จะใช้เพื่อทำให้วัตถุในเกมประพฤติในลักษณะที่เป็นจริงเมื่อเทียบกับสภาพแวดล้อมของพวกเขาโดยไม่ต้องออกแบบภาพเคลื่อนไหวเฉพาะสำหรับทุกสถานการณ์ที่เป็นไปได้

โดยเฉพาะเครื่องยนต์ฟิสิกส์จะใช้โมเดลที่มีชุดของคุณสมบัติ (มวลข้อต่อและอื่น ๆ ) และสร้างมันขึ้นมาในเกมตามชุดของพารามิเตอร์

ตัวอย่างแรก ๆ ของสิ่งนี้คือเครื่องยนต์ raggdoll (เช่นใน Unreal) ซึ่งเป็นตัวอย่างของวิธีการที่ร่างกายที่หย่อนยานจะล้มลงตามขั้นตอนเป็นต้น

ในปัจจุบันฟิสิกส์เครื่องยนต์เอ็นจิ้นมักจะถูกรวมเข้ากับแพคเกจเกมโดยรวมพร้อมกับ AI, UI ในเกม, การสร้างฉากอนาจารเป็นต้น

คุณอาจยืนยันได้ว่าเอ็นจิ้นฟิสิกส์กลับไปสู่รุ่งอรุณของการออกแบบเกมเช่นพงษ์อาจถือได้ว่าเป็นเอนจิ้นฟิสิกส์แบบหยาบ อย่างไรก็ตามประเด็นหลักคือเครื่องยนต์ฟิสิกส์สามารถสร้างจุดภาพเคลื่อนไหวได้ทันทีตามชุดของพารามิเตอร์มากกว่าเพียงแค่ใช้ลำดับภาพเคลื่อนไหวที่กำหนดไว้ล่วงหน้าจากการจับภาพเคลื่อนไหวหรือภาพเคลื่อนไหวด้วยตนเอง

ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ ในบางคลาสหรือเกมเช่นการขับรถหรือการจำลองการบินเครื่องยนต์ฟิสิกส์อาจเป็นพื้นฐานของการเล่นเกมและจะเป็นอินพุตหลักในการขับเคลื่อนภาพเคลื่อนไหวบนหน้าจอ แม้ว่าโดยทั่วไปแล้วคำนี้ใช้สำหรับเครื่องมือที่มีวัตถุประสงค์ทั่วไปซึ่งสามารถนำไปใช้กับสถานการณ์ที่หลากหลายโดยไม่จำเป็นต้องมีความรู้หรือการวิเคราะห์บริบทที่เป็นปัญหาในส่วนของนักพัฒนาแทนที่จะสร้างแบบจำลองที่เฉพาะเจาะจงจากพื้นดิน สำหรับแอพพลิเคชั่นเฉพาะ


4

เอนจิ้นฟิสิกส์มีหน้าที่จำลองการเคลื่อนที่ของวัตถุใน "โลก" (อะไรก็ตามที่มีความหมายในบริบทของเครื่องยนต์) เครื่องมือฟิสิกส์ส่วนใหญ่ในปัจจุบันใช้กลไกของนิวตันในการทำเช่นนี้เนื่องจากค่อนข้างง่ายในการจำลองและ "แม่นยำเพียงพอ" สำหรับจุดประสงค์ส่วนใหญ่เว้นแต่ว่าคุณกำลังทำซิมอวกาศ

ในทางทฤษฎีเครื่องยนต์ฟิสิกส์ "บริสุทธิ์" จะรับอินพุตสามส่วน:

  • สถานะของโลก (วัตถุตำแหน่งและความเร็ว) ของ "ติ๊ก" ล่าสุด (ช่วงเวลาสุดท้ายที่เครื่องยนต์ต้องทำตัวเป็นรูปแบบสุดท้าย)
  • เวลาผ่านไปนานเท่าใดตั้งแต่เห็บตัวสุดท้ายที่เกิดขึ้น
  • รายการของกองกำลังที่ทำหน้าที่กับวัตถุต่าง ๆ ในโลกนับตั้งแต่เห็บตัวสุดท้าย

เมื่อพิจารณาถึงแรงเฉื่อยและแรงที่เกิดขึ้นเครื่องยนต์จะเคลื่อนย้ายวัตถุรอบตัว ผลลัพธ์ของเอ็นจิ้นฟิสิกส์เป็นเพียงสถานะใหม่ของ "โลก"ซึ่งเกมสามารถอ่านและแก้ไขตามความจำเป็น

ในทางปฏิบัติเครื่องยนต์ฟิสิกส์ไม่จำเป็นต้อง "บริสุทธิ์"อย่างแน่นอน วัตถุจะต้องสร้างและทำลายและบางครั้งพวกเขาจำเป็นต้องเคลื่อนย้ายไปมาในลักษณะที่กฎหมายของเครื่องยนต์ฟิสิกส์ไม่อนุญาต บางครั้งสิ่งนี้สามารถทำได้นอกเครื่องยนต์ แต่บางครั้งก็ทำภายในและการทำเช่นนั้นเครื่องยนต์ต้องการปัจจัยการผลิตมากขึ้น แต่อินพุตทั้งสามที่กล่าวถึงข้างต้นครอบคลุมพื้นฐาน

ตัวอย่างเช่นสมมติว่าคุณต้องการย้ายตัวละครในเกมโดยใช้จอยสติ๊ก หากคุณไม่ได้ใช้เอ็นจิ้นฟิสิกส์มันจะค่อนข้างตรงไปตรงมา: เมื่อคุณเห็นว่าผู้ใช้กำลังขยับจอยสติกคุณก็จะขยับวัตถุตามนั้น ด้วยเครื่องยนต์ฟิสิกส์ที่คุณไม่ได้ย้ายวัตถุโดยตรง: คุณใช้แรงที่มันสอดคล้องกับทิศทางที่คุณต้องการวัตถุที่จะไปและปล่อยให้จับเครื่องยนต์จริงย้าย

ความแตกต่างคืออะไร? แม้ว่าจะไม่มีสิ่งใดในโลกวัตถุก็ไม่น่าจะเคลื่อนไหวในลักษณะเดียวกันเพราะเครื่องมือฟิสิกส์จะจัดการกับสิ่งต่าง ๆ เช่นการเร่งความเร็วที่สมจริง แต่ก็มีความเป็นไปได้เช่นกันที่กองกำลังอื่นอาจกระทำการกับวัตถุในเวลาเดียวกันเนื่องจากแรงเฉื่อยและเครื่องยนต์จะคำนึงถึงพวกมันทั้งหมด ตัวอย่างเช่นหากคุณใช้แรงไปทางทิศเหนือกับวัตถุ แต่มีสิ่งอื่นกำลังใช้แรงทางทิศตะวันตก (หรือวัตถุกำลังเคลื่อนที่ไปทางทิศตะวันตกแล้วและไม่มีอะไรที่ชะลอความเร็วลง) ดังนั้นเครื่องยนต์จะเคลื่อนวัตถุไปทางตะวันตกเฉียงเหนือ

นั่นคือสิ่งที่เครื่องยนต์ฟิสิกส์ให้คุณ: ติดตามวัตถุตำแหน่งและความเร็วและแรงที่กระทำต่อพวกเขา ด้วยกฎของกลศาสตร์มันสามารถสร้างกองกำลังของตัวเองเพื่อจัดการสิ่งต่าง ๆ เช่นการชนแรงเสียดทานและแรงโน้มถ่วงโดยอัตโนมัติโดยคุณผู้พัฒนาเกมไม่ต้องทำอะไรเป็นพิเศษ


1

เครื่องยนต์ฟิสิกส์นั้นเป็นแบบจำลองของวัตถุฟิสิกส์

อินพุต

จะช่วยให้คุณสร้างร่างกาย (หรือหลาย ๆ คน) ระบุคุณสมบัติทางฟิสิกส์ของมันเช่นมวลขนาดความหนาแน่น ฯลฯ ...

นอกจากนี้ยังช่วยให้คุณกำหนดคุณสมบัติของโลกฟิสิกส์ที่มีการจำลองเกิดขึ้น (เช่นแรงโน้มถ่วง)

ในที่สุดจะช่วยให้คุณสามารถใช้แรงหรือสร้างข้อต่อระหว่างร่างกาย

เอาท์พุต

เมื่อคุณกำหนดสิ่งเหล่านี้ทั้งหมดแล้วคุณสามารถเริ่มต้นการจำลองสถานการณ์และ Engine Engine จะบอกคุณว่าร่างกายทุกส่วนจะถูกวางไว้ในเวลาต่อไป(ซึ่งมักจะตรงกับเฟรมถัดไปในเกมของคุณ) และคนต่อไปและอื่น ๆ ...

คุณเห็นสไปรต์เคลื่อนที่บนหน้าจอเพราะทุก ๆ กรอบของ Game Engine ถามเอนจิ้นฟิสิกส์

ตอนนี้ร่างอยู่ไหนแล้ว?

และ Game Engine จะปรับปรุงการแสดงกราฟิกตามนั้น

การพิจารณา

ฉันมักจะชอบที่จะเห็นเครื่องยนต์ฟิสิกส์เช่นเครื่องมือที่จะใช้กฎหมายฟิสิกส์ในที่เปิดเผยวิธี

Infact แทนที่จะเขียนโค้ดเพื่ออธิบายการคำนวณที่ควรดำเนินการเพื่อกำหนดว่าร่างกายจะอยู่ในเวลาต่อไปฉันเพียงอธิบายโลกฟิสิกส์การตั้งค่าคุณลักษณะของร่างกาย (และของโลกฟิสิกส์เอง) และฉันปล่อยให้เครื่องยนต์ฟิสิกส์ตอบ คำถามนั้นสำหรับฉัน


ส่วน 'การพิจารณา' ของคุณไม่ชัดเจนเลย (สำหรับฉัน) หากคุณปรับปรุงให้ชัดเจนยิ่งขึ้นและเป็นรูปธรรม / ใช้งานจริง (เช่นให้ตัวอย่างระบบจริงที่คุณสังเกตเห็นสร้างและอื่น ๆ ) จากนั้นฉันจะให้ +1 แก่คุณ
code_dredd

@ray: ขอบคุณสำหรับคำแนะนำของคุณ ฉันจะแก้ไขโดยเร็วที่สุด!
Luca Angeletti

ให้แน่ใจว่าได้ยิงฉันหลังจากที่คุณทำเสร็จแล้วและอย่ารีบเร่ง ควรเป็นประโยชน์สำหรับผู้อื่นในภายหลัง
code_dredd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.