Чому Однорідні координати використовуються в комп'ютерній графіці?


14

Чому Однорідні координати використовуються в комп'ютерній графіці?

Яка б була проблема, якби однорідні координати не використовувались у матричних перетвореннях?


Відповіді:


12

Вони спрощують та уніфікують математику, що використовується у графіці:

  • Вони дозволяють представляти переклади з матрицями.

  • Вони дозволяють представляти поділ по глибині в перспективних прогнозах.

Перший пов'язаний з афінною геометрією. Другий пов'язаний з проективною геометрією.


Які приклади ви шукаєте? Матриці перекладу та все, що стосується перспективних проекцій, має бути досить простим для пошуку?
Барт

@Bart, потрібна аналогія.

2
Вибачте @anonymous, але це насправді нічого не говорить мені. Вам доведеться використовувати більше слів, щоб пояснити, що саме ви шукаєте.
Барт

Я думаю, що ця відповідь не сприймається настільки високо, тому що вона занадто технічна для нас. Можливо, простий приклад з простим формулюванням краще проілюструє принципи
Натан

5

Це в назві: Однорідні координати добре ... однорідні. Бути однорідним означає рівномірне зображення обертання, перекладу, масштабування та інших перетворень.

Рівномірне представлення дозволяє проводити оптимізацію. Обладнання для 3D-графіки може бути спеціалізованим для виконання матричного множення на матрицях 4x4. Він навіть може бути спеціалізованим для розпізнавання та збереження на множеннях на 0 або 1, оскільки вони часто використовуються.

Якщо не використовувати однорідні координати, можливо ускладнити використання сильно оптимізованого обладнання в повному обсязі. Яка б програма не визнавала, що можна використовувати оптимізовані інструкції обладнання (як правило, компілятор, але іноді складніше) для однорідних координат, буде важко з оптимізацією для інших представлень. Він обере менш оптимізовані інструкції і, таким чином, не використає потенціал обладнання.

Як були дзвінки для прикладів: PS4 Sony може виконувати великі множення матриць. Це настільки добре, що він був розпроданий на деякий час, адже кластери з них використовувались замість дорожчих суперкомп'ютерів. Згодом Sony вимагала, щоб їх обладнання не використовувалося для військових цілей. Так, суперкомп'ютери - це військова техніка.

Дослідникам стало звично використовувати графічні картки для обчислення їх матричного множення, навіть якщо жодна графіка не бере участь. Просто тому, що вони в них кращі, ніж процесори загального призначення. Для порівняння, сучасні багатоядерні процесори мають порядку 16 конвеєрів (x0,5 або x2 не має великого значення), тоді як GPU мають близько 1024 конвеєрів.

Це не стільки ядер, скільки трубопроводів, які дозволяють реально паралельно обробляти. Ядра працюють над нитками. Нитки повинні бути запрограмовані чітко. Трубопроводи працюють на рівні інструкцій. Чіп може більш-менш паралелізувати інструкції самостійно.


"PS4 Sony може виконувати масштабне множення матриць." Ви маєте на увазі Cell процесор PS3, правда? У PS4 є досить звичайний процесор x86.
Wumpf

Хоча це гарна відповідь, я не думаю, що це відповідає на питання ОП, і такий тип підказує, що гомогенні координати використовуються, тому що апаратне забезпечення оптимізоване для цього, швидше, однорідні координати є більш корисними і апаратне забезпечення в кінцевому підсумку було розроблено навколо цього. Ще один аргумент для vec4s - це 128-бітовий вирівнювання, що робить його більш ефективним для читання на широких шинах пам'яті (GPU)
PaulHK

4

доповнення:

однорідні координати також дозволяють представляти нескінченність: в 3D, тобто точка в нескінченності в напрямку . Зазвичай джерела світла в кінцевому або нескінченному положенні можуть бути представлені однаково. х,(x,y,z,0)=x,y,z0x,y,z

Щодо перспективної трансформації, вона навіть дозволяє правильно інтерполювати без викривлення в перспективі (всупереч ранній графічній техніці на ПК).


2

Як особистий смак, я завжди утримувався (коли це було можливо) від використання однорідних координат і віддав перевагу простому декартовому формулюванню.

Головною причиною є той факт, що однорідні координати використовують 4 тривіальних запису в матрицях перетворення (0, 0, 0, 1), що передбачають марне зберігання та обчислення (також накладні загальні підрахунки матричних обчислень, які "за замовчуванням" використовуються в цей випадок).

