Войти
ПрограммированиеФорумГрафика

UV-развертка и производительность? (2 стр)

Страницы: 1 2 3 4 5 6 Следующая »
#15
21:03, 3 сен. 2018

Iron Man
> Выкладывай графики с результатами :)

Тест был следующим: Три одинаковые модели но с разными UV, одна из трех не имеет UV развертки, модель содержит 20 000 tris, 1 одну текстуру на 2048x2048, движок - Godot 3.0 beta 64-bit. Все три модели были выставлены в ряд, в коде каждая модель клонировалась по 1000 раз, три кнопки, переключаясь между ними можно лицезреть только 1001 (как в сказке) объектов.

Результаты:
No UV - 100fps (отсутствует развертка и текстура)
Normal UV - 90fps (около 8 uv islands + 1 одна текстура 2048x2048)
Bad UV - 90fps (каждый tris отдельно + 1 одна текстура 2048x2048)

И размеры файлов (Wavefront OBJ):
No UV - 1.5MB
Normal UV - 2.0MB
Bad UV - 3.0MB

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

#16
22:59, 3 сен. 2018

Daimos
> И размеры файлов (Wavefront OBJ):
Блин, ну кто же так делает :) берёшь и пишешь конвертер, лучше всего на Assimp, и сохраняешь все вершины / нормали / текстурные координаты / индексы прямо как есть, то бишь в формате VBO.
А в движке всё это непотребство уже просто грузишь прямо в VRAM ))) я тебе даже больше скажу, используя PhysicsFS для загрузки ресурсов из ZIP-файлов, получаешь очень приличное сжатие.
Например, 424 Мб моделек (у меня очень тяжёлый ландшафт и вода) ужимается всего до 73 Мб, 22 Мб текстур со сжатием BC7 ужимается всего до 16 Мб, а уж 41 Кб SPIR-V шейдеров ужимается аж до 18 Кб!
Экономь место и время загрузки = как ты будешь любить потребителей своего продукта, так и они будут любить тебя ))) аминь!

#17
23:44, 3 сен. 2018

Iron Man
> Блин, ну кто же так делает :)
Мммм... Очевидно... Я :)

+ Показать
#18
16:23, 4 сен. 2018

Daimos
> Normal UV - 90fps (около 8 uv islands + 1 одна текстура 2048x2048)
> Bad UV - 90fps (каждый tris отдельно + 1 одна текстура 2048x2048)
Что и требовалось доказать. Ты еще можешь шейдер на вершины, какой нибудь с синусами или циклами, прикрутить. Для чистоты эксперимента.
А модельку я бы сделал из 3 вершин, и 3000 индексов с этими вершинами. И вторую без индексов на 3000 вершин. Но от этого ни чего не измениться.
MrShoor
> На AMD и на NVidia как минимум. И с очень давних времен.
Еще раз скажу, (то о чем ты говоришь:) это будет зависеть от типа геометрии, точки линии трианглы стрипы и тд. (то о чем говорю я:) Движки поголовно используют для мешей трианглы с индексами, будут ли объединены вершины через эти индексы или нет, для вершинного шейдера как и для GPU это отдельные трианглы.

#19
18:28, 4 сен. 2018

foxes
> Движки поголовно используют для мешей трианглы с индексами, будут ли объединены
> вершины через эти индексы или нет, для вершинного шейдера как и для GPU это
> отдельные трианглы.
Ты не прав, GPU трианглы с индексами и просто трианглы обрабатывает немного по разному. Я же говорил погуглить post T&L cache.

#20
18:40, 4 сен. 2018

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

#21
18:48, 4 сен. 2018

вспомните старый семпл из  DXSDK, "OptimizedMesh Sample" называется.
там разные варианты, с упорядочиванием под вершинный кеш, без оптимизации, собирание в один стрип, собирание в много стрипов.
на GeForce2 этот тест давал ощутимые различия. на моей GTX450 (на сегодняшний день не новомодная тоже), никакой заметной разницы нет +- погрешность. я хз че они там и как щас делают.
давно уже тестил, седня вот тоже вспомнил, решил проверить еще раз.

#22
18:54, 4 сен. 2018

Mira
> там разные варианты, с упорядочиванием под вершинный кеш, без оптимизации,
> собирание в один стрип, собирание в много стрипов.
Опять же это стрипы, а не отдельные проиндексированные трианглы.

#23
18:56, 4 сен. 2018

я вот кстати не смотрел исходник, там не индексированная геометрия походу.
а современные GPU заморачиваются с индексированной а такую рисуют по моему влоб

#24
19:00, 4 сен. 2018

Mira
Всю жизнь были индексированные трианглы, массив вершин и массив индексов. Максимум что дают движки это возможность сделать индексированными не только трианглы, но и остальные типы геометрии в том числе стрипы, только уже настраивать ручками.

#25
19:10, 4 сен. 2018

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

#26
1:42, 5 сен. 2018

foxes
> То есть по твоему количество вершинных потоков ровно количеству вершин, а не
> количеству индексов (или конечных вершин)?
Ты так и не погуглил, что же такое post T&L кеш. Количество потоков для индексированного меша не равно строго ни количеству вершин, ни количеству индексов. Оно лежит в диапазоне [количество вершин; количество индексов] и все зависит от того, как обработанные вершины попадают в кеш.

> Ты понимаешь что это должно давать хоть какую то разницу в тесте.
И ты представляешь, дает! И вот пример таких тестов: https://zeuxcg.org/2017/07/31/optimal-grid-rendering-is-not-optimal/

