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

Vulkan API (вышел!) (339 стр)

Страницы: 1338 339 340 341 342 Следующая »
#5070
14:36, 13 фев. 2019

Ну вот например у нас есть тайл карты, где ландшафт, деревья и всякие статичные обекты, так просто записываем все в один secondary buffer и рисуем при необходимости. Только придется отказаться от кулинга отдельных объектов тайла, но многие гпу это делают хардварно.


#5071
15:04, 13 фев. 2019

MikeNew
> я и сам заметил что комманд буфер строится адски быстро..

ну так ... просто забросали массивчик данными :)

#5072
(Правка: 15:08) 15:04, 13 фев. 2019

Можно даже в буферы разбубенить эти деревья, ландшафты, статичные объекты. Сделать коллизии, потом раскуллить и расставить эти объекты для отрисовки. Суть в том, чтобы представить дерево не в виде дерева, а в виде некого немого объекта который потом "материализуется" т.е. обретет отрисованную геометрию. Тоже самое с ландшафтами, представив его в чанках и в высотах.
Даже при построении BVH это справедливо, ибо построение иерархии мало отличается от отрисовки по растру, за исключением того, что геометрию нужно сначала временно слить, потом построить его (иерархию).
Если есть инстансинг, это не совсем обязательно, а в случае RTX это предусмотрено в API.
То есть использовать шаблоны для дальнейшей отрисовки всяких объектов, либо же если единичны, то держать на готове сами объекты на отрисовку.
Несколько сложнее будет с уникальными объектами, аля Space Engineers, но и там можно представить блоки в блоках с одной и той же геометрией (хотя они поступают проще и делают единый объект).

#5073
13:17, 25 фев. 2019

Недавно вышел X4 Foundation, где только вулкан рендер. И реализация рендера оставляет желать лучшего.Даже рендердок не может долго дебажить, где-то портится память и все перестает работать. vktrace тоже не работает.
Выдает всего 30фпс в 4к даже в пустом космосе...
Недостатки:
- general layout для depth buffer
- барьер включают абсолютно все этапы (src = ALL_COMMANDS, dst = ALL_COMMANDS) и они даже не сгруппированы, то есть может подряд идти 2 таких барьера
- а еще у всех барьеров стоит флаг DEPENDENCY_BY_REGION, что не имеет смысла
- шейдеры с дебажной инфой и плохо оптимизированны
- очень много дескриптор сетов
- SSAO в полном разрешении, причем нужен только для кабины, где все статично, можно было запечь АО и сэкономить 3мс.

#5074
(Правка: 13:34) 13:30, 25 фев. 2019

/A\
> Недостатки:

ты поработай на реальном проекте - ещё не такое увидишь :)

хотя это Egosoft ...

#5075
13:40, 25 фев. 2019

innuendo
> ты поработай на реальном проекте - ещё не такое увидишь :)
вулкан мало где есть, а так я уже насмотрелся...

#5076
(Правка: 14:51) 14:51, 25 фев. 2019

/A\

а так я уже насмотрелся...

ты про свой Vulkan генератор кода ? :)
#5077
15:18, 25 фев. 2019

Ziltop
> ты про свой Vulkan генератор кода ? :)
Я про то, что везде преобладает кривой код и медленные алгоритмы. Оптимизация это дорого и требует больших знаний.

#5078
8:24, 26 фев. 2019

/A\
> И реализация рендера оставляет желать лучшего

предлагаю посмотреть UE4 с рендером сабжа, особенно с async compute

#5079
12:31, 26 фев. 2019

innuendo
> предлагаю посмотреть UE4 с рендером сабжа
В коде не так просто найти проблемы, надо смотреть как он работает.
Что конкретно тебе там не нравится?

#5080
12:40, 26 фев. 2019

/A\
> В коде не так просто найти проблемы, надо смотреть как он работает.

ну так сделай как ты делал с X4

#5081
13:00, 26 фев. 2019

innuendo
Где мне взять игру на UE4 с вулкан рендером?

#5082
13:03, 26 фев. 2019

/A\
> Где мне взять игру на UE4 с вулкан рендером?

просто скачай UE4 с гита - на простой сцене запуск из VS

#5083
18:29, 26 фев. 2019

innuendo

// VulkanRenderTargets.cpp, line 1470
FinalLayout = (Surface.UEFlags & TexCreate_RenderTargetable) ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_GENERAL;
Они считают что раз создавли без флага рендер таргета, то можно использовать general layout для рендера в текстуру? В доках это не разрешается.
// VulkanRenderTargets.cpp, line 1559
        VkPipelineStageFlags SourceStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, DestStage = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
        switch (PendingTransition.TransitionPipeline)
        {
        case EResourceTransitionPipeline::EGfxToCompute:
          SourceStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          DestStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          break;
        case EResourceTransitionPipeline::EComputeToGfx:
          SourceStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          DestStage = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          break;
        case EResourceTransitionPipeline::EComputeToCompute:
          SourceStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;
          DestStage = VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT;
          break;
        default:
          ensure(0);
          break;
        }
Зачем-то для EComputeToCompute добавили флаг all_graphics, но везде забыли про draw_indirect, а этот флаг нужен для команд vkCmdDispatchIndirect.

Но вообще я запустил трейс дума, где все барьеры содержат все этапы пайплайна (all_commands), как в Х4 сделано, и разница в производительности не заметна. Так что вулкан или нет правильно написаный алгоритм важнее.

#5084
2:21, 27 фев. 2019

/A\
> Но вообще я запустил трейс дума, где все барьеры содержат все этапы пайплайна
> (all_commands), как в Х4 сделано, и разница в производительности не заметна
мне вот очень интересно, какие механизмы в вулкане нужны, чтобы в демках ими щеголять, а от каких можно реальный профит получить. потому что на реализацию некоторых (те же барьеры с максимально точными параметрами, например), уйдёт гораздо больше времени, чем получишь от них профита. а от некоторых(вроде байндинга дескриптор сетов вместо установки юниформов) можно получить неиллюзорный профит right off the bat.

Страницы: 1338 339 340 341 342 Следующая »
ПрограммированиеФорумГрафика