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

Direct3D9: элементарные правила оптимизации (комментарии)

Страницы: 1 2 39 10 Следующая »
#0
11:43, 6 июля 2011

Direct3D9: элементарные правила оптимизации (комментарии)

Это сообщение сгенерировано автоматически.

#1
11:43, 6 июля 2011

Прошу прощения за прошлый, неудачный «вброс». Перенес тему в «статьи» из «советов» и поправил права доступа к документу.

slava_mib, в прошлый раз, внес дельное замечание:

>[...]очень плохо, что написано ЧТО не надо делать, но не написано ПОЧЕМУ этого не надо делать. В итоге, людям придётся зазубривать все правила. Хотя, в том случае, если просто понимать логику почему не надо делать так-то и так-то - запомнить их значительно легче

Правда, в данном случае, мне потребуется ваша помощь в адекватном толковании советов, данных MSDN.
И да, спасибо тому, кто придумал местные «термины» — использовать их было очень удобно :-)

#2
12:20, 6 июля 2011

>Все объекты, которые вы собираетесь отрисовать в текущем кадре, должны быть отсортированы по принципу «от ближнего к дальнему» по отношению к камере
>Все объекты, которые вы собираетесь отрисовать в текущем кадре
ща начнут спрашивать - а почему у меня альфабленд не работает?

#3
12:23, 6 июля 2011

mrt
Предлагаю больше осветить данную тему в статье. Навскидку я думаю следует добавить:
1) RenderStates объединять в IDirect3DStateBlock9.
2) Не всегда нужно выводить от ближнего к дальнем, нужно учитывать прозрачность объектов.
3) Нужно упомянуть про много поточность в Direct3D9, а именно стараться вызывать все в одном потоке, и не использовать флаг создания устройства D3DCREATE_MULTITHREADED
Если еще что вспомню скажу.

#4
12:24, 6 июля 2011

Andrey
> Если еще что вспомню скажу.

ну как же, как же - константы только за 1 вызов :)

#5
12:26, 6 июля 2011

>1) RenderStates объединять в IDirect3DStateBlock9.
кстати, судя по PIX, и обычные последовательности рендерстейтов объединяются в блоки.

#6
12:33, 6 июля 2011

innuendo
> ну как же, как же - константы только за 1 вызов :)

А я, кстати, проверял, оптимальнее отправлять одним буфером :) Что я и делаю. И еще, конечно, нужно отправлять только изменившиеся константы, это дает такой прирост, что я обалдел. Кто-то мне подсказал, только не помню кто.

mrt
Молоца, все правильно написано. Сошлюсь на тебя в своей статье про рендер, чтобы не повторяться. :)

#7
12:45, 6 июля 2011

> Все объекты, которые вы собираетесь отрисовать в текущем кадре, должны быть отсортированы по принципу «от ближнего к дальнему» по отношению к камере

Лучше так: Все НЕ ПРОЗРАЧНЫЕ объекты, которые вы собираетесь отрисовать в текущем кадре, должны быть отсортированы по принципу «от ближнего к дальнему» по отношению к камере


PS и то это утверждение - оговорка, поскольку  если рендить таким способом  настигнет батлнек на батчинге. Если  видяшка слабая на пиксельные, то в крайнем случае  подойдёт  Z препас.

#8
12:45, 6 июля 2011

Osiris
> А я, кстати, проверял, оптимальнее отправлять одним буфером :) Что я и делаю. И
> еще, конечно, нужно отправлять только изменившиеся константы, это дает такой
> прирост, что я обалдел.

и на сколько ты обалдел в цифрах ? :)

#9
12:49, 6 июля 2011

innuendo
> и на сколько ты обалдел в цифрах ? :)

Ну для 100 float4 для источников света в 4 раза где-то. Со 100 fps до 400. Для пары матриц камеры это не так заметно.

#10
12:51, 6 июля 2011

Osiris
> Ну для 100 float4 для источников света в 4 раза где-то. Со 100 fps до 400. Для
> пары матриц камеры это не так заметно.

я имел ввиду про "только те что изменились" ?

#11
13:03, 6 июля 2011

innuendo
> я имел ввиду про "только те что изменились" ?

Ну я про него. У меня на сцене была группа объектов, освещенная n числом истокников света.

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

На основании этого подхода я оптимизировал форвард рендер освещения.

#12
13:09, 6 июля 2011

Osiris
> До реализации проверки, для каждого объекта я отправлял массив float4 размером
> n,

Osiris
> После реализации проверки это один заброс массива float4 размером n,

n == n ? :)

#13
13:16, 6 июля 2011

innuendo
> n == n ? :)
Ага :) первый раз ВСЕ источники для КАЖДОГО объекта, второй раз ВСЕ источники один раз для ВСЕХ объектов.

#14
15:52, 6 июля 2011

mrt, новая версия лучше, но, к сожалению, не сильно )
Думаю, надо навалиться всем хором и довести до ума - сейчас многовато лексических и прочих помарок. И, как и в предыдущей версии, очень мало объяснений (простите, но я не считаю "привет кэшу видеокарты" очень внятным и, главное, запоминающимся объяснением). Сейчас, к сожалению, нет времени, но попозже (в ближ. дни) могут попробовать помочь с доводкой, если есть такое желание.

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

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