Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Введение в Vulkan Raytracing (комментарии) (12 стр)

Введение в Vulkan Raytracing (комментарии) (12 стр)

Страницы: 18 9 10 11 12 13 Следующая »
ronnikoПостоялецwww15 ноя. 201812:56#165
Вот что пока говорят АМД.
https://www.igromania.ru/news/78742/AMD_ne_planiruet_dobavlyat_Di… deokarty.html

То есть пока АМД ничего не предпринимают. А выжидают.


PS: Так же стала доступна трасировка в батле новой. Но не понравилось что только для Windows 10.
https://itndaily.ru/2018/11/14/v-battlefield-v-poyavilas-podderzh… i-nvidia-rtx/

Правка: 15 ноя. 2018 12:58

/A\Постоялецwww15 ноя. 201817:40#166
ronniko
А что ты так переживаешь за АМД?
Взял бы RTX и радовался бы (может быть)
ronnikoПостоялецwww15 ноя. 201819:19#167
Дорого и еще сыро.
Я тоже планирую года три ждать.
Гнаться не вижу смысла.
Я этим переболел, когда лет 11 назад покупал каждый год новую видеокарту.
И так года 4 подряд.

Так что опытом научен лучше не спешить.

У меня 2012 года Radeon HD 7950 с турбо режимом, почти как 7970 и 3гига видеопамяти.
И пока устраивает.

Ужас ! Шесть лет прошло ! Время как летит.

Правка: 15 ноя. 2018 19:23

MisanthropeПостоялецwww15 ноя. 201819:21#168
а у меня вообще 980 и всё летает :)
0r@ngEУчастникwww16 ноя. 20180:57#169
ronniko
> Но не понравилось что только для Windows 10.
DX12 же
/A\Постоялецwww7 дек. 201813:36#170
Немного дополнений к статье на основе обновленных доков и моих экспериментов.

При созданиеи acceleration structure (vkCreateAccelerationStructureNV) не нужно указывать vertex buffer, index buffer и тд, нужны только поля vertexCount, vertexFormat, indexCount, indexType - они указывают максимальный размер данных структуры, это нужно для рассчета необходимого размера памяти (вызов vkGetAccelerationStructureMemoryRequirementsNV).

Acceleration structure creation uses the count and type information from the geometries, but does not use the data references in the structures.

Далее при вызове vkCmdBuildAccelerationStructureNV поля vertexCount и indexCount должны быть меньше или равны тем значениям, что были при создании структуры.

dst must have been created with compatible VkAccelerationStructureInfoNV where VkAccelerationStructureInfoNV:::type and VkAccelerationStructureInfoNV::flags are identical, VkAccelerationStructureInfoNV::instanceCount and VkAccelerationStructureInfoNV::geometryCount for dst are greater than or equal to the build size and each geometry in VkAccelerationStructureInfoNV::pGeometries for dst has greater than or equal to the number of vertices, indices, and AABBs.

Также при вызове vkCmdBuildAccelerationStructureNV содержимое буферов копируется в acceleration structure, поэтому и память под все вершины и индексы выделяется в самой структуре + еще какой-то резерв, видимо на BVH и прочее. После вызова vkCmdBuildAccelerationStructureNV содержимое буферов можно перезаписать и это ни на что не повлияет. В доках этой информации я не нашел, но пришел к этому экспериментально-логическим методом.

Частично обновить структуру нельзя, надо ребилдить целиком, что может быть медленно. Рекомендаций по решению этой проблемы я не видел.
Чисто теоретически возможно разбить сцену на кластеры по одной acceleration structure в каждом, представить кластер как процедурную геометрию и в intersection шейдере делать трассировку уже по структуре кластера.

0r@ngEУчастникwww7 дек. 201818:16#171
/A\
> При созданиеи acceleration structure (vkCreateAccelerationStructureNV) не нужно
> указывать vertex buffer, index buffer и тд
Но ведь мы все равно указываем там VkGeometryNV, так какая разница? Проще сразу заполнить ей все поля и все.

> После вызова vkCmdBuildAccelerationStructureNV содержимое буферов можно перезаписать и это ни на что не повлияет.
Вот этот момент меня сильно смущает. Нет гарантий что AS не станет ссылаться на них.  Тем более что в реальной жизни эти буферы шарятся между рейтрейсом и растеризацией.

> Частично обновить структуру нельзя, надо ребилдить целиком, что может быть медленно. Рекомендаций по решению этой проблемы я не видел.
Рекомендации, косвенные, есть - рекомендуется сшивать статику и пихать в как можно меньшее кол-во BLAS, ту динамику что просто меняет трансформацию (едущая тачка) - простой refit (когда мы обновляем только transform в инстансе), он довольно быстрый.  Ну и полная динамика (скин например) - там уже отдельные BLAS, которые ребилдятся в отдельном потоке (+ дабл-буфер).

Те же BF V  делали 2 пинг-понг TLAS и рефитились / ребилдились в фоне.

> Чисто теоретически возможно разбить сцену на кластеры по одной acceleration structure в каждом, представить кластер как процедурную геометрию и в intersection шейдере делать трассировку уже по структуре кластера.
Для этого и есть TLAS, зачем велосипедить и терять перформанс на ровном месте?

/A\Постоялецwww7 дек. 201818:35#172
0r@ngE
> Тем более что в реальной жизни эти буферы шарятся между рейтрейсом и растеризацией.
Ну а вдруг будет чистый рейтрейсинг, зачем тогда ненужные буферы хранить.

> Нет гарантий что AS не станет ссылаться на них.
Я как раз искал ответ на вопрос "что будет, если изменить данные в вершином буфере который используется в AS", потому что барьеров на чтение из буфера для билда AS нету.
Для VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV доступно только VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV и VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV а эти access mask отностятся только к AS.
То, что AS выделяет память на хранение всех вершин и индексов уже указывает на то, что последующего доступа к буферам не будет.
И билд и трасировка работают параллельно растеризации, вставлять синхронизации на доступ к вершинному буферу было бы странно.

0r@ngEУчастникwww7 дек. 201822:18#173
/A\
> вставлять синхронизации на доступ к вершинному буферу было бы странно.
Если они все будут read-only, то почему бы и нет?
/A\Постоялецwww8 дек. 201817:04#174
https://vulkan.gpuinfo.org/displayreport.php?id=4751#extensions
у 1080 теперь есть рей трейсинг?
я пошел проверять...
upd: у меня не появилось, странно как-то

Правка: 8 дек. 2018 17:15

DimichПостоялецwww8 дек. 201817:33#175
/A\
Судя по всей статистике, это только на arch linux.
/A\Постоялецwww8 дек. 201817:36#176
Dimich
Это вчерашний драйвер под линукс, может и на остальные платформы будут скоро.
0r@ngEУчастникwww8 дек. 201818:50#177
А как это вообще возможно? Или таки сделали фолбек?
/A\Постоялецwww8 дек. 201819:23#178
0r@ngE
> Или таки сделали фолбек?
Видимо сделали.
Вот только зачем? Если производительности не хватает, то никто и пользоваться не будет.
Лучше бы mesh shader добавили.
/A\Постоялецwww8 дек. 201823:25#179
The complete rule to compute a miss shader binding table record address is:
missProgramShaderBindingTableBaseIndex × missShaderBindingStride + sbtRecordOffset

в спеках похоже ошибка, для miss шейдера берется не sbtRecordOffset, а missIndex
Страницы: 18 9 10 11 12 13 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр