на AVX говорят можно покулить 100к AABB за 0.2 ms, в одном потоке (i7-4770K 4.0 GHz)
шикарно помоему
>ждать заврешения результата. gpu-stall
Чет ниче не сказано про асинхронный оклюжен.
_Wizard_
> Frustum Culling
Вот взять к примеру код из раздела "SSE OBB-фрустум", что там за жесть с лишними обращениями к переменной
в памяти, с абсолютно не нужным _mm_cvtps_epi32, а также кучей сравнений и ветвлений ?
//сохраняем результат __m128i outside_res_i = _mm_cvtps_epi32(outside); _mm_store_si128((__m128i *)&obj_culling_res[0], outside_res_i); //сейчас у нас результат хранится отдельно по каждой оси //нужно скомбинировать результаты. Если хотя бы по одной оси все 8 вершин либо >1 либо < 1, //то объект находится вне области видимости / фрустума culling_res[i] = (obj_culling_res[0] != 0 || obj_culling_res[1] != 0 || obj_culling_res[2] != 0) ? 1 : 0;
Почему нельзя было просто взять и написать вот так (вместо _всего_ вышеприведённого куска говнокода) ?
culling_res[i] = !!(_mm_movemask_ps(outside) & 0x7);
Внутренний же цикл тоже можно заметно упростить и развернуть, а также задействовать упреждающую выборку,
что существенно ускорит расчёт.
> на AVX говорят можно покулить 100к AABB
Какой вам AVX, вы бы SSE сначала научились грамотно пользоваться.
все равно хорошая хорошая и познавательная тема.
то многие забыли вообще про куллинг и интринсики ><
Hybernaculum
>Почему нельзя было просто взять и написать вот так (вместо _всего_ вышеприведённого куска говнокода) ?
спасибо, поправил в этом месте
с SSE не много работал
>Внутренний же цикл тоже можно заметно упростить и развернуть, а также задействовать упреждающую выборку, что существенно ускорит расчёт.
код не оптимален, но он передает идею и быстрее в разы чем на плюсах
не заморачивался особо - иначе статья будет слишком нудной и громоздкой...
напиши правильный код, всем будет интересно
про упреждающую выборку расскажи - вставлю в статью
Спасибо за статью. Было интересно прочитать.
Жаль, что не раскрыта тема Predicated Rendering. Он с dx10 железа есть. В SDK вроде сэмпл был.
evirus
Но это же не frustum culling
innuendo
а через него нельзя сделать? AABB порендерить
evirus
> а через него нельзя сделать? AABB порендерить
можно :)
innuendo
Это которое с артефактами при движении чтоли?
Mira
я про D3D11_QUERY_OCCLUSION_PREDICATE и ID3D11DeviceContext::SetPredication
Оно с железа dx10 должно работать
evirus
> я про D3D11_QUERY_OCCLUSION_PREDICATE и ID3D11DeviceContext::SetPredication
> Оно с железа dx10 должно работать
ты же понимаешь что в этом случае посылаешь графические команды на GPU, результат которых точно не виден - вне фрастума ? Зачем лишние телодвижения ?
innuendo
так вот тут вопрос какие на этом будут издержки, сопоставимы ли они с вышеизложенными методами, или меньше, больше
innuendo
Кстати да. Фрустум оно не заменяет, и может в некоторых случаях переместить ботлнек в другое место
evirus
Есть кое-что получше:
http://advances.realtimerendering.com/s2015/aaltonenhaar_siggraph… er_220dpi.pdf
Слайд 52
Тема в архиве.