Я пишу трассором пути Монте-Карло (MCPT). Я считаю, что есть проблема, касающаяся яркости отображаемых изображений. Внизу вы найдете несколько изображений, демонстрирующих то, о чем я говорю. Обратите внимание на разницу в цветах на первых двух изображениях ниже. Там нет прямого освещения. Единственный источник света - это «фоновый» свет в соответствии с функцией среды (...) . Это функционирует, что и из книги Ширли. Таким образом, я могу только думать о том, что две вещи являются проблемой: (1) способ, которым я накапливаю пропускную способность и/или цвет в функции Traceray (...) , и или (2) как я сохраняю изображение. Сохранение изображения такое же, как в книге, поэтому моя гипотеза заключается в том, что моя функция Traceray (...) проблематична. Мой код часами пытаюсь понять, где я ошибаюсь; Однако, насколько я знаю, все выглядит нормально. Я не понимаю, почему это происходит, и ищу советы о том, как отладить это. br /> функция литья Ray < /strong> < /p>
Я пишу трассором пути Монте-Карло (MCPT). Я считаю, что есть проблема, касающаяся яркости отображаемых изображений. Внизу вы найдете несколько изображений, демонстрирующих то, о чем я говорю. Обратите внимание на разницу в цветах на первых двух изображениях ниже. Там нет прямого освещения. Единственный источник света - это «фоновый» свет в соответствии с функцией среды (...) . Это функционирует, что и из книги Ширли. Таким образом, я могу только думать о том, что две вещи являются проблемой: (1) способ, которым я накапливаю пропускную способность и/или цвет в функции Traceray (...) , и или (2) как я сохраняю изображение. Сохранение изображения такое же, как в книге, поэтому моя гипотеза заключается в том, что моя функция Traceray (...) проблематична. Мой код часами пытаюсь понять, где я ошибаюсь; Однако, насколько я знаю, все выглядит нормально. Я не понимаю, почему это происходит, и ищу советы о том, как отладить это. br /> [b] функция литья Ray < /strong> < /p> [code]void Render(const Camera& camera, std::vector& color_buffer) { constexpr float fSAMPLES_PER_PIXEL = static_cast(SAMPLES_PER_PIXEL);
#pragma omp parallel for for (uint32_t y = 0; y < IMG_HEIGHT; y++) { for (uint32_t x = 0; x < IMG_WIDTH; x++) { glm::vec3 color{0.0f};
for (uint32_t i = 0; i < SAMPLES_PER_PIXEL; i++) { // TODO: Perform better AA Ray ray = camera.RayThrough(x + Util::RandomFloat() - 0.5f, y + Util::RandomFloat() - 0.5f); color += TraceRay(ray); }
// throughput has decreased so much => not much point in continuing if (throughput.x < Util::EPSILON && throughput.y < Util::EPSILON && throughput.z < Util::EPSILON) break;
return glm::normalize(tangent * local.x + bitangent * local.y + normal * local.z); } [/code] [b] Сохранение изображения. [/b] процесс такой же, как в книге Ширли. переопределить ">uint32_t Save(std::vector& color_buffer) { std::cout