Чому ігрові двигуни перетворюють моделі в трикутники замість того, щоб використовувати квадроцикли?


47

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

Хто-небудь знає, чому ігрові двигуни перетворюються на трикутники порівняно з тим, що залишають моделі чотиристоронніми багатокутниками? Також які плюси і мінуси (якщо такі є) в цьому?


1
Дещо пов'язане, NVidia NV1 використовувало квадратичне відображення текстури (для чого використовуються квадратики), а не трикутники / багатокутники. Це, мабуть, не було великим хітом. Дивіться en.wikipedia.org/wiki/NV1 .
Макке

5
@Macke: Квадратний як у "квадратичному рівнянні", а не квадратичний як у "чотирикутнику". Він не використовує квадроцикли, а квадратичну криву, визначену 9 точками. stason.org/TULARC/pc/3d-graphics-cards-faq/…

9
+1 за ваше запитання, але великий -1 для вашого професора. Це основні речі, які він повинен був знати, так як він знає задню частину власної руки, і знак того, що він трохи не зв’язаний з подіями за останні 15 років.
Максим Мінімус

1
Добре, що в моїй професорській обороні він не на стороні ігрового розробника, він більше аніматор / моделер. Він знав, що це перетворюється на трис, але не знав математичної причини, чому для рендерінгу. Але так, він, мабуть, повинен був знати.
Грант

Відповіді:


56

Суть - це трикутна растеризація, яка полягає в тому, як комп'ютери виводять об’єкти на екран. Хоча інші говорять про це частіше, ніж я:

Усі 3D-об’єкти, які ми бачимо на екрані комп’ютера, насправді складаються з крихітних маленьких геометричних об'єктів, які часто називають примітивами. Чотирикутники, трикутники, n-gons тощо є прикладом примітивів. Ми зосередимось на трикутниках, головним чином, з однієї основної причини: кожен об’єкт можна розділити на трикутники, але трикутник не можна розділити ні на що інше, ніж на трикутники. Через це малювання трикутників набагато простіше, ніж малювання багатокутників вищого порядку; менше речей. Ось чому ці трикутники так часто використовуються в комп'ютерній графіці.

Наголос мій. Джерело: http://www.devmaster.net/articles/software-rendering/part3.php


2
Дивовижно! Це має багато сенсу, коли ви думаєте про це. Дякую за відповідь!
Грант

1
У OpenGL ES, як частина зусиль щодо спрощення API, квадратики та багатокутники навіть не підтримуються. Тож практична причина використовувати трикутники - це те, що у вас немає іншого вибору. Але причина спрощеного API, такого як ES уникає інших примітивних типів, пояснюється причинами, викладеними в цій та інших відповідях.
Субоптим

5
+1 Тому що це відповідь, яку я сміливо можу використовувати як посилання, коли хтось запитує мене про те саме, що стосується моїх закладок. Кажу тільки про це, я завжди думав, що причина трикутників є малим можливим примітивом, тому що при неточності арифметики з поплавковою точкою трис - єдиний безпечний багатокутник, який ви можете гарантувати планарність у всіх випадках, а квадратики не можуть гарантувати, що вони будуть бути планарним весь час. Програмне забезпечення для моделювання, ймовірно, показує об'єкти як квадратики або n-gons як зручність для моделера, але застосовує перетворення / візуалізацію, що розділяє багатокутники, як два або більше трикутників.
Hatoru Hansou

56

Трикутники мають багато властивостей, які полегшують, а отже, і швидше малювати.

Чотири точки або більше можуть бути не на одній площині, але три точки завжди є (ігноруючи вироджені випадки). Це має цікаву властивість, що скалярні значення змінюються лінійно по поверхні трикутника. Навіть коли трикутник проектується на екран, скалярні значення все ще лінійно змінюються відносно x '/ z та y' / z.

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

tl; dr: трикутники є найпростішим примітивом, тому алгоритми роботи з трикутниками можуть бути сильно оптимізовані.


11
+1. Я вважаю, що той факт, що трикутник завжди плоский, є однією з головних причин. Неплоскі багатокутники роблять речі набагато складнішими.
bummzack

2
+1. Я думаю, що трикутники є єдиним багатокутником, для якого можна гарантувати планарність, є основною технічною причиною виготовлення apis та обладнання, яке вимагає трикутників. Програмне забезпечення для моделювання, ймовірно, показує сітки як квадратики як зручність для моделера.
Hatoru Hansou

1
Приємна непланарна аналогія, яку я використовую ... Триногий табурет може стояти на землі лише одним способом, ноги - як кути трикутника. Але чотирилапий табурет може стояти на землі двома способами і коливається з одного положення в інше, якщо одна нога коротша за інші.
ChrisC

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

