Я пытаюсь реализовать различные типы источников света в моем трассировщике лучей, кодированном в C. Я успешно реализовал точечные, точечные, направленные и прямоугольные области источники света.
Для прямоугольная область света Я определяю два вектора (U и V) в пространстве и использую их для перемещения в виртуальный прямоугольник (с разделителями), который они образуют. В зависимости от интенсивности света я беру несколько образцов в прямоугольнике, затем вычисляю количество света, достигающего точки, как если бы каждый образец был одним точечным источником света.
С помощью прямоугольников очень легко найти положение различных образцов, но все становится сложнее, когда я пытаюсь сделать то же самое с подсветкой диска . Я нашел немного документации об этом, и большинство из них уже используют готовые функции для этого. Единственная интересная вещь, которую я нашел, - это документ (https://graphics.pixar.com/library/DiskLightSampling/paper.pdf), но я не могу его использовать.
Не могли бы вы помочь мне достичь аналогичного результата (на следующем рисунке) с векторомоперации (например, наличие происхождения, ориентации, радиуса диска и количества образцов)
Любой совет или документация по этому вопросу мне очень помог бы.