Khi nào nên sử dụng tứ phương để biểu diễn xoay và chia tỷ lệ trong 3D?


13

Đệ tứ (phần mở rộng bốn chiều của số phức) có thể được sử dụng để biểu diễn phép quay và chia tỷ lệ của vectơ 3D, và việc áp dụng phần tư lên vectơ 3D bao gồm hai phép nhân bậc bốn, do đó cần ít thao tác hơn nhân với ma trận biến đổi tương ứng. Tuy nhiên, ma trận biến đổi tuyến tính và affine thường được sử dụng thay thế, đặc biệt là trong mã shader.

Khi nào thì thích hợp và thích hợp hơn (do tốc độ, sự ổn định, v.v.) để sử dụng một bậc bốn để biểu diễn tỷ lệ và xoay theo ba chiều, thay vì ma trận biến đổi tương ứng?


Câu trả lời:


8

Tôi muốn bắt đầu với những quan niệm sai lầm:

Các GPU hiện đại (NVIDIA khá lâu và AMD kể từ Quần đảo phía Nam) không hỗ trợ một cách có ý nghĩa các hoạt động vectơ / ma trận vốn có trong phần cứng. Chúng là các kiến ​​trúc vector theo một hướng khác nhau: mỗi thành phần của một vectơ (x, y, z) thường có giá trị 32 hoặc 64, chứa các giá trị cho mỗi phần tử trong một làn. Vì vậy, một sản phẩm chấm 3D thường không phải là một hướng dẫn, nó là một phép nhân và hai phép nhân.

Ngoài ra, việc đếm các hoạt động nguyên thủy như nhân thêm, biến đổi một vectơ theo một bậc bốn sẽ tốn kém hơn so với chuyển đổi một vectơ bằng một ma trận. Biến đổi một vectơ bằng ma trận 3x3 là 3 bội số và 6 phép nhân, và biến đổi một vectơ theo một bậc bốn là hai bội số, mỗi phép nhân gồm 4 phép nhân và 12 phép nhân. (Bạn có thể nhận được ít ngây thơ hơn so với điều này ở đây, đây là một bài viết trên một cách nhanh hơn, nhưng nó vẫn không rẻ như nhân một vectơ với một ma trận.)

Tuy nhiên, hiệu suất không phải lúc nào cũng được xác định đơn giản bằng cách đếm số lượng hoạt động ALU mà nó thực hiện. Đệ tứ yêu cầu ít không gian hơn so với ma trận tương đương (giả sử bạn chỉ thực hiện xoay / tỷ lệ thuần túy) và điều đó có nghĩa là không gian lưu trữ ít hơn và lưu lượng bộ nhớ ít hơn. Điều này thường rất quan trọng trong hoạt hình (điều này cũng thuận tiện khi thường xuất hiện các thuộc tính nội suy đẹp của tứ phương).

Ngoài ra:

  • Ma trận sử dụng nhiều không gian hơn vì chúng hỗ trợ nhiều hoạt động hơn. Một ma trận 3x3 có thể chứa tỷ lệ không hình thành, độ nghiêng, độ phản xạ và phép chiếu trực giao.
  • Ma trận có thể được coi tự nhiên là các vectơ cơ sở và dễ dàng được xây dựng từ các vectơ đó.
  • Nhân một bậc bốn với một phép quay khác (kết hợp hai phép quay) ít hoạt động hơn so với nhân một ma trận với một ma trận khác.

Hài hước và trên DP3hướng dẫn ARBfp GPU của Intel Haswell xuất hiện dưới dạng 3 nhân và 2 bổ sung, xem INTEL_DEBUG=fsđầu ra từ trình điều khiển Intel Linux: paste.ub Ubuntu.com/23150494 . Không chắc chắn liệu đó chỉ là trình điều khiển kém hay CTNH thực sự không có hướng dẫn vectơ đặc biệt.
Ruslan

@Ruslan Rất có thể phần cứng chỉ không có các hướng dẫn vectơ đặc biệt. Chính xác hơn, tuy nhiên, họ làm , nhưng họ đang vector hóa theo chiều ngang SIMD của kiến trúc (các làn xe), chứ không phải vector hóa trên vec3 / vec4 kích thước.
John Calsbeek

4

(Rất nhiều thông tin ở đây tôi đã mượn một cách đáng xấu hổ từ câu trả lời của joojaa và ratchet, với một số ghi chú của riêng tôi.)

