โปรแกรมควรรับอินพุตประมวลผลและให้เอาต์พุต แล้วเอนจินของฟิสิกส์จะใช้อะไรเป็นค่าอินพุทและเอาท์พุท
โปรแกรมควรรับอินพุตประมวลผลและให้เอาต์พุต แล้วเอนจินของฟิสิกส์จะใช้อะไรเป็นค่าอินพุทและเอาท์พุท
คำตอบ:
เครื่องยนต์ฟิสิกส์มีหน้าที่รับผิดชอบในการจำลองการเคลื่อนไหวและปฏิกิริยาของวัตถุราวกับว่าพวกเขาอยู่ภายใต้ข้อ จำกัด ของฟิสิกส์โลกแห่งความจริง (หรือคล้ายกับโลกแห่งความจริง) ฟิสิกส์ ฉันควรทราบว่าไม่ใช่โปรแกรมแบบสแตนด์อโลน แต่เป็นองค์ประกอบของโปรแกรมที่มีขนาดใหญ่และน่าสนใจกว่า (เช่นเกม)
การป้อนข้อมูลในการจำลองทางฟิสิกส์โดยทั่วไปเป็นชุดของวัตถุ ("ร่างกาย") ที่มีคุณสมบัติ (เช่นไม่ว่าจะแข็งหรืออ่อนมวลของมวลรูปร่างและอื่น ๆ ) รวมถึงชุดของกองกำลังที่ทำหน้าที่บนวัตถุเหล่านั้น
เครื่องยนต์จะจำลองตำแหน่งและทิศทางของร่างกายที่ได้รับการปรับปรุงและนำไปใช้ ("เอาต์พุต") โดยทั่วไปเมื่อวัตถุชนกันหรือทับซ้อนกันซึ่งรวมอยู่ในผลลัพธ์ของขั้นตอนการจำลองในรูปแบบของการโทรกลับที่รหัสลูกค้าสามารถเชื่อมต่อเพื่อจัดการกับตรรกะการเล่นเกมเฉพาะที่เกี่ยวข้องกับการชนกัน
อินพุตมันความเร็วมวลและเวลาผลลัพธ์คือความเร็วใหม่ บางครั้งการหมุน / โมเมนตัมเชิงมุมก็เป็นอินพุตและเอาต์พุตด้วยเช่นกัน
เครื่องมือฟิสิกส์พื้นฐานพยายามจำลองผลของแรงโน้มถ่วงและการชนกัน สำหรับเครื่องยนต์ฟิสิกส์ที่ดีกว่านั่นหมายถึงพวกมันรวมการเสียรูปถาวรและชั่วคราวของวัตถุรวมถึงการแยกวัตถุออกเป็นหลาย ๆ วัตถุและโมเมนตัมเชิงมุมของวัตถุ พวกเขาควรจะจำลองความเครียดเช่นว่ามีรถบรรทุกกี่คันที่สามารถข้ามสะพานนั้นได้จนกว่าจะยุบลง ตัวแปรการจำลองเพิ่มเติมเช่นความต้านทานอากาศจะนับเป็นเอนจินฟิสิกส์ แต่เท่าที่ฉันรู้ว่าสิ่งเหล่านี้ยังไม่ได้ทำให้เป็นเกมใด ๆ
เอ็นจิ้นฟิสิกส์ส่วนใหญ่มีความเชี่ยวชาญในระดับหนึ่งและจะจำลองฟิสิกส์จนถึงจุดที่จำเป็นสำหรับเกม เอนจิ้นฟิสิกส์สำหรับเกมรถมักแตกต่างจากเอนจิ้นฟิสิกส์สำหรับนักกีฬา 3 มิติ และเอ็นจิ้นฟิสิกส์ของเกมกอล์ฟอาจมีการคำนวณการโต้ตอบของลูกกอล์ฟและหญ้าแต่ละใบมากเกินไปในขณะที่ขาดการจัดการการชนความเร็วสูงและการเสียรูปของรถอย่างสมบูรณ์ (ในกรณีที่ลูกกอล์ฟโดน) .
โดยทั่วไปแล้วเครื่องยนต์ฟิสิกส์จะใช้เพื่อทำให้วัตถุในเกมประพฤติในลักษณะที่เป็นจริงเมื่อเทียบกับสภาพแวดล้อมของพวกเขาโดยไม่ต้องออกแบบภาพเคลื่อนไหวเฉพาะสำหรับทุกสถานการณ์ที่เป็นไปได้
โดยเฉพาะเครื่องยนต์ฟิสิกส์จะใช้โมเดลที่มีชุดของคุณสมบัติ (มวลข้อต่อและอื่น ๆ ) และสร้างมันขึ้นมาในเกมตามชุดของพารามิเตอร์
ตัวอย่างแรก ๆ ของสิ่งนี้คือเครื่องยนต์ raggdoll (เช่นใน Unreal) ซึ่งเป็นตัวอย่างของวิธีการที่ร่างกายที่หย่อนยานจะล้มลงตามขั้นตอนเป็นต้น
ในปัจจุบันฟิสิกส์เครื่องยนต์เอ็นจิ้นมักจะถูกรวมเข้ากับแพคเกจเกมโดยรวมพร้อมกับ AI, UI ในเกม, การสร้างฉากอนาจารเป็นต้น
คุณอาจยืนยันได้ว่าเอ็นจิ้นฟิสิกส์กลับไปสู่รุ่งอรุณของการออกแบบเกมเช่นพงษ์อาจถือได้ว่าเป็นเอนจิ้นฟิสิกส์แบบหยาบ อย่างไรก็ตามประเด็นหลักคือเครื่องยนต์ฟิสิกส์สามารถสร้างจุดภาพเคลื่อนไหวได้ทันทีตามชุดของพารามิเตอร์มากกว่าเพียงแค่ใช้ลำดับภาพเคลื่อนไหวที่กำหนดไว้ล่วงหน้าจากการจับภาพเคลื่อนไหวหรือภาพเคลื่อนไหวด้วยตนเอง
ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ ในบางคลาสหรือเกมเช่นการขับรถหรือการจำลองการบินเครื่องยนต์ฟิสิกส์อาจเป็นพื้นฐานของการเล่นเกมและจะเป็นอินพุตหลักในการขับเคลื่อนภาพเคลื่อนไหวบนหน้าจอ แม้ว่าโดยทั่วไปแล้วคำนี้ใช้สำหรับเครื่องมือที่มีวัตถุประสงค์ทั่วไปซึ่งสามารถนำไปใช้กับสถานการณ์ที่หลากหลายโดยไม่จำเป็นต้องมีความรู้หรือการวิเคราะห์บริบทที่เป็นปัญหาในส่วนของนักพัฒนาแทนที่จะสร้างแบบจำลองที่เฉพาะเจาะจงจากพื้นดิน สำหรับแอพพลิเคชั่นเฉพาะ
เอนจิ้นฟิสิกส์มีหน้าที่จำลองการเคลื่อนที่ของวัตถุใน "โลก" (อะไรก็ตามที่มีความหมายในบริบทของเครื่องยนต์) เครื่องมือฟิสิกส์ส่วนใหญ่ในปัจจุบันใช้กลไกของนิวตันในการทำเช่นนี้เนื่องจากค่อนข้างง่ายในการจำลองและ "แม่นยำเพียงพอ" สำหรับจุดประสงค์ส่วนใหญ่เว้นแต่ว่าคุณกำลังทำซิมอวกาศ
ในทางทฤษฎีเครื่องยนต์ฟิสิกส์ "บริสุทธิ์" จะรับอินพุตสามส่วน:
เมื่อพิจารณาถึงแรงเฉื่อยและแรงที่เกิดขึ้นเครื่องยนต์จะเคลื่อนย้ายวัตถุรอบตัว ผลลัพธ์ของเอ็นจิ้นฟิสิกส์เป็นเพียงสถานะใหม่ของ "โลก"ซึ่งเกมสามารถอ่านและแก้ไขตามความจำเป็น
ในทางปฏิบัติเครื่องยนต์ฟิสิกส์ไม่จำเป็นต้อง "บริสุทธิ์"อย่างแน่นอน วัตถุจะต้องสร้างและทำลายและบางครั้งพวกเขาจำเป็นต้องเคลื่อนย้ายไปมาในลักษณะที่กฎหมายของเครื่องยนต์ฟิสิกส์ไม่อนุญาต บางครั้งสิ่งนี้สามารถทำได้นอกเครื่องยนต์ แต่บางครั้งก็ทำภายในและการทำเช่นนั้นเครื่องยนต์ต้องการปัจจัยการผลิตมากขึ้น แต่อินพุตทั้งสามที่กล่าวถึงข้างต้นครอบคลุมพื้นฐาน
ตัวอย่างเช่นสมมติว่าคุณต้องการย้ายตัวละครในเกมโดยใช้จอยสติ๊ก หากคุณไม่ได้ใช้เอ็นจิ้นฟิสิกส์มันจะค่อนข้างตรงไปตรงมา: เมื่อคุณเห็นว่าผู้ใช้กำลังขยับจอยสติกคุณก็จะขยับวัตถุตามนั้น ด้วยเครื่องยนต์ฟิสิกส์ที่คุณไม่ได้ย้ายวัตถุโดยตรง: คุณใช้แรงที่มันสอดคล้องกับทิศทางที่คุณต้องการวัตถุที่จะไปและปล่อยให้จับเครื่องยนต์จริงย้าย
ความแตกต่างคืออะไร? แม้ว่าจะไม่มีสิ่งใดในโลกวัตถุก็ไม่น่าจะเคลื่อนไหวในลักษณะเดียวกันเพราะเครื่องมือฟิสิกส์จะจัดการกับสิ่งต่าง ๆ เช่นการเร่งความเร็วที่สมจริง แต่ก็มีความเป็นไปได้เช่นกันที่กองกำลังอื่นอาจกระทำการกับวัตถุในเวลาเดียวกันเนื่องจากแรงเฉื่อยและเครื่องยนต์จะคำนึงถึงพวกมันทั้งหมด ตัวอย่างเช่นหากคุณใช้แรงไปทางทิศเหนือกับวัตถุ แต่มีสิ่งอื่นกำลังใช้แรงทางทิศตะวันตก (หรือวัตถุกำลังเคลื่อนที่ไปทางทิศตะวันตกแล้วและไม่มีอะไรที่ชะลอความเร็วลง) ดังนั้นเครื่องยนต์จะเคลื่อนวัตถุไปทางตะวันตกเฉียงเหนือ
นั่นคือสิ่งที่เครื่องยนต์ฟิสิกส์ให้คุณ: ติดตามวัตถุตำแหน่งและความเร็วและแรงที่กระทำต่อพวกเขา ด้วยกฎของกลศาสตร์มันสามารถสร้างกองกำลังของตัวเองเพื่อจัดการสิ่งต่าง ๆ เช่นการชนแรงเสียดทานและแรงโน้มถ่วงโดยอัตโนมัติโดยคุณผู้พัฒนาเกมไม่ต้องทำอะไรเป็นพิเศษ
เครื่องยนต์ฟิสิกส์นั้นเป็นแบบจำลองของวัตถุฟิสิกส์
จะช่วยให้คุณสร้างร่างกาย (หรือหลาย ๆ คน) ระบุคุณสมบัติทางฟิสิกส์ของมันเช่นมวลขนาดความหนาแน่น ฯลฯ ...
นอกจากนี้ยังช่วยให้คุณกำหนดคุณสมบัติของโลกฟิสิกส์ที่มีการจำลองเกิดขึ้น (เช่นแรงโน้มถ่วง)
ในที่สุดจะช่วยให้คุณสามารถใช้แรงหรือสร้างข้อต่อระหว่างร่างกาย
เมื่อคุณกำหนดสิ่งเหล่านี้ทั้งหมดแล้วคุณสามารถเริ่มต้นการจำลองสถานการณ์และ Engine Engine จะบอกคุณว่าร่างกายทุกส่วนจะถูกวางไว้ในเวลาต่อไป(ซึ่งมักจะตรงกับเฟรมถัดไปในเกมของคุณ) และคนต่อไปและอื่น ๆ ...
คุณเห็นสไปรต์เคลื่อนที่บนหน้าจอเพราะทุก ๆ กรอบของ Game Engine ถามเอนจิ้นฟิสิกส์
ตอนนี้ร่างอยู่ไหนแล้ว?
และ Game Engine จะปรับปรุงการแสดงกราฟิกตามนั้น
ฉันมักจะชอบที่จะเห็นเครื่องยนต์ฟิสิกส์เช่นเครื่องมือที่จะใช้กฎหมายฟิสิกส์ในที่เปิดเผยวิธี
Infact แทนที่จะเขียนโค้ดเพื่ออธิบายการคำนวณที่ควรดำเนินการเพื่อกำหนดว่าร่างกายจะอยู่ในเวลาต่อไปฉันเพียงอธิบายโลกฟิสิกส์การตั้งค่าคุณลักษณะของร่างกาย (และของโลกฟิสิกส์เอง) และฉันปล่อยให้เครื่องยนต์ฟิสิกส์ตอบ คำถามนั้นสำหรับฉัน