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

Архитектура рендеринга сцены - что уменьшает FPS? (2 стр)

Страницы: 1 2 3 4 5 Следующая »
#15
15:43, 21 апр. 2010

И так... телепаты сдались, количество полигонов, размеры текстур, код рендеринга и прочие в студию)


#16
15:51, 21 апр. 2010

>VSync OFF: FPS 200...250 (целый объект) -> 35...45 (разрезанный объект).
Какое железо? Какие параметры DIP'ов при каждом варианте?

#17
16:23, 21 апр. 2010

Время съедает переключение стейтов - буферы, инпуты, состояния и др.
А вы как рендеряете разбитый ландшафт? Можно не бить буферы, а делать DIP по смещениям в индексном буфере. Разница между 1 и 64 DIP в этом случае не должна чувствоваться, т.к. у вас не будет переключения состояний, а только DIPы.
Вы уверены, что производительность упала именно графического пайплайна?

Еще не следует делать слишком маленькие DIP (менее ~1024 вершин).

> VSync ON: FPS 75 (целый объект) -> 25 (разрезанный объект).
> VSync OFF: FPS 200...250 (целый объект) -> 35...45 (разрезанный объект).
Судя по цифрам, проблема у вас в коде, а не рантайма. Включите dxdebug

#18
16:44, 21 апр. 2010

Cyclone
Отключение дипа дало 1000 фпс (т.е. одна миллисекунда на кадр).

Zakus
Без деревьев и объектов - 70 тыщ вершин, 130 тыщ поликов, текстуры 512х512 24-битные.

Necrys
Встроенный Radeon 3200, Core Duo 2GHz, 2Gb оперативки ddr2-800.

Установка текстур и шейдеров вынесена за глобальный цикл рендера разрезанного ландшафта.
Внутри рендера каждого кусочка остались только:
1. установка шейдерных констант
2. установка источников для вершинного и индексного буферов
3. сам дип.

evirus
Да, я уже начал приходить к этой идее с отрисовкой по смещениям в v/i-буферах.

А вообще, спасибо всем большое, некоторые вещи проясняются.

#19
17:10, 21 апр. 2010

Синий Дракон
> 1. установка шейдерных констант
> 2. установка источников для вершинного и индексного буферов
Это твой ботлнек.
Используй текстурный буфер.

#20
17:23, 21 апр. 2010

SNVampyre,начиная с кокого железа потдерживается TBO?

#21
18:59, 21 апр. 2010

Igor'
> начиная с кокого железа потдерживается TBO?
GF8, R2400 и выше.
В радиках начиная с каталист 9.4.

#22
19:26, 21 апр. 2010

Синий Дракон
> Встроенный Radeon 3200

вот  твой bottleneck :)

#23
0:54, 22 апр. 2010

Протестировал дома на Radeon HD 4600 без vsync - единым объектом выдает около 200 fps, разбитым - 100.

SNVampyre, если "узким местом" являются данные самих вершин, то в какой буфер их не перемещай, а физически их меньше не станет. Поэтому твой совет мне кажется нелогичным.

innuendo
> > Встроенный Radeon 3200
> вот твой bottleneck :)
Особенно забавно будет говорить такое будущим пользователям, очень, так сказать, маркетинговый ход. :)

P.S.
Отрисовка по смещениям из одного буфера пока не реализована, результаты обязательно сообщу.

#24
2:16, 22 апр. 2010

Синий Дракон
> если "узким местом" являются данные самих вершин
С чего ты это взял? Для видюхи данные твоих вершин - это капля в море.
Установка значений для шейдера - это ОЧЕНЬ тяжёлая операция. Тяжелее только установка шейдера на конвейер.
Можно так распределить по тяжести операции (от самой тяжёлой вниз):
1) Установка шейдера на конвейер.
2) Установка констант в шейдере.
3) Установка текстуры на конвейер.
4) Установка буфера вершин.
5) Изменение режима стенсила, изменение масок для фреймбуфера.
6) Смещение поинтеров буфера вершин.
7) Команды на отрисовку.

Могу немного ошибаться, тем более что в Direct3D может быть несколько иначе, но принцип такой. Причём установка шейдера на конвейер может быть тяжелее самой команды на отрисовку до 1000 раз, а установка констант всего раза в 2-3 быстрее.

Кстати, какие маленькие команды на отрисовку я ни делал бы (50-100 вершин за раз, например), почти всегда упирался только в пайплайн видюхи, то есть 1 vertex/clock и 1 tiangle/clock.

#25
3:15, 22 апр. 2010

SNVampyre
> 2) Установка констант в шейдере.
тормозит сам факт установки констант, количество установок или общий их объём?

про индексный буфер ничего нет - им можно пренебречь на фоне остального?

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

#26
3:24, 22 апр. 2010

SNVampyre
> Могу немного ошибаться, тем более что в Direct3D может быть несколько иначе, но
> принцип такой.
В подтверждение твоих слов в Direct-овом хелпе есть статья Accurately Profiling Direct3D API Calls, там как раз как ты говоришь.

#27
3:32, 22 апр. 2010

Синий Дракон
> В подтверждение твоих слов в Direct-овом хелпе есть статья Accurately Profiling
> Direct3D API Calls, там как раз как ты говоришь.
Значит ты мне уже веришь, это радует.

arabesc
> тормозит сам факт установки констант, количество установок или общий их объём?
Количество влияет, но больше влияет сам факт смены констант. Дело в том, что чтобы загрузить константы, приходится останавливать конвейер. А конвейер имеет огромные латентности, тысячи тактов GPU. То есть если у нас допустим частота GPU 600MHz и установка констант занимает 5000 тактов, то поменять их можно 120000 раз в секунду, при 60FPS выходит 2000 раз за кадр. В зависимости от проца и видюхи результаты могут разниться, например на джифорсах это происходит раза в 2 быстрее.

> про индексный буфер ничего нет - им можно пренебречь на фоне остального?
Можешь потестить сам. Я всегда ставлю буфер вершин и индекс-буфер одновременно.


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

#28
15:24, 22 апр. 2010

Влияет именно количество вызовов установки констант. Батчингом установки констант (1 шейдер - 1 вызов установки) я добился ускорения на 20-30%. Т.е. важен не объем устанавливаемых констант, а количество вызовов SetPixelShaderConstantF/SetVertexShaderConstantF

#29
15:34, 22 апр. 2010

Hawk
> Батчингом установки констант (1 шейдер - 1 вызов установки) я добился ускорения
> на 20-30%

20-30% относительно fps вообще или относительно времени на установку констант ?

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

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