2016-04-25 2 views
1

Я хочу создать процедурно сгенерированные ландшафтные сетки с плоским затененным взглядом в Unity3D.Должен ли я использовать общие вершины в сетке в Unity?

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

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

Лучше создать сетку с разделяемыми вершинами, добавьте, возможно, настраиваемый атрибут вершин, например. 'flat_normal' и настроить шейдеры, чтобы использовать это?

+0

Я думаю, что в абсолютном большинстве случаев GPU обладает большей вычислительной мощностью, чем процессор. Единственный способ узнать, это проверить оба сценария, я думаю. Мне бы хотелось увидеть статистику профилировщика на этом. –

+0

"избыточная информация о расположении вершин"? нет такого понятия. Нет абсолютно никакой причины, вы должны делиться вершинами в сетке. – Fattie

+0

чисто FWIW, (1) обычным явлением является создание сетки для использования в качестве пейзажа (часто совершенно ненужного, но не большого). (2) вам нужен «плоский, мультяшный» вид. не проблема, просто нажмите через много плоских картонных шейдеров, доступных (там есть огромный выбор), чтобы посмотреть, что вам нравится. Стоит отметить, что (3) Единство полностью включает в себя систему «рельефа», которая в наши дни действительно хороша. вы можете просто тривиально использовать это и всю работу. (Снова просто выберите шейдерный вид, который вы хотите.) – Fattie

ответ

3

Простой ответ

Нет,

Единство не в малейшей степени, "искать" общие Verts. Ни один 3D-конвейер не имеет ничего общего с общими именами. Общие verts вообще не помогают или препятствуют 3D-конвейеру.

(Очень часто, когда, например, мы делаем динамическую сетку, мы просто «никогда не использовать общие VERTS на всех», потому что, как вы, вероятно, нашли, что часто гораздо проще не использование общих VERTS.)

Единственная причина использования общих имен - это если по какой-то причине это делает его более удобным для вас. В этом случае 3D-конвейер (Unity или где-либо еще) «позволяет» разделяемые вершины без ухудшения.

+0

BTW, для записи стоит отметить, что: для преобразования между shared/unshared verts требуется три строки кода. Если (по какой-то причине) вы хотели, просто нужно пройти в конце, который «разделяет» (или «де-акции») верт. (Это не будет иметь никакого отношения к конвейеру рендеринга, возможно, вам будет легче по какой-либо другой причине.) – Fattie

+0

На самом деле бывают случаи, когда вы не можете иметь общие вершины, а именно, когда вы либо хотите острый край (= нормали вершин имеют быть другим), или у вас есть УФ-шов (= УФ-координаты должны быть разными) или вы хотите, чтобы соседние грани получили разные цвета вершин. – yes

+0

правда, отличная точка. если вы считаете, что такая же сетка, то да, иногда вам *** нужно *** использовать *** non *** - shared mesh. Снова в терминах вопроса здесь, это абсолютно подчеркивает, что ОП, конечно, не нужно использовать общие вершины. Ключом к этому QA является то, что OP упоминает * «Я не хочу испортить топологию сетки, которую Unity3D ожидает для своих шейдеров» *.что абсолютно неверно; 3D-конвейер «без гражданства» для треугольников, никогда не нужно делиться вершинами. – Fattie

Смежные вопросы