Мінус полягає в тому, що вам потрібно більше дбати при написанні рівнянь і втрачати підтримку теорії матриць, але поки що я вижив.


1
У принципі можуть бути реалізовані типи даних, які насправді не зберігають ці записи, навіть якщо вони діють як і раніше.

1
@Hurkyl Очевидно. Це робиться рідко, оскільки матричні інструменти загального призначення є під рукою.
Ів Дауст

@YvesDaoust Чи можете ви надати приклад plain Cartesian formulationабо посилання на ресурс, який описує його використання в 3D-графіці?
Ден

@Dan: використовуйте y = Ax + b, де A - матриця 3x3 і ba 3x1, замість y '= Ax', де y ', x' - це доповнені вектори та A матриця 4x4.
Ів Дауст

@YvesDaoust Отже, ви передаєте матрицю 3x3 та вектор 3x1 у ваші шейдери замість матриці 4x4? Де ви обчислюєте та зберігаєте w?
Ден

2

Уявіть, що ви хочете представляти перетворення за допомогою матриць. Окуляри можуть бути збережені як і ви можете представляти обертання як та масштабування як Вони відомі як лінійні перетворення, і вони дозволяють робити перетворення як матриці множення. Але зауважте, що ви не можете робити переклади як матричне множення. Натомість ви повинні зробити

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]
Це відомо як афінне перетворення. Однак це небажано (обчислювально).

Нехай R і S - матриці обертання і масштабування, а T - вектор перекладу. У комп'ютерній графіці вам може знадобитися зробити ряд перекладів до певної точки. Ви могли собі уявити, наскільки хитро це може вийти.

Масштабуйте, перекладіть, потім обертайте та масштабуйте, а потім перекладіть знову: Не дуже погано, але уявіть, що ви зробили це обчислення на мільйон балів. Ми хотіли б представляти обертання, масштабування та переклад все як матричне множення. Тоді ці матриці можна попередньо помножити разом на одну матрицю перетворення, з якою легко обчислити.

p=SR(Sp+T)+T

Масштабуйте, перекладіть, потім обертайте та масштабуйте, а потім перекладіть знову:

M=TSRTS
p=Mp

Ми можемо досягти цього, додавши до наших точок ще одну координату. Я збираюся показати все це для двовимірної графіки (3D точок), але ви можете розширити все це до 3D графіки (4D балів). Матриця обертання: Матриця масштабу: Матриця перекладу: Вам слід розробити кілька прикладів, щоб переконати себе, що вони насправді дають вам бажане перетворення і що ви можете скласти ряд перетворень шляхом множення кількох матриць разом.

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]

Ви можете піти далі і дозволити додатковій координаті приймати будь-яке значення. і скажіть, що ця однорідна (x, y, w) координата являє собою евклідову (x, y) координату при (x / w, y / w) ). Зазвичай ви не можете робити поділ за допомогою матричних перетворень, однак, дозволяючи w бути дільником, ви можете встановити w до деякого значення (шляхом множення матриці) і дозволити йому представляти поділ. Це корисно для проектування, оскільки (у 3D) вам потрібно буде розділити координати x і y на -z (у правій системі координат). Домогтися цього можна просто встановивши w до -z, використовуючи таку матрицю проекцій: Q = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 - 1 0 ]

p=[xyw]
Q=[1000010000100010]

1

Розрахунки за афінними координатами часто вимагають поділів, які є дорогими порівняно з додаваннями чи множеннями. Зазвичай не потрібно ділитися при використанні проективних координат.

Використання проективних координат (і загалом, геометрії проективних проектів) має тенденцію до усунення і спеціальних випадків, що робить все простішим і більш рівномірним.


"Розрахунки в афінних координатах часто вимагають поділів": я не розумію, чому. Насправді ви обчислюєте абсолютно однакові вирази.
Ів Дауст

@Yves: Я відповідаю на більш загальну тему "використання в комп'ютерній графіці", а не на конкретні запитання "обчислювальні матричні перетворення".

@Hurkyl: так само я. Під час відображення сцени ви обчислюєте абсолютно однакові вирази з однаковою кількістю поділів (різниця полягає в манекенових термінах з коефіцієнтом 0).
Ів Дауст

@Yves: Hrm. Я звик робити обчислення, де перетворення назад на афінне може бути відкладено певною мірою; Я перейду до вашої експертизи, якщо ви скажете, що це не часто.

-1
  • простіші формули
  • Менше спеціальних випадків
  • Об’єднання та
  • Подвійність

2
Відповідь дуже незрозуміла. Ви повинні детальніше розглянути кожен пункт.
Ротем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.