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

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

Страницы: 1741 742 743 744755 Следующая »
#11115
7:00, 23 апр 2024

Как можно использовать деф буфер в другом рендер пасе в качестве обычной текстуры для реализации некоторых эффектов?

1. В другом рендер пасе во фрагментном шейдере пишу uniform sampler2D.
2. Саму деф-картинку создаю с флагами: VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
        VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
3. После первого рендер паса и перед вторым ставлю картиночный барьер с переходами из VK_IMAGE_LAYOUT_UNDEFINED в VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL.
4. После второго рендер паса возвращаю лейаут через барьер из VK_IMAGE_LAYOUT_UNDEFINED в
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL.

И получаю следующее:

+ Показать

да что не так-то? )

#11116
7:32, 23 апр 2024

dominator
> VK_IMAGE_LAYOUT_UNDEFINED
Не используй его, он позволяет видеокарте потерять содержимое текстуры.

А по барьерам непонятно, твое обьяснение не совпадает с ошибкой.

#11117
7:54, 23 апр 2024

/A\
> Не используй его, он позволяет видеокарте потерять содержимое текстуры.
Да, я уже до этого сам догадался, более того, если вспомнить теорию и то, как могут картинки располагаться в память для быстрого доступа (всякие z-curve и пр.), тогда не зная текущий лейаут, невозможно преобразоваться его во что-то другое не потеряв данные, потому что ты не знаешь как их правильно прочитать.

/A\
> А по барьерам непонятно, твое обьяснение не совпадает с ошибкой.
Я развернул все свои помогаторные функции по барьерам для полноты картины и теперь всё это выглядит так:

+ Показать

Дескриптор под эту картинку с деф буфером для пост шейдера имеет тип: VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER

В шейдере он записан как: uniform sampler2D

Сама деф-картинка создаётся с флагами юзеджа: VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
        VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT

Сразу после создания картинки я перегоняю её в VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL для того, что в с таким лейаутом обновить дескриптор пост шейдера.

+ Показать


не понимю в чём косяк...

+ Показать
#11118
8:34, 23 апр 2024

Вопрос закрыт, а разгадка была в том, что я сказочный олень и в барьеры подсовывал деф-картинку не из того фреймбуфера, короче - синтаксис еррор )

#11119
13:09, 23 апр 2024

Это, парни, а можно ли как-то сериализовать / десериализовать TLAS-ы и BLAS-ы RTX-овского пайплайна, что бы при загрузке заново не строить?

#11120
13:19, 23 апр 2024

dominator
Есть команда копирования в память

#11121
13:21, 23 апр 2024

/A\
> Есть команда копирования в память
Как называется то? )

#11122
(Правка: 19:41) 19:27, 23 апр 2024

В Vulkan API значения в деф буфере хранятся от 0 до 1 линейно или как-то их перегнать нужно в линейное представление? Если нет, то в каком? Речь о формате VK_FORMAT_D32_SFLOAT.

#11123
20:01, 23 апр 2024

dominator
> В Vulkan API значения в деф буфере хранятся от 0 до 1 линейно или как-то их перегнать нужно в линейное представление?
Не линейность никак не связана с Vulkan API. После умножения вершин треугольника на матрицу проекции ты получаешь новый vec4. И для каждого пикселя при растеризации глубина считается как depth = pos.z / pos.w

#11124
20:28, 23 апр 2024

dominator
> VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
Это чтобы наверняка работало? Медленно же.

#11125
20:38, 23 апр 2024

MrShoor
> depth = pos.z / pos.w
Я просто не очень понимаю в чём именно проблема, я пытаюсь подружить пайплайн RTX и следующий за ним пайплайн растеризатора с проволочной графикой (редактор моделек и ландшафтов). Так вот, из RTX я пишу в обычный float сторедж буфера глубину попадания луча в меш, нормализую её к от 0.0 до 1.0, затем я пишу из растеризатора в деф буфер (рендер пас пишет), потом кидаю это всё в tone mapper и там всё свожу воедино. Так вот, геометрию линий я хочу отбросить по глубине (обычный z-test так сказать), в итоге у меня получаются смешные артефакты, в частности на картинке линия вылезает из меша, а она вообще говоря идёт параллельно его грани и должна полностью пронзать кубик насквозь. Я уже пробовал вручную по всякому глубину задав и понял, что проблемы здесь в точности float-ов, другого объяснения пока нет, хотя есть - точность Depth Test-а в RTX и в RASTERIZER - разная или если это так - то капец )

+ Показать
#11126
20:40, 23 апр 2024

v1c
> Это чтобы наверняка работало? Медленно же.
Да это всё равно между рендер пасами, поэтому вроде пофиг, т.к. сами рендер пасы и так вроде как неявными барьерами являются.

#11127
23:33, 23 апр 2024

dominator
https://stackoverflow.com/a/51137756

float linearize_depth(float d,float zNear,float zFar)
{
    return zNear * zFar / (zFar + d * (zNear - zFar));
}

Здесь из значения в буфере глубины получают линейную глубину, тебе же нужно обратное, т.е. найти `d`, для которого `linearize_depth(d, zNear, zFar)` вернёт вычисленную пайплайном линейную глубину.

#11128
5:46, 24 апр 2024

Ктото рано начал изучать сабж

#11129
18:16, 24 апр 2024

Можно ли во время индирект дроу установить для каждой отдельно взятой VkDrawIndirectCommand свою топологию треугольников аля трианг лист, стрип, фан и тд?

Страницы: 1741 742 743 744755 Следующая »
ПрограммированиеФорумГрафика