Есть такой алгоритм вычисления Global Illumination: Light Propagation Volumes.
Хочу понять как он работает. Для этого делаю 2д версию алгоритма. Вместо сферических гармоник использую просто массив лучей света во все 360 направлений.
Возможно было бы лучше вместо этого массива лучей использовать список таких объектов: {startAngle, startLight, endAngle, endLight}. По крайней мере растягивать такой световой поток было бы очень просто
Текущий алгоритм
https://bitbucket.org/dddenisss/lp/s...r.cs?at=master
Функция RadiateLight распространяет свет по осевым направлениям. Причем при переносе света в каждое направление, свет разделяется 3 потока света.
Центральный световой поток идет прямо по оси, на соседнюю клетку. А 1й и 3й световой поток идет по диагонали. В общем на картинке все показано.
Но получается что свет идет просто в 8 направлениях и не рассеивается. А вот как его правильно рассеивать я что-то не пойму.
Есть люди понимающие в этом алгоритме?
Репозиторий:
https://bitbucket.org/dddenisss/lp/overview