Войти
CryengineФорум

Cryengine V : Разбор основ (10 стр)

Страницы: 19 10 11 1215 Следующая »
#135
11:33, 9 дек. 2016

Или вот, как понять этот профилировщик студии

Изображение

у меня вообще сцена пустая, не говоря уже о физике, какой еще NodeCollision )


#136
(Правка: 12:32) 11:46, 9 дек. 2016

а где можно скачать твою тестовую сценку со спрайтами? glDebuger'ом мб прогнать глянуть какие там наиболее часто вызываемые ф-и в цикле, я помню что glUniform... наиболее часто "мелькала" и поэтому я что-то пытался сделать с UBO. Кстати ты не пробовал под DX11 собрать? Гл-рендерер все-таки медленнее сам по себе, и на ХNA явно не GL юзается

по-моему все достаточно наглядно с VS дебагером, тут в сцене три кубика + пол, на которые смотрит камера +2 источника света и видно что шадов мапа рисуется дольше чем сами коробки с полом )
Изображение

#137
12:07, 9 дек. 2016

https://github.com/1vanK/Urho3DSpriteBatch

#138
12:24, 9 дек. 2016

> Кстати ты не пробовал под DX11 собрать?

пробовал, вот разница в фпсах http://urho3d.prophpbb.com/topic596-10.html
печаль в том, что xna использует DX9, а на DX9 у меня еще меньше фпс )

#139
(Правка: 13:03) 12:54, 9 дек. 2016

ну на первый взляд имхо проблема в том что graphics->GetShader очень тормозная ф-я, а ты её зовешь для каждого спрайта когда пушишь их в пулл ( sprites_.Push(sprite);) тебе нужно вынести это перед spriteBatch_->Begin(); т.е. сначала генерация шейдера для группы, а потом уже создание этой группы с уже собранным и найденным шейдером.

Изображение

У  меня кстати 100000-200000 спрайтов видяха загружена на 7-10% (GPU-z) ) и 12 - 11 фпс,  CPU - 32%.

Я не в курсе отражает ли GPU-Load загрузкy по филлрейту или только шейдерных блоков SMX, мб уперлось в филл-рейт ?

#140
(Правка: 13:05) 13:01, 9 дек. 2016

Да, я выносил GetShader наружу и получил плюс один фпс, что всего 2%

> У меня кстати 100000-200000 спрайтов видяха загружена на 12-14% (GPU-z) ) и 12 - 11 фпс

сдается мне затык не в видюхе и не в процессоре, а в шине, потому как каждый кадр новый меш передается

EDIT: и вообще полагаться на тайминги в дебаг версии вообще не правильно, в дебаг версии у меня даже от небольшого изменения в коде фпс скачет туда сюда,
а в релизной версии чтобы я не делала фпс один и тот же)) уж больно там много всяких проверок в дебаг версии - границы массивов и прочее, поэтому и выдает результат, что GetShader тормозной, так как там поиск уже загруженных шейдеров по хештаблице

#141
13:06, 9 дек. 2016

>а в шине
PCI-E ? А как посчитать, что у нее там за параметры по пропускной способности?

#142
13:07, 9 дек. 2016

я не знаю

#143
13:57, 9 дек. 2016

Скомпилировал релиз с отладочной информацией (чтобы имена функций были доступны и коды был сгенерировал как релизный),
GetShader() вместо 45% стал расходовать 25%, и что интресно - основные затраты времени даже не поиск по хеш-таблице, а вычисление хеша для поиска в хештаблице )

#144
14:13, 9 дек. 2016

угу что-то с этим вычислением нечисто

потом после Clear можно сразу сделать ресервед для вектора
sprites_.Clear();
sprites_.Reserve(reserved_);

а ресервед задавать перед циклом
        spriteBatch_->Begin();
  spriteBatch_->Reserve(100500);

        for (int i = 0; i < 100000; i++)

#145
14:20, 9 дек. 2016

Оно расширяет емкость (capasity) до нужного размера по мере надобности, но никогда не уменьшает, так что после первых нескольких кадров емкость списка настолько большая, насколько необходимо.

#146
14:33, 9 дек. 2016

Залил коммит с кеширвоанием GetShader() в репозиторий, хоть профайлер и показывал 25% нагрузки изза этого шейдера, дало только один фпс в результате )
Зато теперь судя по профайлеру основная нагрузка ушла в bool VertexBuffer::SetData(const void* data), т.е. на передачу данных на видюху. На этом мои полномочия все, если не придумать что-то принципиально иное)

#147
15:06, 9 дек. 2016

попробовал убрать VertexColor из вершины и в релизе с 77 фпс поднялся(100к спрайтов) до 112 но Bus interface load только 25% в пике был, GPU - 56% Mem - 50% притом что видяха работала в каком-то щадящем режиме на 700mhz

#148
15:10, 9 дек. 2016

странно все это, нигде ниче не нагружено, но фпс не апается

#149
(Правка: 15:23) 15:20, 9 дек. 2016

вот так уперся в 200фпс с теми же 100к спрайтами, наверное лимит ухи?

void SpriteBatch::Draw(Texture2D* texture, Rect& destination, Rect* source,
    Color color, Vector2 origin, float rotation, SBEffects effects)
{
    static Graphics* graphics = GetSubsystem<Graphics>();
  static ShaderVariation* cvs = graphics->GetShader(VS, "Basic", "DIFFMAP");
  static ShaderVariation* cps = graphics->GetShader(PS, "Basic", "DIFFMAP");


    SBSprite sprite
    {
        source ? *source : Rect(0, 0, texture->GetWidth(), texture->GetHeight()),
        destination,
        color,
        origin,
        rotation,
        texture,
        SBE_NONE,
        cvs,
        cps
    };

  //graphics->GetShader(PS, "Basic", "DIFFMAP VERTEXCOLOR")

    sprites_.Push(sprite);
}

cpu - 30%
gpu - 60%
mem псп- 40%
bus interface - 12%

Страницы: 19 10 11 1215 Следующая »
CryengineФорум