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

проседание FPS

Страницы: 1 2 Следующая »
#0
20:27, 7 окт. 2015

Всем привет. У меня есть 50 сфер(всего около 25000 вершин), расположенные очень близко друг к другу. Имеется самый простой шейдер- все сцена одного цвета. Так вот, чем ближе камера к этим самым сферам, тем сильнее падает FPS(бывало до 5 фпс). при отдалении- частота повышается. Я не пойму, почему это происходит, и можно ли это исправить?


#1
20:32, 7 окт. 2015

Сферы ближе, полигоны больше, филрейт растет. Все правильно.

#2
22:06, 7 окт. 2015

mazahist
Если сферы непрозрачные - сортируй по расстоянию до камеры. Чтобы ближние рисовались первыми, а те, которые за ними отсекались z-тестом.

#3
23:57, 7 окт. 2015

всё равно с таким филлрейтом 5 фпс быть не должно. дрова на видюху точно стоят? она есть?

#4
6:54, 8 окт. 2015

Suslik
зависит от девайса, может у него вообще не пк.

#5
8:26, 8 окт. 2015

mazahist

У меня есть 50 сфер

Они все с текстурами ?
Какой девайс (Комп,мобила, ноут) ?
Твой проц и какая видеокарта ?

У меня хоть и Radeon 7950 и CPU I-5 2320, но когда вывожу 5 прозрачных прямоугольников с текстурой на весь экран FPS просидает в 3 раза, так что сразу заметно становиться.
Это нормальная болячка для всех видях. Я думаю тут так же в малой срепени,может быть от части  виноватым API (например Directx 9\10\11).
Возможно на Vulkan API немного получше будет. Но точно на 100% не уверен.

бывает 5 FPS

А какой самый большой FPS был ?

#6
9:14, 8 окт. 2015
Каждый кадр сферы создаются?
#7
11:43, 8 окт. 2015

А какие методы существуют, чтобы объекты вообще не пихать в видео, если они явно спрятаны за чем-то, чтобы даже до Z теста дело не доходило ?
Frustum - это раз, но он для объектов которые не в поле зрения. А для тех что полностью спрятаны за другими объектами ?

Как вообще большие карты, например, в шутерах отрисовываются так быстро ?

#8
11:49, 8 окт. 2015

bykabak
Occlusion Culling, но у него есть свои артефакты.

> Как вообще большие карты, например, в шутерах отрисовываются так быстро ?
Никогда не возникало с этим проблем даже без хитрых отсечений.

#9
13:06, 8 окт. 2015

-Eugene-
> Occlusion Culling, но у него есть свои артефакты.
Это какие?

#10
13:35, 8 окт. 2015

Вся информация:
у меня ноутбук, процессор core 5: 2.4 ГГц. Тестировал фпс на intel hd graphics 4400: 12-15, на nvidia 840m выдает !60 фпс, что очень странно, при такой программе. Все это дело написано на webgl, тестировалось в последнем chrome на windows 10.
Немного шейдеров
vs:

attribute vec3 position;
uniform mat4 CameraMat,MoveMat;
void main(){gl_Position=CameraMat*MoveMat*vec4(position,1.0);}
fs:
precision highp float;
void main(){gl_FragColor=vec4(0.5,0.7,0.9,1.0);}
P.S. на 840m фпс так и не опустился

#11
15:11, 8 окт. 2015

mazahist, а разрешение экрана какое при отрисовке сцены и низким FPS ?

#12
15:27, 8 окт. 2015

MrShoor
> Это какие?
Поскольку данные окклюдеров идут с прошлого кадра, объекты могут появиться не сразу.
Очень хорошо заметно, если поиграть с HeightMap в UE4.

#13
15:30, 8 окт. 2015

тебе товарищ The Player все уже сказал добавить нечего.
Но могу дать расчет:
Во первых отрисовка трехмерных объектов происходит также как и двухмерных и чем больше картинка тем больше она отрисовывается, также чем больше треугольник или плоскость на экране тем меньше FPS. Отношение производительности по количеству треугольников которые может отрисовать видеокарта обычно считаются на один и тот же покрываемый двухмерный объем на экране.
Далее расчет по объемам начинается от того какой FPS (X1) у тебя при отрисовки одного триангла заполняющего весь экран, или glClear(GL_COLOR_BUFFER_BIT);
Если таких трианглов два то FPS=X1/2;
Если таких трианглов N то FPS=X1/N;
Если твои 50 сфер стоят друг за другом перед экраном то максимальное падение FPS будет в 50 раз при glEnable(GL_CULL_FACE) и в 100 раз если glDisable(GL_CULL_FACE)
Соответственно независимо от того сколько бы у тебя в них не было треугольников, падение до 5 FPS говорит о том что максимальное его значение при пустой сфене с одной сферой на весь экран у тебя вполне может составить 500-250 FPS
Количество треугольников в объектов обычно влияют на FPS не так сильно как объекты наложенные друг на друга отрисовывающиеся на весь экран.
итого 500-250 FPS при падении до 5 с 50 объектами вполне возможен.
Способы борьбы - заранее отсекать невидимые объекты/треугольники попадающие в экран.

-Eugene-
> Никогда не возникало с этим проблем даже без хитрых отсечений.
а как на счет Portal/Door clipping? кажется раньше это так называлось.
Я не помню такого шутера в котором больше 50 объектов стоящих друг за другом были размером больше экрана, поэтому таких проблем действительно не возникало

любая нормальная игрушка позволяла себе в среднем не больше 5 слоев из объектов при этом на экране могло расположится до 15000 объектов с падением FPS не больше 6 раз. Соответственно при FPS 180 минимальное количество кадров в секунду снижалось до 30.
к примеру стратегия в изометрии:
- слой земли
- слой декораций
- слой мобов
- слой эффектов
для стареньких видеокарт этого вполне хватало и FPS падал не больше 4-5 раз, если при этом drawcall были сведены к минимуму. Это 75-15 FPS полет нормальный, с условием того что количество объектов, перекрывающих друг друга, составит не больше 4.

ты же пытаешься разместить больше 10-50 слоев, и удивляешься почему FPS падает в 10-50 раз.

#14
19:58, 8 окт. 2015

-Eugene-
> Поскольку данные окклюдеров идут с прошлого кадра, объекты могут появиться не
> сразу.
Что то не слышал, что это обязательное условие оклюжн куллинга.

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

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