Я пытаюсь реализовать мягкие тени в моем raytracer. Для этого я планирую снимать несколько теневых лучей от точки пересечения к области источника света. Я стремлюсь использовать свет сферической области — это означает, что мне нужно генерировать случайные точки на сфере для вектора направления моего луча (напомним, что лучи указаны с началом и направлением).
Я искал способы создания равномерного распределения случайных точек на сфере, но они кажутся немного более сложными, чем то, что я ищу. Кто-нибудь знает какие-либо методы для генерации этих точек на сфере? Я полагаю, что мой источник света области сферы будет просто определяться его мировыми координатами XYZ, значением цвета RGB и радиусом r.
На меня ссылался этот код Графика 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);
}
Это хорошо, и я понимаю это, но мой сферический источник света будет находиться в некоторой точке пространства, заданной 3D-координатами X-Y-Z и радиусом. Я понимаю, что формула работает для единичных сфер, но я не уверен, как формула учитывает местоположение сферы.
Спасибо, и я ценю помощь!
Вы, кажется, путаете формулы, которые генерируют направление — то есть точку на сфере — и тот факт, что вы пытаетесь создать направление / к / сфере.
Формула, которую вы дали, выбирает случайный луч равномерно: он находит тройку X, Y, Z на единичной сфере, которую можно рассматривать как направление.
То, чего вы на самом деле пытаетесь достичь, это все же генерировать направление (точку на сфере), но которое благоприятствует определенному направлению, которое указывает на сферу (или ограничено конусом: конус, который вы получаете из центра вашей камеры). и силуэт сферного источника света).
Это можно сделать двумя способами:
В первых случаях формулы приведены в «Глобальном сборнике освещения»:
http://people.cs.kuleuven.be/~philip.dutre/GI/TotalCompendium.pdf
(пункт 38 на странице 21) ..
Во втором случае вы могли бы сделать некоторую выборку отклонения, но я почти уверен, что для этого есть некоторая формула близкой формы.
Наконец, есть последний вариант: вы можете использовать свою формулу, рассматривать результирующую (X, Y, Z) точку в вашей сцене и, таким образом, переводить ее в положение вашей сферы и делать вектор, указывающий с вашей камеры. к этому. Тем не менее, это создаст серьезные проблемы:
Других решений пока нет …