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

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

Страницы: 18 9 10 11 12 13 Следующая »
#165
(Правка: 12:58) 12:56, 15 ноя. 2018

Вот что пока говорят АМД.
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/

#166
17:40, 15 ноя. 2018

ronniko
А что ты так переживаешь за АМД?
Взял бы RTX и радовался бы (может быть)

#167
(Правка: 19:23) 19:19, 15 ноя. 2018

Дорого и еще сыро.
Я тоже планирую года три ждать.
Гнаться не вижу смысла.
Я этим переболел, когда лет 11 назад покупал каждый год новую видеокарту.
И так года 4 подряд.

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

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

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

#168
19:21, 15 ноя. 2018

а у меня вообще 980 и всё летает :)

#169
0:57, 16 ноя. 2018

ronniko
> Но не понравилось что только для Windows 10.
DX12 же

#170
13:36, 7 дек. 2018

Немного дополнений к статье на основе обновленных доков и моих экспериментов.

При созданиеи 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 шейдере делать трассировку уже по структуре кластера.

#171
18:16, 7 дек. 2018

/A\
> При созданиеи acceleration structure (vkCreateAccelerationStructureNV) не нужно
> указывать vertex buffer, index buffer и тд
Но ведь мы все равно указываем там VkGeometryNV, так какая разница? Проще сразу заполнить ей все поля и все.

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

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

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

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

#172
18:35, 7 дек. 2018

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 выделяет память на хранение всех вершин и индексов уже указывает на то, что последующего доступа к буферам не будет.
И билд и трасировка работают параллельно растеризации, вставлять синхронизации на доступ к вершинному буферу было бы странно.

#173
22:18, 7 дек. 2018

/A\
> вставлять синхронизации на доступ к вершинному буферу было бы странно.
Если они все будут read-only, то почему бы и нет?

#174
(Правка: 17:15) 17:04, 8 дек. 2018

https://vulkan.gpuinfo.org/displayreport.php?id=4751#extensions
у 1080 теперь есть рей трейсинг?
я пошел проверять...
upd: у меня не появилось, странно как-то

#175
17:33, 8 дек. 2018

/A\
Судя по всей статистике, это только на arch linux.

#176
17:36, 8 дек. 2018

Dimich
Это вчерашний драйвер под линукс, может и на остальные платформы будут скоро.

#177
18:50, 8 дек. 2018

А как это вообще возможно? Или таки сделали фолбек?

#178
19:23, 8 дек. 2018

0r@ngE
> Или таки сделали фолбек?
Видимо сделали.
Вот только зачем? Если производительности не хватает, то никто и пользоваться не будет.
Лучше бы mesh shader добавили.

#179
23:25, 8 дек. 2018
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 Следующая »
ПрограммированиеФорумГрафика