Ma trận lợi thế

  • Không chia tỷ lệ và xoay, xiên, chiếu
  • Dịch (trừ khi sử dụng tứ phương)
  • Hỗ trợ phần cứng riêng
  • Đệ tứ thường yêu cầu các chức năng siêu việt để xây dựng
  • Dễ hiểu

Ưu điểm Đệ tứ

  • Chuyển đổi một vectơ đòi hỏi ít thao tác hơn (Hoặc không - Xem câu trả lời của John)
  • Chuyển đổi bởi một quat khác đòi hỏi ít hoạt động hơn
  • Đệ tứ chiếm 4 phao, (8 nếu là kép) nhưng Ma trận chiếm 9-16 phao

Nếu bạn biết bạn sẽ chỉ thực hiện các biến đổi cơ thể cứng nhắc thống nhất, một cặp vectơ / quat thường là một chiến thắng vững chắc trên ma trận 3x4 về không gian lưu trữ (vectơ / quat: 7 hoặc 8 phao so với mat3x4: 12 phao) và tốc độ xử lý. Nếu Quancyions vẫn còn là thần bí đối với bạn, hãy thử loạt web này về họ .


3

Ma trận cung cấp nhiều phép biến đổi có thể hơn các bậc bốn, có thể nghiêng, nhân bản và không đồng đều quy mô ma trận. Không có gì nói rằng bạn không thể làm cho động cơ của mình thực hiện các biến đổi dựa trên bậc bốn, nếu bạn không có nhu cầu về các tính năng biến đổi bổ sung.

Ma trận chỉ rất thuận tiện khi bạn cần xây dựng các không gian nơi bạn biết các vectơ cơ sở. Chẳng hạn như khi thực hiện các phép chiếu vào chỉnh hình. Ngoài ra thực hiện chuyển đổi phối cảnh trong một không gian ma trận là dễ dàng. Ma trận là vượt trội khi nói đến công cụ chiếu.

Theo một cách nào đó, ma trận thường được sử dụng bởi vì chúng đại diện cho mệnh giá phổ biến nhất và không quá phức tạp để làm chủ và hiểu. Lợi ích của tiêu chuẩn hóa vượt xa lợi ích bạn có được từ một quy trình công việc tùy chỉnh. Nó cũng biết làm thế nào để làm các hoạt động ma trận. Trong khi đó, quats không phải là thứ gì đó được giới thiệu ngay lập tức trong uni. Chỉ cần hỏi xung quanh có bao nhiêu người biết cách đảo ngược một nhóm bậc bốn, trong khi bạn không tìm thấy nhiều sinh viên trong giáo dục đại học, những người không biết làm thế nào để đảo ngược một ma trận.

Lưu ý rằng card đồ họa cũng có các đường ống chuyên dụng cho các hoạt động ma trận.


Tôi thực sự đã suy nghĩ về điều này. Ive cũng đùa giỡn về những cách tiếp cận mô hình hóa khác so với hệ thống phân cấp ma trận và quat mà người ta có thể sử dụng.
joojaa

3

Một quernion chỉ có thể đại diện cho quy mô và xoay đồng đều, vì vậy nếu bạn cần bất cứ điều gì khác, bạn sẽ cần thêm một cái gì đó để đại diện cho điều đó.

Dịch có thể được thực hiện với một vec3 bổ sung duy nhất (hoặc sử dụng tứ phân vị kép ). Tuy nhiên, tỷ lệ và tỷ lệ không đồng đều được thể hiện tốt hơn bằng mat4. Các phép biến đổi chiếu (về cơ bản không chia tỷ lệ và hoán đổi z và w) không thể được biểu diễn bằng một bậc bốn.

Đệ tứ có một lợi thế lớn khi nội suy. Slerp được tính toán dễ dàng nhất bằng cách sử dụng bậc bốn.

Áp dụng một bộ tứ (hoặc bộ tứ kép) không được tích hợp vào GPU, do đó bạn sẽ cần phải thực hiện điều đó bằng cách sử dụng các hoạt động của vectơ. Hầu hết các thư viện bậc bốn đều cho rằng bạn sẽ không sử dụng nhóm bậc bốn để biểu diễn tỷ lệ vì vậy đó là điều cần chú ý.

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.