Мягкие тени: сферический источник света

Я пытаюсь реализовать мягкие тени в моем raytracer. Для этого я планирую снимать несколько теневых лучей от точки пересечения к области источника света. Я стремлюсь использовать свет сферической области — это означает, что мне нужно генерировать случайные точки на сфере для вектора направления моего луча (напомним, что лучи указаны с началом и направлением).

Я искал способы создания равномерного распределения случайных точек на сфере, но они кажутся немного более сложными, чем то, что я ищу. Кто-нибудь знает какие-либо методы для генерации этих точек на сфере? Я полагаю, что мой источник света области сферы будет просто определяться его мировыми координатами XYZ, значением цвета RGB и радиусом r.

Спасибо, и я ценю помощь!

4

Решение

Графика Gems III, страница 126:

void random_unit_vector(double v[3]) {
double theta = random_double(2.0 * PI);
double x = random_double(2.0) - 1.0;
double s = sqrt(1.0 - x * x);
v[0] = x;
v[1] = s * cos(theta);
v[2] = s * sin(theta);
}

(Это второй из четырех методов, приведенных в MathWorld Выбор сферы статья.)

ETA: если сфера радиуса р сосредоточено в О, а также U случайный единичный вектор, то случайная точка на поверхности сферы определяется как О + р U.

5

Другие решения

Много хороших формул для случайных распределений можно найти в Глобальный сборник освещения. Часть 4.B. имеет формулы для генерации точек на (полу) сфере. Это отличный справочник для выборки, интеграции и т. Д.

0

По вопросам рекламы [email protected]