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

Тест видимости. (6 стр)

Страницы: 1 2 3 4 5 6
#75
0:20, 4 мая 2021

Джокер
> В GTA IV по мере удаления от здания, карнизы и лестницы тупо исчезали.
Значит они лоды генерируют, вот мелкие детали и пропали. У меня тоже будет нечто подобное, но не все сразу. Я хочу сначала максимально разгрузить рендер, а уже потом с лодами разбираться. У меня команды нет, все самому придется делать, а рихтовать руками 1000 зданий это труд еще тот.


#76
(Правка: 2:24) 2:24, 4 мая 2021

Andrey
> Ты побил город на  куски? Даёт ли сортирка выигрыш? Не стоит сортировать когда камера смотрит сверху.
Так все здания это и есть эти куски. Сортировка особого выигрыша не дает, это для меня было удивительно. Надо будет еще поэкспериментировать.
Сортировка особо не тормозит, это делается на CPU когда GPU делом занята. Я это делаю каждый фрейм, это на производительности процессора не особо сказывается.

>Проверку frustum я так понял ты гоняешь в цикле. Кусков много? Если видно все, цикл не нужен. Вот MrShoor рисует одним куском.
Что значит в цикле? И каких кусков?
У меня проверка на фрустум стоит перед отрисовкой модели:

void Model::Render(XMMATRIX * projView, XMMATRIX* XmodelMat, Shader_Data* Data, BoundingFrustum *frustum, ID3D12GraphicsCommandList* CommandList)
{
...
  for (int k = 0; k < m_SurfIndex.size(); k++)
  {
    int i = m_SurfIndex[k];

    if (frustum)
    {
      BoundingBox box;
      m_Surfaces[i].p_surface->BOX.Transform(box, *XmodelMat);

      if (frustum[0].Contains(box) == DISJOINT && frustum[1].Contains(box) == DISJOINT)
          continue;
    }

    int elem = sizeof(m_Surfaces[i].ConstantData) / sizeof(float);
    int j = m_Surfaces[i].p_surface->index;

    CD3DX12_GPU_DESCRIPTOR_HANDLE SrvHandle(DIRECTX->CbvSrvHandleProvider.GpuHandleFromCpuHandle(h_texture[j].handle));
    activeCmdList->SetGraphicsRootDescriptorTable(3, SrvHandle);


    activeCmdList->SetGraphicsRoot32BitConstants(4, elem, &m_Surfaces[i].ConstantData, 0);
    activeCmdList->DrawIndexedInstanced(m_Surfaces[i].p_surface->size, 2, m_Surfaces[i].p_surface->offset, 0, 0);
Два фрустума и два инстанса это поскольку два глаза :)
Из кода видно, что я проверяю каждую поверхность (компонент меша) на попадание во фрустум. Опять же проверка идет на CPU и карту не тормозит. А вот уменьшение количества геометрии на отрисовку ее существенно разгружает и следовательно время рендера уменьшается.

#77
10:58, 4 мая 2021

Ммм, вот как оказывается выглядит рендер профессионала.

#78
13:07, 4 мая 2021

san
> Так все здания это и есть эти куски. Сортировка особого выигрыша не дает, это
> для меня было удивительно.
от угла наклона зависит. Смотришь сверху - нету смысла сортировать - перекрытий меньше
>И каких кусков?
увидел куски.
>m_Surfaces[i].p_surface->BOX.Transform(box, *XmodelMat);
а трансформиронные хранить нельзя? зачем постоянно трансформировать в кадре?

#79
(Правка: 19:17) 14:18, 4 мая 2021

Andrey
> а трансформиронные хранить нельзя? зачем постоянно трансформировать в кадре?
Пока не оптимизировал для статических обьектов. Раньше у меня их было только два десятка и это было несущественно. Сейчас порядка 1000 зданий но не думаю что на этой операции я что-то сэкономлю ощутимое. На CPU весь рендер занимает порядка 1 мс. Все остальное - GPU.

Походу разобрался с необьяснимыми задержками при отрисовке - оказалось был включен суперсемплинг (!!!)
Теперь время рендера для одного глаза на AMD R9 порядка 2.5-3 мс. Это уже нормально, даже некоторый запас есть.

#80
(Правка: 2:58) 2:52, 5 мая 2021

Некоторые цифры, может кому будет полезно.
В модели 4200 обьектов, всего 16М индексов на 7М вершин, рендер в 1920x1080.
Фрустум отключен, т.е это по сути круговая панорама.

MSAA 4 включено:
AMD R9 Nano (примерно соответствует 970)  - 5.15 ms
Titan X Pascal (примерно как 1080)              - 2.53 ms
Titan V (примерно как 2080Ti)                      - 1.45 ms

MSAA 4 выключено:
AMD R9 Nano              - 4.67 ms
Titan X Pascal              - 2.24 ms
Titan V                        - 1.25 ms

При активации фрустума цифры улучшаются примерно в 2 раза.
Таким образом AMD R9 при включенной MSAA проходит на грани. Все остальные карты имеют солидный запас.


#81
(Правка: 18:20) 5:38, 7 мая 2021

Картинка:

test4 | Тест видимости.

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

#82
5:00, 3 июня 2021

san
> Подожди, как это на CPU? Т.е. ты хочешь все что делает карта автоматически
> (растеризацию, кулинг, рассчет глубины пикселя, мипы) делать врукопашную на
> CPU? Это какая же скорость будет для тысячи кубиков?
Ага, это все быстро, хорошо параллелится и т.д. Растеризовать пару-тройку тысяч трианглов за кадр плевое дело.
>А какой в этом смысл экономия десятка микросекунд на чтение 16КБ по PCIe шине?
Смысл в отсутствии синка cpu-gpu

#83
5:12, 3 июня 2021

san
> Они имеют привычку сливать вместе здания с частью тротуара, несколько зданий
> вместе и т.д. Может в блендере или максе это смотрится нормально, но при
> построении AABB получается полная лажа. Короче нужно бить здания на кубические
> блоки более-менее повторяющие профиль, без этого идея с блоками не работает.
А низя просто самому порезать, автоматически, типо грид, разбивка трианглов по ячейкам, группировка по материалам и т.д. вообще от дизайнеров зависеть не будешь.

Страницы: 1 2 3 4 5 6
ПрограммированиеФорумГрафика