From 64519cc4282fb49bdce6aeab3f1ee46f66c47ce3 Mon Sep 17 00:00:00 2001 From: Karsten Jeschkies Date: Tue, 1 Mar 2016 23:53:33 +0100 Subject: [PATCH 1/4] Support 0 or 1 light. This enables us to run the furnace test without any lights. --- Makefile | 3 ++- lib/types.h | 5 ++++ main.cpp | 51 +++++++++++++++++++++----------------- pathtracer.cpp | 47 ++++++++++++++++++----------------- raytracer.cpp | 16 ++++++------ scenes/furnace_test.blend | Bin 0 -> 485216 bytes test_assimp.cpp | 8 +++--- tests/test_config.cpp | 41 ++++++++++++++++++++++++++++++ tests/test_lambertian.cpp | 2 +- trace.h | 44 ++++++++++++++++++++++++-------- 10 files changed, 147 insertions(+), 70 deletions(-) create mode 100644 scenes/furnace_test.blend create mode 100644 tests/test_config.cpp diff --git a/Makefile b/Makefile index 77c4d61..e0647b6 100644 --- a/Makefile +++ b/Makefile @@ -57,7 +57,8 @@ TESTS = \ test_intersection \ test_lambertian \ test_types \ - test_sampling + test_sampling \ + test_config test-all: genfiles/stress_test_kdtree test $< diff --git a/lib/types.h b/lib/types.h index 7c7973d..fb94c06 100644 --- a/lib/types.h +++ b/lib/types.h @@ -21,6 +21,11 @@ float fmax(float x, float y, float z); struct Box { Vec min, max; }; Box operator+(const Box& a, const Box& b); +// Light Source +struct Light { + Vec position; + Color color; +}; // Ray with precomputed inverse direction struct Ray : public aiRay { diff --git a/main.cpp b/main.cpp index 6eb6f1e..b547a75 100644 --- a/main.cpp +++ b/main.cpp @@ -89,14 +89,13 @@ int main(int argc, char const *argv[]) std::map args = docopt::docopt(USAGE, {argv + 1, argv + argc}, true, "raytracer 0.2"); - Configuration conf; - conf.max_depth = args["--max-depth"].asLong(); - conf.shadow_intensity = std::stof(args["--shadow"].asString()); - conf.num_pixel_samples = args["--pixel-samples"].asLong(); - conf.num_monte_carlo_samples = args["--monte-carlo-samples"].asLong(); - conf.num_threads = args["--threads"].asLong(); - conf.parse_bg_color(args["--background"].asString()); - conf.check(); + Configuration conf { args["--max-depth"].asLong() + , std::stof(args["--shadow"].asString()) + , args["--pixel-samples"].asLong() + , args["--monte-carlo-samples"].asLong() + , args["--threads"].asLong() + , args["--background"].asString() + }; // import scene Assimp::Importer importer; @@ -127,18 +126,25 @@ int main(int argc, char const *argv[]) const Camera cam(camNode->mTransformation, sceneCam); // setup light - assert(scene->mNumLights == 1); // we can deal only with a single light - auto& light = *scene->mLights[0]; - - auto* lightNode = scene->mRootNode->FindNode(light.mName); - assert(lightNode != nullptr); - const auto& LT = lightNode->mTransformation; - auto light_pos = LT * aiVector3D(); - auto light_color = aiColor4D{ - light.mColorDiffuse.r, - light.mColorDiffuse.g, - light.mColorDiffuse.b, - 1}; + // we can deal only with one single or no light at all + assert(scene->mNumLights == 0 || scene->mNumLights == 1); + std::vector lights; + if(scene->mNumLights == 1) { + auto& rawLight = *scene->mLights[0]; + + auto* lightNode = scene->mRootNode->FindNode(rawLight.mName); + assert(lightNode != nullptr); + const auto& LT = lightNode->mTransformation; + lights.push_back( + { LT * aiVector3D() + , aiColor4D + { rawLight.mColorDiffuse.r + , rawLight.mColorDiffuse.g + , rawLight.mColorDiffuse.b + , 1 + } + }); + } // load triangles from the scene into a kd-tree auto triangles = triangles_from_scene(scene); @@ -168,8 +174,7 @@ int main(int argc, char const *argv[]) for (int y = 0; y < height; ++y) { tasks.emplace_back(pool.enqueue([ - &image, &cam, &tree, &light_pos, &light_color, - width, height, y, &conf]() + &image, &cam, &tree, &lights, width, height, y, &conf]() { float dx, dy; xorshift64star gen(42); @@ -184,7 +189,7 @@ int main(int argc, char const *argv[]) Stats::instance().num_prim_rays += 1; image(x, y) += trace(cam.mPosition, cam_dir, tree, - light_pos, light_color, 0, conf); + lights, 0, conf); } image(x, y) /= static_cast(conf.num_pixel_samples); diff --git a/pathtracer.cpp b/pathtracer.cpp index 568558c..22f6962 100644 --- a/pathtracer.cpp +++ b/pathtracer.cpp @@ -4,12 +4,9 @@ #include "lib/stats.h" #include "lib/output.h" -// Color trace(const Vec& origin, const Vec& dir, -// const Tree& triangles, const Vec& light_pos, -// const Color& light_color, int depth, const Configuration& conf) Color trace(const Vec& origin, const Vec& dir, - const Tree& triangles, const Vec& light_pos, - const Color& light_color, int depth, const Configuration& conf) + const Tree& triangles, const std::vector& lights, + int depth, const Configuration& conf) { if (depth > conf.max_depth) { return {}; @@ -25,15 +22,7 @@ Color trace(const Vec& origin, const Vec& dir, return conf.bg_color; } - // - // Direct lightning - // - - Color direct_lightning; - - // light direction auto p = origin + dist_to_triangle * dir; - auto light_dir = (light_pos - p).Normalize(); // interpolate normal const auto& triangle = *triangle_pt; @@ -41,16 +30,28 @@ Color trace(const Vec& origin, const Vec& dir, auto p2 = p + normal * 0.0001f; - light_dir = (light_pos - p2).Normalize(); - float dist_to_light = (light_pos - p2).Length(); - float dist_to_next_triangle; - auto has_shadow = triangles.intersect( - aiRay(p2, light_dir), dist_to_next_triangle, s, t); + // + // Direct lightning + // - // Do we get direct light? - if (!has_shadow || dist_to_next_triangle > dist_to_light) { - // lambertian - direct_lightning = std::max(0.f, light_dir * normal) * light_color; + Color direct_lightning; + + for (auto& light : lights) { + // light direction + auto light_dir = (light.position - p).Normalize(); + + + light_dir = (light.position - p2).Normalize(); + float dist_to_light = (light.position - p2).Length(); + float dist_to_next_triangle; + auto has_shadow = triangles.intersect( + aiRay(p2, light_dir), dist_to_next_triangle, s, t); + + // Do we get direct light? + if (!has_shadow || dist_to_next_triangle > dist_to_light) { + // lambertian + direct_lightning = std::max(0.f, light_dir * normal) * light.color; + } } // @@ -71,7 +72,7 @@ Color trace(const Vec& origin, const Vec& dir, auto cos_theta = dir_theta.second; const auto indirect_light = trace( - p2, dir, triangles, light_pos, light_color, depth + 1, conf); + p2, dir, triangles, lights, depth + 1, conf); // lambertian indirect_lightning += cos_theta * indirect_light; diff --git a/raytracer.cpp b/raytracer.cpp index d197901..4d62a47 100644 --- a/raytracer.cpp +++ b/raytracer.cpp @@ -3,8 +3,8 @@ #include "lib/stats.h" Color trace(const Vec& origin, const Vec& dir, - const Tree& triangles_tree, const Vec& light_pos, - const Color& light_color, int depth, const Configuration& conf) + const Tree& triangles_tree, const std::vector& lights, + int depth, const Configuration& conf) { Stats::instance().num_rays += 1; @@ -12,6 +12,8 @@ Color trace(const Vec& origin, const Vec& dir, return {}; } + auto& light = lights.front(); + // intersection float dist_to_triangle, s, t; auto triangle_pt = triangles_tree.intersect( @@ -22,7 +24,7 @@ Color trace(const Vec& origin, const Vec& dir, // light direction auto p = origin + dist_to_triangle * dir; - auto light_dir = (light_pos - p).Normalize(); + auto light_dir = (light.position - p).Normalize(); // interpolate normal const auto& triangle = *triangle_pt; @@ -30,7 +32,7 @@ Color trace(const Vec& origin, const Vec& dir, // direct light auto direct_lightning = 0.9f * lambertian( - light_dir, normal, triangle.diffuse, light_color); + light_dir, normal, triangle.diffuse, light.color); // move slightly in direction of normal auto p2 = p + normal * 0.0001f; @@ -40,14 +42,14 @@ Color trace(const Vec& origin, const Vec& dir, auto reflected_ray_dir = dir - 2.f * (normal * dir) * normal; auto reflected_color = triangle.diffuse * 0.1f * trace( p2, reflected_ray_dir, - triangles_tree, light_pos, light_color, depth + 1, conf); + triangles_tree, lights, depth + 1, conf); auto result = direct_lightning + reflected_color; // shadow float dist_to_next_triangle; - light_dir = (light_pos - p2).Normalize(); - float dist_to_light = (light_pos - p2).Length(); + light_dir = (light.position - p2).Normalize(); + float dist_to_light = (light.position - p2).Length(); auto has_shadow = triangles_tree.intersect( aiRay(p2, light_dir), dist_to_next_triangle, s, t); diff --git a/scenes/furnace_test.blend b/scenes/furnace_test.blend new file mode 100644 index 0000000000000000000000000000000000000000..17d52a32df120835c2784f61e80ae14387bee1c8 GIT binary patch literal 485216 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, color); - std::cout << color << std::endl; + std::cout << "Diffuse " << color << std::endl; material->Get(AI_MATKEY_COLOR_AMBIENT, color); - std::cout << color << std::endl; + std::cout << "Ambient " << color << std::endl; material->Get(AI_MATKEY_COLOR_SPECULAR, color); - std::cout << color << std::endl; + std::cout << "Specular " << color << std::endl; material->Get(AI_MATKEY_COLOR_EMISSIVE, color); - std::cout << color << std::endl; + std::cout << "Emissive " << color << std::endl; material->Get(AI_MATKEY_COLOR_TRANSPARENT, color); std::cout << color << std::endl; material->Get(AI_MATKEY_COLOR_REFLECTIVE, color); diff --git a/tests/test_config.cpp b/tests/test_config.cpp new file mode 100644 index 0000000..908b34a --- /dev/null +++ b/tests/test_config.cpp @@ -0,0 +1,41 @@ +#include +#include "../trace.h" + +SCENARIO("Create config from options", "[config]") { + + GIVEN("A a max depth") { + long max_depth = 2; + + GIVEN("A shadow intensity") { + float shadow_intensity = 1.0f; + + GIVEN("A number of pixel samples") { + long num_pixel_samples = 128; + + GIVEN("A number of monte carlo samples") { + long num_monte_carlo_samples = 2; + + GIVEN("A number of threads") { + long num_threads = 4; + + GIVEN("A a background color") { + std::string bg_color = "0 0.3 1.0"; + + WHEN("the configuration is created") { + Configuration config { max_depth + , shadow_intensity + , num_pixel_samples + , num_monte_carlo_samples + , num_threads + , bg_color + }; + + THEN("the configuration holds all variables") { + REQUIRE(config.max_depth == 2); + REQUIRE(config.shadow_intensity - 1.0f < 0.00001f); + REQUIRE(config.num_pixel_samples == 128); + REQUIRE(config.num_monte_carlo_samples == 2); + REQUIRE(config.num_threads == 4); + REQUIRE(config.bg_color == Color(0.0f, 0.3f, 1.0f, 1.0f)); + }}}}}}}} +} diff --git a/tests/test_lambertian.cpp b/tests/test_lambertian.cpp index 32e0a97..afa3657 100644 --- a/tests/test_lambertian.cpp +++ b/tests/test_lambertian.cpp @@ -1,4 +1,4 @@ -#include "catch.hpp" +#include #include "../lib/lambertian.h" #include diff --git a/trace.h b/trace.h index 48fdee2..771baf1 100644 --- a/trace.h +++ b/trace.h @@ -7,17 +7,28 @@ using Tree = KDTree<10>; -struct Configuration { - int max_depth; - float shadow_intensity; - int num_pixel_samples; - int num_monte_carlo_samples; - int num_threads; - Color bg_color; +class Configuration { + +public: - void parse_bg_color(const std::string& str) { + Configuration( + long max_depth, + float shadow_intensity, + long num_pixel_samples, + long num_monte_carlo_samples, + long num_threads, + const std::string& bg_color_str): + max_depth(max_depth), + shadow_intensity(shadow_intensity), + num_pixel_samples(num_pixel_samples), + num_monte_carlo_samples(num_monte_carlo_samples), + num_threads(num_threads) + { + check(); + + // Parse background color. std::vector result; - std::stringstream ss(str); + std::stringstream ss(bg_color_str); std::string item; while (std::getline(ss, item, ' ')) { result.push_back(std::stof(item)); @@ -32,6 +43,8 @@ struct Configuration { } } +private: + void check() { assert(0 < max_depth); assert(0 <= shadow_intensity && shadow_intensity <= 1); @@ -39,9 +52,18 @@ struct Configuration { assert(0 <= num_monte_carlo_samples); assert(1 <= num_threads); } + +public: + + int max_depth; + float shadow_intensity; + int num_pixel_samples; + int num_monte_carlo_samples; + int num_threads; + Color bg_color; }; Color trace(const Vec& origin, const Vec& dir, - const Tree& triangles_tree, const Vec& light_pos, - const Color& light_color, int depth, const Configuration& conf); + const Tree& triangles_tree, const std::vector& lights, + int depth, const Configuration& conf); From 5c83549753843fb3d2ccae292207123f6bc08767 Mon Sep 17 00:00:00 2001 From: Karsten Jeschkies Date: Wed, 2 Mar 2016 00:16:58 +0100 Subject: [PATCH 2/4] Make gamma correction an option. --- main.cpp | 13 ++++++++----- pathtracer.cpp | 1 - scenes/furnace_test.blend | Bin 485216 -> 485216 bytes tests/test_config.cpp | 9 +++++++-- trace.h | 7 +++++-- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/main.cpp b/main.cpp index b547a75..0b1e4b1 100644 --- a/main.cpp +++ b/main.cpp @@ -81,6 +81,7 @@ R"(Usage: raytracer [options] -m --monte-carlo-samples= Monto Carlo samples per ray [default: 8]. Used only in pathtracer. -t --threads= Number of threads [default: 1]. + --no-gamma-correction Disables gamma correction. )"; int main(int argc, char const *argv[]) @@ -95,6 +96,7 @@ int main(int argc, char const *argv[]) , args["--monte-carlo-samples"].asLong() , args["--threads"].asLong() , args["--background"].asString() + , args["--no-gamma-correction"].asBool() }; // import scene @@ -168,8 +170,7 @@ int main(int argc, char const *argv[]) // TODO: Use conf. constexpr float inv_gamma = 1.f/2.2f; - // TODO: Use conf. - ThreadPool pool(4); + ThreadPool pool(conf.num_threads); std::vector> tasks; for (int y = 0; y < height; ++y) { @@ -195,9 +196,11 @@ int main(int argc, char const *argv[]) static_cast(conf.num_pixel_samples); // gamma correction - image(x, y).r = powf(image(x, y).r, inv_gamma); - image(x, y).g = powf(image(x, y).g, inv_gamma); - image(x, y).b = powf(image(x, y).b, inv_gamma); + if (conf.gamma_correction_enabled) { + image(x, y).r = powf(image(x, y).r, inv_gamma); + image(x, y).g = powf(image(x, y).g, inv_gamma); + image(x, y).b = powf(image(x, y).b, inv_gamma); + } } })); } diff --git a/pathtracer.cpp b/pathtracer.cpp index 22f6962..b28368c 100644 --- a/pathtracer.cpp +++ b/pathtracer.cpp @@ -40,7 +40,6 @@ Color trace(const Vec& origin, const Vec& dir, // light direction auto light_dir = (light.position - p).Normalize(); - light_dir = (light.position - p2).Normalize(); float dist_to_light = (light.position - p2).Length(); float dist_to_next_triangle; diff --git a/scenes/furnace_test.blend b/scenes/furnace_test.blend index 17d52a32df120835c2784f61e80ae14387bee1c8..c9d3fdd65e94c11e5021d440888e772b6e15b0bb 100644 GIT binary patch delta 958 zcmYjQZAep57(VCRJ9oETMA}j#HL)KGS-8Zxq_ou*sRfgS2Ku89BL4*aTx57b&_O?< zMV$48i_A0yEVZU^xxlQlcwKy3=rDm&N%?IQsjtWVi`Y@x-@;h=p1%E)A$U z`C>=MBulhUu%qvD;pnDGhsH6Ni zWX);K(6&Y??#rDcNh>fI4F4jD_JLK4lC`|T!sVougl+?c z1Syg^edY(U9Dni7$=(Tvrb0~(87C=oRZvNl_EB?xG=+ z3`_0xnm*I8J`vcH5wdL`6zI!0AYm7W{dN7YP;Af>D@;Hrb4!L?Kpo{KirDN5R3?#` zeqRM9AT_=f;U>5R!l->flWKuI$Hn+1?wpya(OD040HXR}6t#EM>6g9m0uno3 z?w+aE=vgltuqoO=ey~oLd~h5{gGl8n^G_X{m+dsg5AfDQy|E`RNx-}}e z>hyYxt)%$Dm`;Rc}isyJnjWfOUKJf|1ia_RPfs1&|&`eLa;a!s@w!nvC3&gSp zk4X`8*ZW-Wn`|4xi*eSjue3deTnVf`dZ?$)Yl$>Up8A19R_A!f zdaY!fvQ}Qfiu0 Date: Wed, 2 Mar 2016 22:24:09 +0100 Subject: [PATCH 3/4] Render furnance test. --- scenes/furnace_test.blend | Bin 485216 -> 441368 bytes scenes/furnace_test.png | Bin 0 -> 21208 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 scenes/furnace_test.png diff --git a/scenes/furnace_test.blend b/scenes/furnace_test.blend index c9d3fdd65e94c11e5021d440888e772b6e15b0bb..629b1bbe3a888d5d2b5d004e5b35fc6854562a1a 100644 GIT binary patch delta 47056 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 eFf--G4SDm*z&;5;drO9&u delta 84526 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 Date: Thu, 3 Mar 2016 21:30:04 +0100 Subject: [PATCH 4/4] Configure inverse gamma. --- main.cpp | 28 ++++++++++++++-------------- tests/test_config.cpp | 6 +++++- trace.h | 3 +++ 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/main.cpp b/main.cpp index 0b1e4b1..2e0be8a 100644 --- a/main.cpp +++ b/main.cpp @@ -81,6 +81,8 @@ R"(Usage: raytracer [options] -m --monte-carlo-samples= Monto Carlo samples per ray [default: 8]. Used only in pathtracer. -t --threads= Number of threads [default: 1]. + --inverse-gamma= Inverse of gamma for gamma correction + [default: 0.454545]. --no-gamma-correction Disables gamma correction. )"; @@ -90,14 +92,15 @@ int main(int argc, char const *argv[]) std::map args = docopt::docopt(USAGE, {argv + 1, argv + argc}, true, "raytracer 0.2"); - Configuration conf { args["--max-depth"].asLong() - , std::stof(args["--shadow"].asString()) - , args["--pixel-samples"].asLong() - , args["--monte-carlo-samples"].asLong() - , args["--threads"].asLong() - , args["--background"].asString() - , args["--no-gamma-correction"].asBool() - }; + const Configuration conf { args["--max-depth"].asLong() + , std::stof(args["--shadow"].asString()) + , args["--pixel-samples"].asLong() + , args["--monte-carlo-samples"].asLong() + , args["--threads"].asLong() + , args["--background"].asString() + , std::stof(args["--inverse-gamma"].asString()) + , args["--no-gamma-correction"].asBool() + }; // import scene Assimp::Importer importer; @@ -167,9 +170,6 @@ int main(int argc, char const *argv[]) std::cerr << "Rendering "; - // TODO: Use conf. - constexpr float inv_gamma = 1.f/2.2f; - ThreadPool pool(conf.num_threads); std::vector> tasks; @@ -197,9 +197,9 @@ int main(int argc, char const *argv[]) // gamma correction if (conf.gamma_correction_enabled) { - image(x, y).r = powf(image(x, y).r, inv_gamma); - image(x, y).g = powf(image(x, y).g, inv_gamma); - image(x, y).b = powf(image(x, y).b, inv_gamma); + image(x, y).r = powf(image(x, y).r, conf.inverse_gamma); + image(x, y).g = powf(image(x, y).g, conf.inverse_gamma); + image(x, y).b = powf(image(x, y).b, conf.inverse_gamma); } } })); diff --git a/tests/test_config.cpp b/tests/test_config.cpp index a3710a4..af593c6 100644 --- a/tests/test_config.cpp +++ b/tests/test_config.cpp @@ -21,6 +21,9 @@ SCENARIO("Create config from options", "[config]") { GIVEN("A background color") { std::string bg_color = "0 0.3 1.0"; + GIVEN("An inverse of gamma") { + float inv_gamma = 1.f/2.2f; + GIVEN("A gamma correction flag") { bool no_gamma = false; @@ -31,6 +34,7 @@ SCENARIO("Create config from options", "[config]") { , num_monte_carlo_samples , num_threads , bg_color + , inv_gamma , no_gamma }; @@ -42,5 +46,5 @@ SCENARIO("Create config from options", "[config]") { REQUIRE(config.num_threads == 4); REQUIRE(config.gamma_correction_enabled == true); REQUIRE(config.bg_color == Color(0.0f, 0.3f, 1.0f, 1.0f)); - }}}}}}}}} + }}}}}}}}}} } diff --git a/trace.h b/trace.h index f9b62b1..b8c8aed 100644 --- a/trace.h +++ b/trace.h @@ -18,12 +18,14 @@ class Configuration { long num_monte_carlo_samples, long num_threads, const std::string& bg_color_str, + float inverse_gamma, const bool no_gamma_correction): max_depth(max_depth), shadow_intensity(shadow_intensity), num_pixel_samples(num_pixel_samples), num_monte_carlo_samples(num_monte_carlo_samples), num_threads(num_threads), + inverse_gamma(inverse_gamma), gamma_correction_enabled(!no_gamma_correction) { check(); @@ -62,6 +64,7 @@ class Configuration { int num_pixel_samples; int num_monte_carlo_samples; int num_threads; + float inverse_gamma; bool gamma_correction_enabled; Color bg_color; };