Почему игровые движки конвертируют модели в треугольники вместо использования квадов?

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

Кто-нибудь знает, почему игровые движки конвертируются в треугольники по сравнению с оставлением моделей в виде четырехсторонних полигонов? И каковы плюсы и минусы (если они есть) этого?

47 голосов | спросил Grant 9 MaramWed, 09 Mar 2011 04:19:44 +03002011-03-09T04:19:44+03:0004 2011, 04:19:44

8 ответов


55

Нижняя строка - это треугольник растеризации, который показывает, как компьютеры отображают объекты на экране. Хотя другие говорят это более красноречиво, чем я:

  

Все 3D-объекты, которые мы видим на экране компьютера, фактически сделаны из маленьких геометрических объектов, которые часто называют примитивами. Примеры примитивов - четырехугольники, треугольники, n-угольники и т. Д. Мы сосредоточимся на треугольниках в основном из-за одной основной причины: каждый объект может быть разбит на треугольники, но треугольник не может быть разбит на что-либо еще, кроме треугольников. Из-за этого рисование треугольников намного проще, чем рисование многоугольники более высокого порядка; меньше дел, с которыми приходится иметь дело. Вот почему эти треугольники так широко используются в компьютерной графике.

Акцент мой. Источник: http://www.devmaster.net/articles/software-rendering/part3.php

ответил Nate 9 MaramWed, 09 Mar 2011 04:24:03 +03002011-03-09T04:24:03+03:0004 2011, 04:24:03
56

Треугольники имеют много свойств, которые облегчают и, следовательно, быстрее, рисовать.

Четыре точки и более могут не находиться в одной плоскости, но всегда три точки (игнорируя вырожденные случаи). Это имеет интересное свойство, что скалярные значения линейно изменяются по поверхности треугольника. Даже когда треугольник проецируется на экран, скалярные значения все же линейно меняются относительно x '/z и y' /z.

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

tl; dr: треугольники - простейший примитив, поэтому алгоритмы, имеющие дело с треугольниками, могут быть сильно оптимизированы.

ответил ggambett 9 MaramWed, 09 Mar 2011 04:51:00 +03002011-03-09T04:51:00+03:0004 2011, 04:51:00
8

Три точки (треугольник) ВСЕГДА определяют плоскую плоскость. Другими словами, учитывая любые три момента, вы всегда можете создать плоскую плоскость, которая может прорезать все три точки. Однако то же самое не всегда относится к четырем пунктам. Вы можете иметь четыре точки на плоскости, но вы также можете иметь четыре точки, которые не находятся на плоскости.

ответил Tim Holt 9 MaramWed, 09 Mar 2011 11:08:42 +03002011-03-09T11:08:42+03:0011 2011, 11:08:42
6

Это не «игровые движки», которые делают это - все используемое вами программное обеспечение 3D делает это. Это просто не говорит вам об этом, и ваш профессор кажется довольно недостаточно квалифицированным, если он этого не знает. Они существуют в памяти компьютера, даже если программное обеспечение скрывает их от вас. У всех трехмерных программ есть опция, которая сделает видимыми треугольники. У них также будет опция, которая разбивает их на редактируемые края, чтобы вы могли играть с ними. Но они всегда были там для начала, и наивно, что ваш преподаватель учил этому вопросу и все еще задавался вопросом, «для чего нужны треугольники».

Треугольник - единственный способ расположить вершины и гарантировать плоскую поверхность. Когда у вас есть квадроцикл, вы можете расположить вершины таким образом, чтобы он изгибался. Но это уже сделано из треугольников, и это те треугольники, которые позволяют изгиб.

ответил Domarius 20 TueEurope/Moscow2011-12-20T05:53:44+04:00Europe/Moscow12bEurope/MoscowTue, 20 Dec 2011 05:53:44 +0400 2011, 05:53:44
3

Треугольник - это простейший примитив, который можно описать изолированно , поскольку он имеет три точки, меньше, чем не описывающие поверхность в 3D.

Поскольку треугольник можно рассматривать изолированно, можно сделать фрагмент кода или кремний, способный отображать только один треугольник, который по мощности повторения может вообще отображать любую поверхность.

