Исходя из опыта, какое максимальное количество полигонов может обрабатывать средняя видеокарта скажем за 5 мс?
У меня будет модель города, с высоты птичьего полёта он будет виден весь. Есть разные по уровню деталировки предложения, вплоть до 10м вершин. Но не уверен что карты потянуть рендерить это в режиме VR. Не хотелось бы купить, а потом окажется что это сильно тормозит.
эм. лоды кубизма и импостеры не предусмотрены заранее или средствами рендеринга? вопрос к тому, что а должна ли видяха рендерить даже 100 полигонов там где на экране это точка в 4х4 пиксела, к примеру?
refroqus
Поскольку у меня свой движок (так исторически сложилось) то все это придётся делать мне самому. Не хотелось бы туда лезть. Я так понимаю что на пиксельном уровне карта все равно рендерит не больше размера рендер-таргета, а обработка вершин происходит до того. Сама модель проста - одни кубики. Но таких кубиков может быть дофига.
Кое-какие данные я нашел тут: 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.
Ranma
Ну SteamVR тебе и не покажет значения меньше 3 мс, там постобработка столько занимает. Это надо GpuView смотреть. Я думаю если ограничиться 1 миллионом вершин, то карты потянут. Хотя сомнения остаются.
san
Добавлю, что та же сцена без VR и без vsync на полный экран 2560х1440 плюс с небольшой формой на imgui выводится примерно за 3.3-3.4 мс. Вообще надо будет проверить, с какой сложностью рендер упрется в мои 75Hz на DK2.
Учитывая твои идеи с городом, я думаю, что frustum culling надо делать обязательно, только немного поэкспериментировать с размерами объектов (начиная с какого количества треугольников объект выгоднее отсечь на CPU, а не на GPU).
san
Какие карты? 3090 вытянет 10кк изи. А может и 50.
Gtx 710 врятли вытянет и 1.
Если рассчитывать на уровень народной 1060, то 2кк в одном пасе без овердро должно за 5мс отрисоваться с запасом.
Ranma
Ну фрустумом у меня есть, но когда у тебя 20.000 зданий то наверно карта быстрее все отсечет чем процессор будет шерстить тысячи кубиков.
HolyDel
Окулус требует стабильных 90 фпс на 970.
Кстати только сейчас дошло, если каждое здание это отдельный меш, то придется рендерить массив из 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
Насколько я знаю количество полигонов вторично. Я помню в блендере (или в чем-то ещё, не помню) сглаживал рельеф до нескольких миллионов полигонов, рост был в основном в занимаемой оперативной памяти.
Основное пиоцессорное время это количество отрисовок которое нужно произвести за единицу времени, а тут количество материалов, количество текстур, освещение, пост эффекты и куча все ещё.
Так что вопрос поставлен крайне не корректно.
san
Тогда надо добавить дерево хотя бы на пару уровней, чтобы не по списку все 20000 зданий отсекать, а сначала несколько групп по 500-1000, потом в каждой из них несколько групп по 20, потом уже или отдельные меши, или вовсе не отсекать, и тогда сложность из O(N) превращается в O(logN), при больших N - очень выгодно. Но как я уже писал выше - надо проверить, сколько треугольников должно быть в меше, чтобы его было выгоднее отсечь на CPU, т.е. понятно, что по одному треугольники лучше на GPU отсекать, а миллион - на CPU, но где будет оптимум - я сам пока не знаю.
Можно так еще сделать: если AABB целиком вне фрустума, то он пропускается в данном кадре, если целиком внутри, то помечается что все его содержимое отрисовывается, а если частично пересекается, тогда надо спуститься в него и проверить также AABB следующего уровня. Если построить общий фрустум на основе фрустумов обоих глаз, то проверку видимости можно выполнять один раз на кадр, а не для каждого глаза, правда тогда каждый глаз будет получать порцию false positive геометрии (которая потом будет отсекаться в конвейере после вершинного шейдера).
sledo
В Блендере визуализация не realtime, там даже 20 FPS во время работы норм будет, а тут надо к 100 стремиться.
sledo
Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на кадр. На это никак не влияет "количество материалов, количество текстур, освещение, пост эффекты". Вы можете рендерить квад во весь экран или миллион отдельных объектов - без разницы, для GPU это будет все равно 4 миллиона обработанных пикселей.
Другое дело вертексный шейдер и весь пейплайн ДО пиксельного уровня - там количество обработанной геометрии напрямую зависит от количества вершин. Но не зависит от "количества материалов, количество текстур, освещения и пост эффектов".
Ranma
>Тогда надо добавить дерево хотя бы на пару уровней, чтобы не по списку все 20000 зданий отсекать, а сначала несколько групп по 500-1000, потом в каждой из них несколько групп по 20, потом уже или отдельные меши.
Да, что то в этом роде придётся делать... а так не хотелось...
san
> Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то
> количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на
> кадр.
Только если нет блендинга, не похерился erlyZ, нет мсаа. И все равно, наверное, будет чуть больше, потому что на границе примитива может вызваться дважды (многожды?).
> Окулус требует стабильных 90 фпс на 970.
Ну полтора - два миллиона будут норм, если без извращений.
Ranma
Так у него есть момент, когда видно весь город. Там не поможет фрустум.
san
> Если ваш рендер-таргет имеет размер 2048х2048 и заполняется полностью, то количество вызовов пиксельного шейдера будет постоянным и равно 4 миллиона на кадр.
Это и в тайловых архитектурах не всегда не всегда так, а к современным десктопным картам вообще не относится.
Попробовал на современном ноуте со встроенной видеокартой (Radeon Vega в Ryzen 7 4700U) отрендерить 10 млн частиц в FullHD - 20 FPS. Если снизить разрешение и видна только малая часть из них, то FPS повышается до 45. Частицы рисуются текстурированными точками - 1 вершина = 1 частица.
На телефоне с Adreno 640 цифры похожие (10 FPS или 36 FPS, если мало частиц в камеру попадает).
Дискретки у меня нет, но подозреваю, что там даже на слабых и старых было бы 60 FPS.
Тема в архиве.