> Ну и сама переменная gl_VertexID не имела бы места быть.
У этой переменной есть другие причины быть.

#27
3:16, 5 сен. 2018

MrShoor
> И ты представляешь, дает!
GeForce GTX 965M 4 GB GDDR5 128 Bit - это видимо совсем старая видео карта 2003-2004 года, самого первого поколения с вершинными шейдерами где только post T&L кеш сразу же прижился.
Только я вот сколько не тестирую на своей GTX 450 2011 года, че то как то не очень дает. В общем и целом там даже 1% не наскребется.
MrShoor
> Ты так и не погуглил, что же такое post T&L кеш.
В результате мы имеем количество вызов вершинных шейдеров равному количеству индексов, где только прокешированные вызовы будут опущены. Все это работает с условием что индексы будут соответственно отсортированы, а также модель будет не такая большая, но больше чем 1 варп, чтобы при последующих варпах вершины могли использоваться, скрещиваем пальцы чтобы модель кеширования подошла под нашу геометрию. Но это по любому не будет равно количеству входных вершин, это понятно из приведенного документа. Максимальный выигрыш при соблюдении всех условий (без кривых тест моделей) на вершинном шейдере в два раза не больше. При условии что горизонтальное кеширование у нас отсутствует (только между варпами, а не потоками), для геометрии в виде ленточки выигрыш будет минимальным.

MrShoor
> Ты не прав
То есть видеокарта как имела дело с отдельными трианглами так и имеет, зато у нас есть механизм кеширования этих вычислений. Где я не прав?

#28
4:30, 5 сен. 2018

foxes
> GeForce GTX 965M 4 GB GDDR5 128 Bit - это видимо совсем старая видео карта 2003-2004 года
Это GeForce GTX 965M:
https://en.wikipedia.org/wiki/List_of_Nvidia_graphics_processing_… GeForce_900M_(9xxM)_series
Там в колонке год есть.
И вообще написано: 4 GB, GDDR5. Как ты себе представляешь видеокарту с 4 гигами памяти на борту в (sic!) 2004-ом году.

> Только я вот сколько не тестирую на своей GTX 450 2011 года, че то как то не очень дает.
Твоя видеокарта гораздо древнее GeForce GTX 965M, но и на твоей видеокарте оно очень даже дает. Просто ты так тестируешь.

foxes
> В результате мы имеем количество вызов вершинных шейдеров равному количеству
> индексов
Бла бла бла, бла бла бла, а потом оп:
> Максимальный выигрыш при соблюдении всех условий (без кривых тест моделей) на вершинном шейдере в два раза не больше.
В два раза выйгрыш. Совсем чуть чуть, лол. Всего лишь в 2 раза.

> То есть видеокарта как имела дело с отдельными трианглами так и имеет, зато у
> нас есть механизм кеширования этих вычислений. Где я не прав?
Ты был не прав в том, что изначально говорил:

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

Для вершинного шейдера - это не трианглы. Это вершины. Если вершины нет в кеше - то вызывается вершинный шейдер. Если есть, то не вызывается. А трианглы они потом будут. На assembly stage.
А поскольку у нас теперь есть кеш, то UV развертка может влиять на производительность, т.к. из-за кривой UV оптимизация под кеш будет хуже (а еще с мипами могут быть проблемы, но это уже другая история).

#29
12:11, 5 сен. 2018

MrShoor
> Ты был не прав в том, что изначально говорил:
Вообще ни чего не поменялось ни в производительности, ни в моих словах, ни в старых видеокартах.
MrShoor
> Просто ты так тестируешь.
Видимо не я один, тесты приведены выше! И как ни как они приближены к реальности.
На 126 вершин (или 126 индексов 42 триангла карл!), если в варпе 128 потоков, мы имеет все тот же 1 варп вызов не зависимо от развертки. И так в большинстве случаев.
MrShoor
> В два раза выйгрыш. Совсем чуть чуть, лол. Всего лишь в 2 раза.
1% от общей производительности на специально оптимизированной модели, чего в реалии вообще нет. Это так много.
MrShoor
> Там в колонке год есть.
Чувак это стеб, пойми уже!
MrShoor
> Как ты себе представляешь видеокарту с 4 гигами памяти на борту в (sic!) 2004-ом году.
2003-2004 года это время появление шейдеров.
MrShoor
> Это вершины. Если вершины нет в кеше - то вызывается вершинный шейдер.
Вершины которые беруться соответственно последовательности указанной в индексном буфере, показывающий отдельные трианглы. И если там стоит 1 2 3 1 2 3, то в варпе будет работать 6 потоков, на два триангла. Кеширование сработает если в следующем по таймингу варпе будет хотя бы одна из тех же вершин. И кешируються они не потому что значение вершин в буфере вершин одинаковые, а от того что идут одинаковые индексы от тройки значений - ОТДЕЛЬНОГО ТРИАНГЛА!

foxes
> На этапе фрагментного шейдера и отдельных случаях вершинного шейдера это все равно отдельные треугольники.
foxes
> вершинный шейдер обрабатывает вершины отдельного треугольника.
foxes
> для вершинного шейдера как и для GPU это отдельные трианглы.
foxes
> То есть видеокарта как имела дело с отдельными трианглами так и имеет

Суть не изменилась ни на дюйм, ни в словах, ни на деле, только твое излишне назойливое ковыряние контекстов, в виде "правильно говорить не дырка, а отверстие".

Страницы: 1 2 3 4 5 6 Следующая »
ПрограммированиеФорумГрафика

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