Войти
OpenGL communityФорум

Аппаратная тесселяция и displacement mapping в OpenGL (комментарии) (2 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#15
16:29, 7 авг. 2012

/A\
> Входные данные можно читать спокойно, а вот записывать данные можно только по gl_InvocationID.
А, тогда понятно.
А индексы у них всегда 0, 1, 2... или  зависят от gl_InvocationID?


#16
16:38, 7 авг. 2012

А зачем ля displacement'а нужна тесселяция, если вершины можно сгенерировать, используя gl_VertexId в вершинном шейдере?

#17
18:24, 7 авг. 2012

SNVampyre
Всегда
> In the tessellation control language, gl_InvocationID
> contains the index of the output patch vertex assigned to the shader invocation.
> It is assigned an integer value in the range [0, N-1] where N is the number of output
> patch vertices.

gammaker
> А зачем ля displacement'а нужна тесселяция, если вершины можно сгенерировать,
> используя gl_VertexId в вершинном шейдере?
В смысле?

#18
20:21, 7 авг. 2012

Рисуешь пустоту через glDrawArrays без атрибутов. Получается столько вершин без атрибутов, сколько указано при рисовании. В шейдере можно узнать номер вершины через gl_VertexID. Поделив этот номер на ширину можно посчитать его координаты x и y. А z взять из карты высот. Получается такой ландшафт, который не занимает памяти, если не считать текстуры (которую тоже, кстати, можно сгенерировать на лету).

#19
20:58, 7 авг. 2012

gammaker
Ну и? Фишка тесселяции в том, что у тебя получается больше вершин, чем указано при рисовании.

#20
21:13, 7 авг. 2012

Я думаю, фишка тесселляции в том, что можно равномерно загрузить блоки GPU. А равномерно - это по 8-16 пикселей на треугольник. Ведь у нас обычно 90% пикселей заполнены 10% треугольников, а 10% пикселей заполнены 90% треугольников. Для этого и нужно знать соседние вершины в патче, чтобы грамотно менять фактор тесселляции в зависимости от видимой длины ребра на экране.
Как раз этому и надо было уделить основное внимание, а не смещению вершины по высоте из текстуры.

#21
22:12, 7 авг. 2012

SNVampyre
Жди следующий статей ;)

#22
22:30, 7 авг. 2012

SNVampyre
А при таком методе вершины не поплывут?

#23
22:46, 7 авг. 2012

SNVampyre
> Я думаю, фишка тесселляции в том, что можно равномерно загрузить блоки GPU.

интересная точка зрения :) 

> Для этого и нужно знать соседние вершины в патче

есть куча техник, для которых нужно иметь данные по всем контрольным точкам сразу

> Как раз этому и надо было уделить основное внимание, а не смещению вершины п
> высоте из текстуры

уделять  внимание нужно многим вещам, а не зацикливаться на одной - мнимой скорости

#24
22:51, 7 авг. 2012

>Ну и? Фишка тесселяции в том, что у тебя получается больше вершин, чем указано при рисовании.
А в моём способе указать больше можно без проблем. Можно на лету перед отрисовкой вычислять количество нужных вершин, не меняя буфер (которого вообще нету!). Естественно, таким способом можно получить только регулярную сетку, но, судя по всему, в статье ты её и делаешь как раз, не используя то преимущество тесселяции, что можно делать больше полигонов там, где это действительно нужно (то, что как раз сказал SNVampyre).

#25
23:02, 7 авг. 2012

gammaker
> А в моём способе указать больше можно без проблем.

это как же ?:)

#26
10:12, 8 авг. 2012

>это как же ?:)
В третьем параметре glDrawArrays.

#27
10:43, 8 авг. 2012

gammaker
> В третьем параметре glDrawArrays.

это у вас динамический вершины добавляются ? :)

#28
10:50, 8 авг. 2012

/A\
> Еще есть функция memoryBarrier(), но эксперименты с ней ничего не дали, в
> смысле проблем и без нее не было

это типа примитив синхронизации - полезно, когда сами контрольные точни меняются

#29
13:34, 8 авг. 2012

>это у вас динамический вершины добавляются ? :)
Я же говорю, вообще без вершин, атрибуты выключены. У вершинного шейдера не будет никаких входных данных кроме номера вершины и uniform'ов, по которым он будет всё генерировать на лету.

Страницы: 1 2 3 4 5 6 Следующая »
OpenGL communityФорум

Тема в архиве.