Вы можете сократить время работы аналогичного алгоритма квадратично (например, пропускать каждые 2 x и y), линейно теряя качество (изображение получает половину диаметра и повторную выборку обратно до того же размера).
Использование растрового изображениядля сохранения яркости и рендеринга на растровом изображении меньшего размера (разделить на коэффициент апроксимации) все ваши точечные линии atc (но также разделить все точки на коэффициент апроксимации), затем используйте размытие по Гауссу и выполните повторную выборку до желаемого размера.Затем извлеките светимость из пикселей.
Я загрузил видео на YouTube, показывающее запуск теста, который я сделал, чтобы попробовать, если это сработало.Кажется, что-то похожее на то, что вам нужно (делая это с «почти в реальном времени» в одном потоке):
Ссылка на видео
Конечно, здесь стены - это линиисо свойствами прозрачности, и свет не рассеивается, как вы ожидаете, но линейно, но «приближение» должно использоваться вашим алгоритмом, или вы можете адаптировать его, если скорость достаточна.И будьте осторожны, код написан очень плохо, потому что я просто экспериментировал.
Здесь яркость нормализована, вы, вероятно, захотите встроить яркость в логарифмическую шкалу в пиксели, чтобы вы могли подогнать больший диапазон, чтобы сохранить исходные значения.
Вы можете использовать его для чего-то: Вот проект:
Ссылка на проект
Если вы оптимизируете и поточите его, вероятно, 100 мсдля изображения 1000x1000 с 100 огнями диаметром 300 и 20 стенами длиной 200 с приближением 5 достижимо.