То, что я пытаюсь сделать, - это улучшение моего реального Ray Tracer для создания распределенного Ray Tracer. Я бродил по интернету, и все, что я мог бы нашел о его реализации было только короткие вещи, как:Основная идея распределенного лучевого трассировщика
-replace один луч с распределением лучей -Shoot несколько лучей, распределенных на интервале -Shoot несколько лучей через каждый пиксель и варьировать каждый луч случайным образом
Мой вопрос: что означает «распределение»? Как я могу изменить распределение лучей, проходящих через пиксель? В моем обычном Ray Tracer я снимаю один луч за пиксель. Для «распределения» лучей я могу понять, что я должен снимать несколько лучей вместо одного. Но в то же время я снимаю луч через свой пиксель с координатами (x, y).
for (int x = 0; x < WINDOW_WIDTH; x++)
{
for (int y = 0; y < WINDOW_HEIGHT; y++)
{
Vec3<float> rayDir = camera->pixelToWorld(x, y) - camera->position;
}
}
Итак, как я могу «варьировать каждый луч случайно»? Благодарю.
То, как я это делал (по общему признанию, давным-давно), состоял в том, чтобы разделить строки выходного pixmap на N примерно равных по размеру разделов и передать каждый подраздел одному из N рендер-работников. Это достаточно хорошо для начала; то когда это работает, проблема в том, что некоторые работники закончат быстрее других; в этом случае рабочий, который закончил, может связаться с работником, который еще не закончил и предлагает ему помочь; затем рабочий работник может передать (половина строк, которые он еще должен закончить), к запрашивающему работнику. Повторяйте до тех пор, пока все строки не будут отображены, а затем повторно соберите изображение. –