diff --git a/run.bash b/run.bash index 44b833e..7e46723 100755 --- a/run.bash +++ b/run.bash @@ -7,7 +7,7 @@ if [ "$result" -ne "0" ]; then fi source ./config.bash -./build/executable/render.exe $1 +./build/executable/render.exe $1 $2 $3 $4 result=$? if [ "$result" -eq "0" ]; then diff --git a/src/main.cpp b/src/main.cpp index 6c3db96..6ff11d0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,20 +19,37 @@ using namespace std; int main(int argc, char *argv[]){ - if (argc != 2){ - Logger::LogError(format("Usage : {} width", argv[0])); + if (argc != 5){ + Logger::LogError(format("Usage : {} width aa_sample_per_pixel ray_max_depth scene_id", argv[0])); + Logger::LogInfo("Advised values are width=1280 aa_sample_per_pixel=100 ray_max_depth=10 scene_id=5"); return 1; } Logger::LogInfo("Initializing scene"); - + SceneParams scene_params; - scene_params.render_width = atoi(argv[1]); - scene_params.enable_bvh = true; + int aa_sample_per_pixel; + int max_depth; + int scene_id; + + try{ + scene_params.render_width = stoi(argv[1]); + scene_params.enable_bvh = true; + + aa_sample_per_pixel = stoi(argv[2]); + max_depth = stoi(argv[3]); + scene_id = stoi(argv[4]); + } + catch(std::exception const& e) { + Logger::LogFatal("Could not parse command-line arguments"); + Logger::LogFatal(e.what()); + return 1; + } + unique_ptr scene; - switch(5){ + switch(scene_id){ case 1: scene = make_unique(); break; @@ -56,20 +73,22 @@ int main(int argc, char *argv[]){ Logger::LogInfo("Building scene " + string(typeid(*scene.get()).name())); scene->Build(std::move(scene_params)); - Logger::LogInfo("Starting rendering"); - - int sample_per_pixel = 100; - int max_depth = 10; + Logger::LogInfo(format("Starting rendering scene {}", scene_id)); + Logger::LogInfo(format("Using {} samples per pixel, {} max rebounds", aa_sample_per_pixel, max_depth)); + uint32_t out_width = scene->GetCamera()->ImageWidth(); + uint32_t out_height = scene->GetCamera()->ImageHeight(); + Logger::LogInfo(format("Outputing image of size {}x{} pixels", out_width, out_height)); + auto renderer = dynamic_cast(scene->GetRenderer().get()); PathTracingRendererParams params; - params.aa_sample_per_pixel = sample_per_pixel; + params.aa_sample_per_pixel = aa_sample_per_pixel; params.max_depth = max_depth; renderer->SetParams(std::move(params)); + shared_ptr color_buffer = scene->Render(params.aa_sample_per_pixel); PngExporter png_exporter("output/render.png"); - uint32_t out_width = scene->GetCamera()->ImageWidth(); - uint32_t out_height = scene->GetCamera()->ImageHeight(); png_exporter.Export(out_width, out_height, color_buffer); + return 0; } \ No newline at end of file diff --git a/src/scenes/checkered_spheres_scene.cpp b/src/scenes/checkered_spheres_scene.cpp index 8e9c6f9..cb8685c 100644 --- a/src/scenes/checkered_spheres_scene.cpp +++ b/src/scenes/checkered_spheres_scene.cpp @@ -57,6 +57,8 @@ shared_ptr CheckeredSpheresScene::InitObjects() shared_ptr CheckeredSpheresScene::InitRenderer() { PathTracingRendererParams params; + params.aa_sample_per_pixel = 100; + params.max_depth = 10; m_renderer = make_shared(m_camera, m_objets, move(params)); m_renderer->Init(); return m_renderer; diff --git a/src/scenes/cornell_box_scene.cpp b/src/scenes/cornell_box_scene.cpp index 909363d..3b3148d 100644 --- a/src/scenes/cornell_box_scene.cpp +++ b/src/scenes/cornell_box_scene.cpp @@ -67,6 +67,8 @@ shared_ptr CornellBoxScene::InitObjects() shared_ptr CornellBoxScene::InitRenderer() { PathTracingRendererParams params; + params.aa_sample_per_pixel = 100; + params.max_depth = 10; m_renderer = make_shared(m_camera, m_objets, move(params)); m_renderer->Init(); return m_renderer; diff --git a/src/scenes/quads_scene.cpp b/src/scenes/quads_scene.cpp index c28ce56..2b5a0c3 100644 --- a/src/scenes/quads_scene.cpp +++ b/src/scenes/quads_scene.cpp @@ -57,6 +57,8 @@ shared_ptr QuadsScene::InitObjects() shared_ptr QuadsScene::InitRenderer() { PathTracingRendererParams params; + params.aa_sample_per_pixel = 100; + params.max_depth = 10; m_renderer = make_shared(m_camera, m_objets, move(params)); m_renderer->Init(); return m_renderer; diff --git a/src/scenes/solar_system_scene.cpp b/src/scenes/solar_system_scene.cpp index a4d9c44..8053a03 100644 --- a/src/scenes/solar_system_scene.cpp +++ b/src/scenes/solar_system_scene.cpp @@ -74,6 +74,8 @@ shared_ptr SolarSystemScene::InitObjects() shared_ptr SolarSystemScene::InitRenderer() { PathTracingRendererParams params; + params.aa_sample_per_pixel = 100; + params.max_depth = 10; m_renderer = make_shared(m_camera, m_objets, move(params)); m_renderer->Init(); return m_renderer; diff --git a/src/scenes/sparsed_spheres_scene.cpp b/src/scenes/sparsed_spheres_scene.cpp index e18ff18..4814eb2 100644 --- a/src/scenes/sparsed_spheres_scene.cpp +++ b/src/scenes/sparsed_spheres_scene.cpp @@ -104,6 +104,8 @@ shared_ptr SparsedSpheresScene::InitObjects() shared_ptr SparsedSpheresScene::InitRenderer() { PathTracingRendererParams params; + params.aa_sample_per_pixel = 100; + params.max_depth = 10; m_renderer = make_shared(m_camera, m_objets, move(params)); m_renderer->Init(); return m_renderer;