Следовательно, первая компьютерная система, которая преуспела при рендеринге «любой поверхности вообще», естественно сделала это, создавая независимо друг от друга несколько треугольников.

Если вы думаете о треугольниках и квадах как «примитивах» (т. е. как полностью изолированные биты геометрии без контекста), треугольник является более примитивным, и поэтому он будет стремиться «побеждать».

Однако, как только компьютеры класса развлечения превысили определенный уровень сложности в 1980-х годах, простота рассмотрения «примитивов» в отдельности стала менее важной. Если графика должна быть произведена массово, то экономия за счет масштаба благоприятствует обработке групп связанных вершин, так как они предпочитают одновременно собирать сотни почти идентичных автомобилей.

Вот почему в 1980-х годах фильмы приняли «квадрат», который является неправильным, потому что он относится к 2D-сетке вершин в трехмерном пространстве, а не к изолированному четырехугольник.

Такой же переход от треугольников к «квадам» еще не произошел в сфере интерактивных развлечений, но, скорее всего, это произойдет довольно скоро, и по тем же причинам это произошло в киноиндустрии.

ответил bmcnett 12 MaramSat, 12 Mar 2011 01:36:53 +03002011-03-12T01:36:53+03:0001 2011, 01:36:53
2

Существует только один способ триангуляции треугольника против n-2 путей для одностороннего многоугольника. Таким образом, треугольники в конечном счете являются наименее двусмысленным способом определения многогранной формы. Кроме того, как указывали другие плакаты, существует множество способов ускорения растеризации треугольника (а не четырех или выше) (постоянный z является одним из моих любимых).   Кроме того, легче оптимизировать тесты пересечения лучей треугольника, чем для лучевых экспериментов по пересечению многоугольников. Фактически, многие операции на n-сторонних полигонах выигрывают от наличия триангулированного представления. Это не означает, что n-сторонние многоугольные представления являются «плохими» - они очень полезны, но в конечном итоге вам захочется работать с треугольниками для многих операций с сеткой.

ответил Luther 9 MarpmWed, 09 Mar 2011 14:36:41 +03002011-03-09T14:36:41+03:0002 2011, 14:36:41
2

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

Квадрат, конечно, определяется четырьмя вершинами. Для этих вершин вполне возможно быть некомпланарным. В этом случае ваш квад действительно будет двумя треугольниками, разделенными диагональю на квадроцикле. Это две плоскости, два набора нормалей поверхности и т. Д.

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

Вы могли бы, конечно, написать движок для работы с квадроциклами, но вы бы проигнорировали четвертую вершину почти в каждом случае, за исключением того, когда вам (часто) нужно было убедиться, что он компланарен с тремя другими, которые определяют квад. И самым логичным решением для случая, когда это комманнар не , было разделение квада на два треугольника. Итак, почему бы просто не начать с этого?

Каким будет смысл работать с квадами?

Если вы хотите квадрат, поместите два треугольника вместе.

ответил 3Dave 10 MarpmThu, 10 Mar 2011 21:33:51 +03002011-03-10T21:33:51+03:0009 2011, 21:33:51
2

Если предположить, что получение 4 точек копланарным не является проблемой (это, как указывали другие, но несут со мной), то вы обнаружите, что рендеринг произвольной трапеции (что и есть четырехугольник обычно выглядят так, как будто они трансформируются в пространство экрана) не отличается от рендеринга треугольника - на самом деле, он довольно много работает так же, как только вы выполняете обрезку, поскольку это может привести к дополнительным вершинам. (По крайней мере, в программной модели - аппаратное обеспечение может иметь более простой способ грубой силы выполнения отсечения.)

Таким образом, оставшаяся проблема является одной из эффективности представления. - вы можете легко представить квадрат с двумя треугольниками и без каких-либо дополнительных вершин, если вы используете треугольную полосу (3 верт для первого треугольника, затем дополнительную вершину для второго треугольника). С другой стороны, если вы попытаетесь представить треугольник с квадом, вам нужно использовать 4 вершины и иметь вырожденный, который идентичен другому. Это не идеально с точки зрения эффективности.

ответил Kylotan 11 MaramFri, 11 Mar 2011 05:55:29 +03002011-03-11T05:55:29+03:0005 2011, 05:55:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132