Войти
COC DevBlog

Тест тесселяции и геометрических шейдеров

Автор:

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

Сегодня наконец прочитав кучу всякого на тему, очистив ауру, и читая мантры починил геометрические шейдеры в движке.

Результатом стал простой шейдер тесселяции.

Изображение Изображение
До и после.

Счётчик полигонов не учитывает тесселяцию.
Можно высчитать, но это пока всего лишь тест.

- Добавил поддержку экспорта Collada из modo 501 (Collada 1.4.1).
- Решил вечную проблему считать или не считать TBN самому (при отсутствии данных пространства касательных производится расчёт, в противном случае читаются сохранённые данные).

#Delphi, #INightEngine, #OpenGL

5 января 2011

Комментарии [8]

#1
11:57, 5 янв. 2011

Геометрический шейдер ограничен максимальным к-вом компонентов, которые он может создавать. На моей 8600M GT это было где-то 1024 компоненты. Если декларация вертекса содержит даже 8 компонент (что в принципе маловато для нормального рендер пайплайна), то максимальное к-во вертексов, которые ты сможешь заэмитить в один пас - 128 (1024/8), а треугольников где-то 42 (стрипами чуть больше конечно).

Как ты это делаешь?)

Помню я как-то сферку строил на геометрическом шейдере с расчетом нормалей, uv и тангента. В один пас никак не построишь с достаточным степом, чтоб сферка на сферку была похожа).

По поводу TBN. Лучше всегда экспортить в файл модели. Есть нестандартные ситуации, когда аналитически его нельзя вообще правильно рассчитать (например, когда художник сделал миррор половины модели и редактор перевернул для этой части систему координат). Майкрософт правда для XBox'a требует расчет TBN'а на этапе загрузки. Но гемора с этим много).

#2
12:21, 5 янв. 2011

dez01
Про TBN я как бы в курсе, всегда читал его из Collada, просто из modo он не сохраняется, максимум нормали, поэтому пришлось считать.
Ну и художник может попробовать такой и такой варианты, какой ему больше понравится, понятно что генерация при загрузке хуже.

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

#3
13:42, 18 фев. 2011

На Radeon это работает, тестил?

#4
13:48, 18 фев. 2011

Неа, не тестировал.
У меня нет поблизости ни одного нормального Radeon.:(
В любом случае, надо брать нормальную карту с нормальной тесселяцией.

Вот здесь есть пример, он должен нормально работать на amd/ati.

#5
5:07, 19 фев. 2011

Igroman
> Вот здесь есть пример, он должен нормально работать на amd/ati.
Неа, не работает. Даже шейдеры не компилятся.


У меня просто проблема в том, что не могу протолкнуть больше, чем 7 вершин по 2 вектора в каждом. Если на выход 16 vec4 или больше, то драйвер зависает.
Я уверен, если бы эта демка работала на AMD, то крашилась постоянно, так как на выход тут гораздо больше данных.

#6
9:32, 19 фев. 2011

Вай, что-то у них там совсем страшное.
Но с выходными данными тормоза и на NV, но ты и сам видел, что там значительно больше информации на выходе.
Может сама карта плохо поддерживает геометрические шейдеры? А от вендора примеры тоже падают чтоли?

#7
11:11, 19 фев. 2011

А что, у них разве есть примеры геометрических шейдеров для OpenGL?
Карта Radeon 4870, поддерживает геометрические шейдеры она хорошо.

#8
20:17, 19 фев. 2011

Вот про amd не знаю.
Ну да, эта карта должна держать их нормально, но о причине такого поведения я больше даже не знаю что сказать.:(

COC DevBlog

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