- 22, Oct 2024
- #1
Итак, я написал процессор на базе графического процессора следопыт используя совместимость OpenCL-GL. В системе используется подход Mega-Kernel вместо подхода волнового фронта, поскольку я планировал использовать его в качестве образовательного программного обеспечения для других молодых людей, которые хотели погрузиться в трассировку лучей/путей, но не хотели возиться со всем шаблонным кодом (открытие окон, получение контекста opengl и т. д.), аналогично кодированию на шейдерной машине, но с добавленной функцией загрузки моделей, наличием других средств сравнительного анализа и т. д.
По сути, я создаю столько рабочих элементов, сколько пикселей. Затем каждый рабочий элемент пропускает один луч через этот пиксель и вычисляет цвет. В настоящее время на моем GTX 1660 рендеринг около 5-6k треугольников дает только 5-10 кадров в секунду в разрешении 1280x720. Я полагаю, что это довольно медленно, хотя я реализовал BVH на основе SAH и пересечение лучей и треугольников Мёллера-Трамбора. Следовательно, одна большая проблема заключается в том, что, поскольку ядро занимает слишком много времени, загрузка больших моделей приводит к ошибке тайм-аута. Я уже продлил задержку тайм-аута через реестр. Чтобы избежать этого, я также разбил изображение на 4 блока и передал 4 мегаядра для выполнения этой работы. Это сокращает время работы одного ядра, тем не менее проблема все равно остается.
Я заглянул в бумага для рендерера Brigade, который представляет собой трассировщик пути на графическом процессоре в реальном времени, но не смог понять, какой подход они использовали. По тексту речь идет об одном ядре на пиксель,
Алгоритм трассировки пути может быть эффективно реализован, как на
Графический процессор, использующий одно ядро на пиксель. Ядро перебирает
производит выборку пикселя и выводит окончательный цвет. Это ограничивает память доступ к сцене только для чтения и одна запись для финала.