Я работал с Maya для анимации и проектов, ориентированных на фильмы, но я также сосредоточился на своих исследованиях по разработке видеоигр. В любом случае, я разговаривал с одним из моих профессоров, и мы не могли понять, почему все игровые движки (о которых я знаю) превращаются в треугольники.
Кто-нибудь случайно узнал, почему игровые движки превращаются в треугольники по сравнению с тем, чтобы модели оставались четырехугольными? Кроме того, каковы плюсы и минусы (если таковые имеются) в этом?
graphics-programming
Грант
источник
источник
Ответы:
Нижняя строка - это треугольник Rasterization, который позволяет компьютерам отображать объекты на экране. Хотя другие говорят это чаще, чем я:
Акцент мой. Источник: http://www.devmaster.net/articles/software-rendering/part3.php
источник
Треугольники имеют много свойств, которые облегчают и, следовательно, ускоряют рисование.
Четыре или более точек могут не находиться в одной плоскости, но три точки всегда есть (игнорируя вырожденные случаи). Это имеет интересное свойство: скалярные значения линейно изменяются по поверхности треугольника. Даже когда треугольник проецируется на экран, скалярные значения все равно линейно изменяются относительно x '/ z и y' / z.
Это, в свою очередь, означает, что большинство, если не все, что необходимо для затенения, текстурной карты и фильтра глубины, треугольник может быть рассчитан с использованием линейной интерполяции, которая может быть выполнена очень быстро в специализированном оборудовании.
tl; dr: треугольники - самый простой примитив, поэтому алгоритмы, работающие с треугольниками, могут быть сильно оптимизированы.
источник
Три точки (треугольник) ВСЕГДА определяют плоскую плоскость. Другими словами, учитывая любые три точки, вы всегда можете создать плоскую плоскость, которая может прорезать все три точки. Однако то же самое не всегда верно для четырех пунктов. Вы можете иметь четыре точки на плоскости, но вы также можете иметь четыре точки, которые не на плоскости.
источник
Это не "игровые движки", которые делают это - все программное обеспечение 3D, которое вы используете, делает это. Это просто не говорит вам об этом, и ваш профессор кажется недостаточно квалифицированным, если он этого не знает. Они существуют в памяти компьютера, даже если программное обеспечение скрывает их от вас. Все 3D-программы имеют опцию, которая делает треугольники видимыми. У них также будет опция, которая разбивает их на редактируемые края, так что вы можете играть с ними. Но они всегда были там с самого начала, и наивно для вашего профессора преподавать этот предмет и все еще удивляться «для чего нужны треугольники».
Треугольник - единственный способ расположить вершины и гарантировать плоскую поверхность. Когда у вас есть квад, вы можете расположить вершины так, чтобы они сгибались. Но это уже сделано из треугольников, и это те треугольники, которые допускают изгиб.
источник
Треугольник - это самый простой примитив, который можно описать изолированно, потому что он имеет три точки, меньше, чем те, которые не описывают поверхность в 3D.
Поскольку треугольник можно рассматривать изолированно, можно создать фрагмент кода или кремния, способный отображать только один треугольник, который с помощью повторения может отображать любую поверхность вообще.
Поэтому первая компьютерная система, которая преуспела в рендеринге «любой поверхности вообще», естественным образом сделала это путем независимого рендеринга многих треугольников.
Если думать о треугольниках и четырехугольниках как о «примитивах» (т. Е. Как об полностью изолированных битах геометрии без контекста), то треугольник является более примитивным, и поэтому он будет стремиться «победить».
Однако, как только компьютеры уровня развлечений превысили определенный уровень сложности в 1980-х годах, простота рассмотрения «примитивов» в изоляции стала менее важной. Если графика должна быть произведена в массовом порядке, то экономия от масштаба благоприятствует обработке групп связанных вершин, так же как и сборке сотен почти одинаковых автомобилей одновременно.
Вот почему в 1980-х годах фильмы приняли «четырехугольник», который является неправильным, потому что он относится к двумерной сетке вершин в трехмерном пространстве, а не к изолированному четырехугольнику.
Такого же перехода от треугольников к «квадратам» еще не произошло в сфере интерактивных развлечений, но, скорее всего, это произойдет довольно скоро и по тем же причинам, что и в кинобизнесе.
источник
Есть только один способ триангуляции треугольника по сравнению с 'n - 2' способами для n-стороннего многоугольника. Таким образом, треугольники в конечном счете являются наименее двусмысленным способом определения многогранной формы. Кроме того, как указывали другие авторы, существует множество способов ускорить растеризацию треугольника (а не квадрата или выше) (константа z является одной из моих любимых). Кроме того, проще оптимизировать тесты пересечения лучей и треугольников, чем тесты пересечений лучей и произвольных многоугольников. Фактически, многие операции над n-сторонними полигонами выигрывают от наличия триангулированного представления. Это не означает, что n-сторонние представления многоугольников являются «плохими» - они очень полезны, но в конечном итоге вы захотите работать с треугольниками для многих операций с сетками.
источник
Пока треугольник определяется тремя неколинейными вершинами (читай: ни один из углов не является точным числом Pi), вершины определяют уникальную плоскость.
Квадрат, конечно, определяется четырьмя вершинами. Эти вершины вполне могут быть некомпланарными. В этом случае ваш четырехугольник будет действительно двумя треугольниками, разделенными диагональю на четырехугольнике. Это две плоскости, два набора нормалей поверхности и т. Д.
Каждый доступный инструмент моделирования, каждый алгоритм текстурирования, освещения и т. Д. Предполагают, что модель состоит из плоских сегментов, и каждая имеющаяся у нас формула (перекрестные продукты для нормального расчета - первая из имеющихся у нас) использует абсолютный минимальный входной набор данных - три вершины определяют плоскость, а плоскость - это то, что нам нужно, чтобы делать все причудливые вещи.
Вы, конечно, могли бы написать движок для работы с квадраторами, но вы обнаружите, что игнорируете четвертую вершину почти в каждом случае, за исключением случая, когда вам (часто) нужно убедиться, что он копланарен с остальными тремя, которые определяют квад. И наиболее логичным решением для случая, когда он не является компланарным, было бы разделение четырехугольника на два треугольника. Так почему бы не начать с этого?
Какой смысл работать с квадроциклами?
Если вам нужен квад, соедините два треугольника.
источник
Если мы предположим, что получение 4-х точек копланарно не является проблемой (это, как уже отмечали другие, но терпите меня), то вы обнаружите, что рендеринг произвольной трапеции (как обычно будет выглядеть четырехугольник) когда преобразовано в экранное пространство) не особенно отличается от рендеринга треугольника - на самом деле, когда вы выполняете обрезку, он работает почти так же, как и дополнительные вершины. (По крайней мере, в программной модели - аппаратное обеспечение может иметь более простой способ перебора.)
Поэтому остающаяся проблема заключается в эффективности представительства. - вы можете легко представить четырехугольник с двумя треугольниками и без каких-либо дополнительных вершин, если вы используете полосу треугольника (3 вершины для 1-го треугольника, затем дополнительный вершина для 2-го треугольника). С другой стороны, если вы пытаетесь изобразить треугольник с квадратом, вам нужно использовать 4 вершины и иметь вырожденную, идентичную другой. Это не идеально с точки зрения эффективности.
источник