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

Разумное количество полигонов.

Страницы: 1 2 3 4 5 Следующая »
#0
17:20, 26 мар 2021

Исходя из опыта, какое максимальное количество полигонов может обрабатывать средняя видеокарта скажем за 5 мс?
У меня будет модель города, с высоты птичьего полёта он будет виден весь. Есть разные по уровню деталировки предложения, вплоть до 10м вершин. Но не уверен что карты потянуть рендерить это в режиме VR. Не хотелось бы купить, а потом окажется что это сильно тормозит.

#1
17:31, 26 мар 2021

эм. лоды кубизма и импостеры не предусмотрены заранее или средствами рендеринга? вопрос к тому, что а должна ли видяха рендерить даже 100 полигонов там где на экране это точка в 4х4 пиксела, к примеру?

#2
17:41, 26 мар 2021

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

#3
17:41, 26 мар 2021

Кое-какие данные я нашел тут: http://www.gpu-tech.org/content.php/138-GF100-vs-Archmark-3-51-Tr… les-per-clock
Но реально все очень сильно будет зависеть от шейдеров, наличия отсечения и автоматической детализации.

У меня сейчас есть такой пример: GTX 980, вывод в Oculus Rift DK 2 (по половине FullHD на глаз), indoor-сцена в 200k треугольников, deferred shading с небольшим числом точечных источников без теней, оптимизаций нет никаких совсем, и итого все рисуется за 3.5-3.7 мс по данным из SteamVR.

#4
17:49, 26 мар 2021

Ranma
Ну SteamVR тебе и не покажет значения меньше 3 мс, там постобработка столько занимает. Это надо GpuView смотреть. Я думаю если ограничиться 1 миллионом вершин, то карты потянут. Хотя сомнения остаются.

#5
18:02, 26 мар 2021

san
Добавлю, что та же сцена без VR и без vsync на полный экран 2560х1440 плюс с небольшой формой на imgui выводится примерно за 3.3-3.4 мс. Вообще надо будет проверить, с какой сложностью рендер упрется в мои 75Hz на DK2.
Учитывая твои идеи с городом, я думаю, что frustum culling надо делать обязательно, только немного поэкспериментировать с размерами объектов (начиная с какого количества треугольников объект выгоднее отсечь на CPU, а не на GPU).

#6
18:05, 26 мар 2021

san
Какие карты? 3090 вытянет 10кк изи. А может и 50.
Gtx 710 врятли вытянет и 1.

Если рассчитывать на уровень народной 1060, то 2кк в одном пасе без овердро должно за 5мс отрисоваться с запасом.

#7
18:18, 26 мар 2021

Ranma
Ну фрустумом у меня есть, но когда у тебя 20.000 зданий то наверно карта быстрее все отсечет чем процессор будет шерстить тысячи кубиков.

HolyDel
Окулус требует стабильных 90 фпс на 970.

#8
18:25, 26 мар 2021

Кстати только сейчас дошло, если каждое здание это отдельный меш, то придется рендерить массив из 20.000 элементов. Так и процессор может лечь...
Вот город на 5м полигонов: https://www.turbosquid.com/3d-models/cityscape-scene-office-3d-1640474
Вот на миллион: https://www.turbosquid.com/3d-models/3d-cityscape-scene-highrise-model-1204792

#9
19:02, 26 мар 2021

Насколько я знаю количество полигонов вторично. Я помню в блендере (или в чем-то ещё, не помню) сглаживал рельеф до нескольких миллионов полигонов, рост был в основном в занимаемой оперативной памяти.
Основное пиоцессорное время это количество отрисовок которое нужно произвести за единицу времени, а тут количество материалов, количество текстур, освещение, пост эффекты и куча все ещё.

Так что вопрос поставлен крайне не корректно.

#10
19:20, 26 мар 2021

san
Тогда надо добавить дерево хотя бы на пару уровней, чтобы не по списку все 20000 зданий отсекать, а сначала несколько групп по 500-1000, потом в каждой из них несколько групп по 20, потом уже или отдельные меши, или вовсе не отсекать, и тогда сложность из O(N) превращается в O(logN), при больших N - очень выгодно. Но как я уже писал выше - надо проверить, сколько треугольников должно быть в меше, чтобы его было выгоднее отсечь на CPU, т.е. понятно, что по одному треугольники лучше на GPU отсекать, а миллион - на CPU, но где будет оптимум - я сам пока не знаю.

Можно так еще сделать: если AABB целиком вне фрустума, то он пропускается в данном кадре, если целиком внутри, то помечается что все его содержимое отрисовывается, а если частично пересекается, тогда надо спуститься в него и проверить также AABB следующего уровня. Если построить общий фрустум на основе фрустумов обоих глаз, то проверку видимости можно выполнять один раз на кадр, а не для каждого глаза, правда тогда каждый глаз будет получать порцию false positive геометрии (которая потом будет отсекаться в конвейере после вершинного шейдера).

sledo
В Блендере визуализация не realtime, там даже 20 FPS во время работы норм будет, а тут надо к 100 стремиться.

#11
19:28, 26 мар 2021

sledo
Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на кадр. На это никак не влияет "количество материалов, количество текстур, освещение, пост эффекты". Вы можете рендерить квад во весь экран или миллион отдельных объектов - без разницы, для GPU это будет все равно 4 миллиона обработанных пикселей.
Другое дело вертексный шейдер и весь пейплайн ДО пиксельного уровня - там количество обработанной геометрии напрямую зависит от количества вершин. Но не зависит от "количества материалов, количество текстур, освещения и пост эффектов".

Ranma
>Тогда надо добавить дерево хотя бы на пару уровней, чтобы не по списку все 20000 зданий отсекать, а сначала несколько групп по 500-1000, потом в каждой из них несколько групп по 20, потом уже или отдельные меши.

Да, что то в этом роде придётся делать... а так не хотелось...

#12
19:58, 26 мар 2021

san
> Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то
> количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на
> кадр.
Только если нет блендинга, не похерился erlyZ, нет мсаа. И все равно, наверное, будет чуть больше, потому что на границе примитива может вызваться дважды (многожды?).

> Окулус требует стабильных 90 фпс на 970.
Ну полтора - два миллиона будут норм, если без извращений.

Ranma
Так у него есть момент, когда видно весь город. Там не поможет фрустум.

#13
20:07, 26 мар 2021

san
> Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на кадр.
Это и в тайловых архитектурах не всегда не всегда так, а к современным десктопным картам вообще не относится.

#14
20:12, 26 мар 2021

Попробовал на современном ноуте со встроенной видеокартой (Radeon Vega в Ryzen 7 4700U) отрендерить 10 млн частиц в FullHD - 20 FPS. Если снизить разрешение и видна только малая часть из них, то FPS повышается до 45. Частицы рисуются текстурированными точками - 1 вершина = 1 частица.
На телефоне с Adreno 640 цифры похожие (10 FPS или 36 FPS, если мало частиц в камеру попадает).
Дискретки у меня нет, но подозреваю, что там даже на слабых и старых было бы 60 FPS.

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

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