ควรใช้ quaternions เพื่อแสดงการหมุนและการปรับสเกลใน 3D เมื่อใด


13

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

เมื่อใดจึงเหมาะสมและเป็นที่นิยม (เนื่องจากความเร็วความเสถียร ฯลฯ ) เพื่อใช้ quaternion เพื่อแสดงการปรับขนาดและการหมุนในสามมิติแทนที่จะเป็นเมทริกซ์การแปลงที่สอดคล้องกัน?


คำตอบ:


8

ฉันต้องการเริ่มต้นด้วยความเข้าใจผิด:

Modern GPUs (NVIDIA มาพักหนึ่งแล้วและ AMD มาตั้งแต่เกาะทางใต้) ไม่สนับสนุนการทำงานของเวกเตอร์ / เมทริกซ์ในฮาร์ดแวร์ พวกมันคือสถาปัตยกรรมของเวกเตอร์ในทิศทางที่แตกต่าง: ส่วนประกอบของเวกเตอร์แต่ละตัว (x, y, z) โดยทั่วไปแล้วจะมีค่า 32- หรือ 64- ประกอบด้วยค่าสำหรับแต่ละองค์ประกอบในเลน ดังนั้นผลิตภัณฑ์ 3D dot มักไม่ได้เป็นคำสั่ง แต่เป็นการคูณและเพิ่มสองตัว

นอกจากนี้การนับการดำเนินการดั้งเดิมเช่นการคูณเพิ่มการแปลงเวกเตอร์โดย quaternion นั้นแพงกว่าการแปลงเวกเตอร์ด้วยเมทริกซ์ การแปลงเวกเตอร์ด้วยเมทริกซ์ 3x3 คือ 3 คูณและ 6 คูณเพิ่ม, และการแปลงเวกเตอร์โดยควอเทอเรียนคือสองคูณควอเทอเนียนซึ่งแต่ละอันประกอบด้วย 4 คูณและ 12 คูณเพิ่ม (คุณสามารถไร้เดียงสาน้อยกว่านี้ - นี่คือการเขียนบนวิธีที่เร็วกว่า -แต่มันยังไม่ถูกเท่าการคูณเวกเตอร์ด้วยเมทริกซ์)

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

นอกเหนือจากที่:

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

ตลกและ Intel Haswell GPU ARBfp ของDP3การเรียนการสอนปรากฏดำเนินการเป็น 3 คูณ 2 และข้อมูลเพิ่มเติมโปรดดูที่INTEL_DEBUG=fsการส่งออกจากคนขับอินเทลลินุกซ์: paste.ubuntu.com/23150494 ไม่แน่ใจว่าเป็นเพียงไดรเวอร์ที่ไม่ดีหรือ HW จริงๆไม่มีคำแนะนำแบบเวกเตอร์พิเศษ
Ruslan

@ Ruslan เป็นไปได้มากว่าฮาร์ดแวร์จะไม่มีคำสั่งพิเศษเวกเตอร์ mul ถูกต้องมากขึ้นแม้ว่าพวกเขาจะทำแต่พวกเขาจะ vectorized ความกว้าง SIMD ของสถาปัตยกรรม (เลน) ไม่ vectorized ทั่ว vec3 / vec4 มิติ
John Calsbeek

4

(ข้อมูลจำนวนมากที่นี่ฉันยืมอย่างไร้ยางอายจากคำตอบของ joojaa และ ratchet freak พร้อมกับบันทึกของฉันเอง)

ข้อดีของเมทริกซ์

  • การปรับขนาดและการหมุนที่ไม่สม่ำเสมอการเอียงการฉายภาพ
  • การแปล (เว้นแต่ใช้ quaternions คู่)
  • สนับสนุนฮาร์ดแวร์เนทิฟ
  • Quaternions มักจะต้องการฟังก์ชั่นที่ยอดเยี่ยมในการสร้าง
  • เข้าใจง่ายขึ้น

ข้อดี Quaternion

  • การแปลงเวคเตอร์ต้องใช้การดำเนินการน้อยกว่า (หรือไม่ - ดูคำตอบของ John)
  • การแปลงรูปจาก Quat อื่นต้องใช้การดำเนินการน้อยกว่ามาก
  • ควอเทอร์เนียนครอบครอง 4 ลอย (8 ถ้าเป็นคู่) แต่เมทริกซ์ครอบครอง 9-16 ลอย

หากคุณรู้ว่าคุณกำลังจะทำการแปลงร่างแข็งตัวสม่ำเสมอคู่เวกเตอร์ / quat มักจะชนะที่มั่นคงในเมทริกซ์ 3x4 ในแง่ของพื้นที่จัดเก็บ (เวกเตอร์ / quat: 7 หรือ 8 ลอยเทียบกับ mat3x4: 12 ลอย) และความเร็วในการประมวลผล หากมี Quaternions วูดูยังคงลึกลับให้คุณลองเว็บแบบนี้กับพวกเขา


3

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

เมทริกซ์นั้นสะดวกมากเมื่อคุณต้องการสร้างช่องว่างที่คุณรู้เวกเตอร์พื้นฐาน เช่นเมื่อทำการประมาณการลงใน orthographic การเปลี่ยนมุมมองในพื้นที่เมทริกซ์ทำได้ง่ายเช่นกัน เมทริกซ์ดีกว่าเมื่อพูดถึงการนำเสนอสิ่งต่าง ๆ

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

โปรดทราบว่ากราฟิกการ์ดยังมีท่อเฉพาะสำหรับการดำเนินการเมทริกซ์


ฉันคิดเรื่องนี้จริง ๆ แล้ว ฉันยังได้ถามด้วยว่ามีวิธีอื่นใดในการสร้างแบบจำลองท่อมากกว่าเมทริกซ์และลำดับชั้น quat ที่เราสามารถใช้ได้
joojaa

3

quaternion สามารถแสดงมาตราส่วนและการหมุนที่เหมือนกันเท่านั้นดังนั้นหากคุณต้องการสิ่งอื่นคุณจะต้องเพิ่มบางสิ่งเพื่อแสดงสิ่งนั้น

การแปลสามารถทำได้ด้วย vec3 เพิ่มเติมเดียว (หรือใช้quaternions คู่ ) อย่างไรก็ตามการปรับขนาดที่ไม่สม่ำเสมอและการตกต่ำจะแสดงโดย mat4 ที่ดีขึ้น การฉายภาพการแปลง (โดยทั่วไปแล้วการปรับขนาดที่ไม่สม่ำเสมอและการสลับ z และ w) ไม่สามารถแสดงด้วย quaternion

Quaternions มีข้อได้เปรียบที่สำคัญเมื่อทำการแก้ไข slerp นั้นคำนวณได้ง่ายที่สุดโดยใช้ quaternions

การใช้ quaternion (หรือ quaternion คู่) ไม่ได้สร้างไว้ใน GPU ดังนั้นคุณจะต้องใช้สิ่งนั้นโดยใช้การดำเนินการของเวกเตอร์ ห้องสมุด quaternion ส่วนใหญ่สันนิษฐานว่าคุณจะไม่ใช้ quaternion เพื่อเป็นตัวแทนของสเกลดังนั้นสิ่งที่ควรระวัง

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