@newbiez Три вершини завжди визначають одну площину. Куля складається з різних трикутників; два сусідні трикутники, що представляють собою ділянку поверхні сфери, ділять дві вершини, але вони не в одній площині. Це зображення може зробити речі зрозумілішими: cse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett

8

Три точки (трикутник) ЗАВЖДИ визначають плоску площину. Іншими словами, з огляду на будь-які три точки, ви завжди можете створити плоску площину, яка може прорізати всі три точки. Однак те саме не завжди стосується чотирьох пунктів. Ви можете мати чотири точки в площині, але ви також можете мати чотири точки, які не на площині.


2
Насправді 4 випадкові точки, швидше за все, не знаходяться в площині, тому вам доведеться все-таки тріангулювати.
ChrisF

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

1
Навіть якщо точки збігаються, вони є копланарними на нескінченній кількості площин.
3Dave

Будучи копланарним, "ВЖЕ не визначають плоску площину" .
sam hocevar

6

Це роблять не "ігрові двигуни" - все це 3D-програмне забезпечення, яке ви використовуєте. Це просто не говорить вам про це, і ваш професор здається недостатньо кваліфікованим, якщо він цього не знає. Вони існують в пам'яті комп'ютера, навіть якщо програмне забезпечення приховує їх від вас. У всіх 3D-програмах є опція, яка зробить трикутники видимими. Вони також матимуть варіант, який розбиває їх на редаговані краї, так що ви можете грати з ними. Але вони завжди були там для початку, і ваш професіонал наївний, щоб викладати цю тему, і все ще цікаво, "що таке трикутники".

Трикутник - це єдиний спосіб облаштування вершин і гарантування рівної поверхні. Коли у вас є квадроцикл, ви можете розставити вершини таким чином, що він повинен зігнутися. Але вона вже виготовлена ​​з трикутників, і саме ті трикутники дозволяють прогинатися.


3

Трикутник - це найпростіший примітив, який можна описати ізольовано, оскільки він має три точки, менші за які не описують поверхню в 3D.

Оскільки трикутник можна розглядати ізольовано, можна скласти шматок коду або кремнію, який здатний надати лише один трикутник, який завдяки силі повторення може взагалі зробити будь-яку поверхню.

Тому перша комп'ютерна система, якій вдалося зробити «будь-яку поверхню», природно зробила це безліч трикутників самостійно.

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

Однак, коли комп’ютери розважального класу перевищили певний рівень витонченості у 1980-х роках, простота розгляду «примітивів» у відриві стала менш важливою. Якщо графіка повинна вироблятися масово, то економія масштабу сприяє обробці груп пов'язаних вершин, наскільки вони сприяють збірці сотні майже однакових машин одночасно.

Ось чому у 1980-х роках фільми прийняли «чотирикутник», що є помилковим, оскільки воно стосується двовимірної сітки вершин у тривимірному просторі, а не ізольованого чотирикутника.

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


2

Існує лише один спосіб тріангуляції трикутника проти 'n - 2' способів для n-однобічного багатокутника. Отже, трикутники - це зрештою найменш неоднозначний спосіб визначення багатогранної форми. Крім того, як показали інші афіші, існує маса способів прискорити трикутник (а не квадратик або вище) растеризацію (константа z - один з моїх улюблених). Крім того, простіше оптимізувати випробування перетину променів трикутника, ніж це для тестів перетину довільних полігонів. Насправді, багато операцій над n-однобічними багатокутниками вигідно мати трикутне представлення в руці. Це не означає, що представлення n-однобічних багатокутників є «поганими» - вони дуже корисні, але в кінцевому підсумку вам потрібно буде працювати з трикутниками для багатьох операцій з сіткою.


2

Поки трикутник визначається трьома нелінійними вершинами (читай: жоден з кутів не є точним Pi), то вершини визначають унікальну площину.

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

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

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

Що на Землі було б сенсом роботи з квадратиками?

Якщо ви хочете чотирикутник, складіть два трикутники разом.


2

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

Тому питання, що залишається, стосується ефективності представлення. - ви можете легко зобразити квадратик з двома трикутниками, і без зайвих вершин, якщо використовувати смужку трикутника (3 вершини для першого трикутника, то додаткова вершина для 2-го трикутника). З іншого боку, якщо ви спробуєте зобразити трикутник з квадратом, вам потрібно використовувати 4 вершини і мати вироджене, ідентичне іншому. Це не ідеально з точки зору ефективності.

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