From 8d50bcd22bf02ba4a503e70a8833ec4d5a7eab0c Mon Sep 17 00:00:00 2001 From: Tim Biedert Date: Mon, 15 Apr 2019 17:22:08 +0200 Subject: [PATCH] Tiling/stitching fix + test for ray tracing --- .../RayTracing/RTWrapper/VisRTX/Camera.h | 3 + .../RayTracing/RTWrapper/VisRTX/Renderer.h | 2 + .../RayTracing/Testing/Cxx/CMakeLists.txt | 2 + .../Testing/Cxx/TestOSPRayTiling.cxx | 139 ++++++++++++++++++ .../TestCategoricalMaterialsOptiX.png.sha512 | 2 +- .../TestCategoricalMultiBlockOptiX.png.sha512 | 2 +- .../Baseline/TestOSPRayLightsOptiX.png.sha512 | 2 +- .../TestOSPRayScalarBarOptiX.png.sha512 | 2 +- .../Data/Baseline/TestOSPRayTiling.png.sha512 | 1 + .../Baseline/TestOSPRayTilingOptiX.png.sha512 | 1 + .../TestPathTracerBackgroundOptiX.png.sha512 | 2 +- .../TestPathTracerMaterialsOptiX.png.sha512 | 2 +- .../RayTracing/vtkOSPRayMaterialHelpers.h | 1 + 13 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 Rendering/RayTracing/Testing/Cxx/TestOSPRayTiling.cxx create mode 100644 Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 create mode 100644 Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTilingOptiX.png.sha512 diff --git a/Rendering/RayTracing/RTWrapper/VisRTX/Camera.h b/Rendering/RayTracing/RTWrapper/VisRTX/Camera.h index b72c25168edc..52bfaff10631 100644 --- a/Rendering/RayTracing/RTWrapper/VisRTX/Camera.h +++ b/Rendering/RayTracing/RTWrapper/VisRTX/Camera.h @@ -44,6 +44,9 @@ namespace RTW if (this->Get3f({ "up" }, &up)) this->camera->SetUp(up); + VisRTX::Vec2f imageBegin, imageEnd; + if (this->Get2f({ "imageStart" }, &imageBegin) && this->Get2f({ "imageEnd" }, &imageEnd)) + this->camera->SetImageRegion(imageBegin, imageEnd); if (this->camera->GetType() == VisRTX::CameraType::PERSPECTIVE) { diff --git a/Rendering/RayTracing/RTWrapper/VisRTX/Renderer.h b/Rendering/RayTracing/RTWrapper/VisRTX/Renderer.h index fc4a9d1e8944..aa65ed2f8742 100644 --- a/Rendering/RayTracing/RTWrapper/VisRTX/Renderer.h +++ b/Rendering/RayTracing/RTWrapper/VisRTX/Renderer.h @@ -21,6 +21,8 @@ namespace RTW { VisRTX::Context* rtx = VisRTX_GetContext(); this->renderer = rtx->CreateRenderer(); + + this->renderer->SetToneMapping(false); } ~Renderer() diff --git a/Rendering/RayTracing/Testing/Cxx/CMakeLists.txt b/Rendering/RayTracing/Testing/Cxx/CMakeLists.txt index 6af43ba1b056..3962faabb924 100644 --- a/Rendering/RayTracing/Testing/Cxx/CMakeLists.txt +++ b/Rendering/RayTracing/Testing/Cxx/CMakeLists.txt @@ -48,6 +48,7 @@ if (VTK_ENABLE_OSPRAY) TestPathTracerShadows.cxx # Miscellaneous tests TestOSPRayCache.cxx + TestOSPRayTiling.cxx ) endif() @@ -79,6 +80,7 @@ if (VTK_ENABLE_VISRTX) TestPathTracerMaterials TestPathTracerShadows TestOSPRayCache + TestOSPRayTiling ) set(testname_suffix "OptiX") diff --git a/Rendering/RayTracing/Testing/Cxx/TestOSPRayTiling.cxx b/Rendering/RayTracing/Testing/Cxx/TestOSPRayTiling.cxx new file mode 100644 index 000000000000..e5acad838370 --- /dev/null +++ b/Rendering/RayTracing/Testing/Cxx/TestOSPRayTiling.cxx @@ -0,0 +1,139 @@ +/*========================================================================= + + Program: Visualization Toolkit + Module: TestOSPRayRenderMesh.cxx + + Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ +// This test verifies that we can render at resolutions larger than the window +// by rendering and stitching multiple tiles. + +#include "vtkTestUtilities.h" + +#include "vtkActor.h" +#include "vtkCamera.h" +#include "vtkImageActor.h" +#include "vtkImageData.h" +#include "vtkImageMapper3D.h" +#include "vtkJPEGReader.h" +#include "vtkLight.h" +#include "vtkOpenGLRenderer.h" +#include "vtkOSPRayPass.h" +#include "vtkOSPRayRendererNode.h" +#include "vtkPolyDataMapper.h" +#include "vtkPolyDataNormals.h" +#include "vtkPNGWriter.h" +#include "vtkPLYReader.h" +#include "vtkProperty.h" +#include "vtkRenderer.h" +#include "vtkRenderWindow.h" +#include "vtkRenderWindowInteractor.h" +#include "vtkSmartPointer.h" +#include "vtkTexture.h" +#include "vtkWindowToImageFilter.h" + +#include "vtkOSPRayTestInteractor.h" + +int TestOSPRayTiling(int argc, char* argv[]) +{ + vtkSmartPointer iren = vtkSmartPointer::New(); + vtkSmartPointer renWin = vtkSmartPointer::New(); + iren->SetRenderWindow(renWin); + vtkSmartPointer renderer = vtkSmartPointer::New(); + renWin->AddRenderer(renderer); + vtkOSPRayRendererNode::SetSamplesPerPixel(16, renderer); + + vtkSmartPointer l = vtkSmartPointer::New(); + l->SetLightTypeToHeadlight(); + l->SetIntensity(0.1); + renderer->AddLight(l); + + //todo: as soon as we get materials, make the bunny reflective + //to really show off + const char* fileName = + vtkTestUtilities::ExpandDataFileName(argc, argv, "Data/bunny.ply"); + vtkSmartPointer polysource = vtkSmartPointer::New(); + polysource->SetFileName(fileName); + + vtkSmartPointer normals = vtkSmartPointer::New(); + normals->SetInputConnection(polysource->GetOutputPort()); + + vtkSmartPointer mapper = vtkSmartPointer::New(); + mapper->SetInputConnection(normals->GetOutputPort()); + vtkSmartPointer actor = vtkSmartPointer::New(); + renderer->AddActor(actor); + actor->SetMapper(mapper); + + renWin->SetSize(400, 400); + + vtkSmartPointer ospray = vtkSmartPointer::New(); + renderer->SetPass(ospray); + vtkOSPRayRendererNode::SetRendererType("pathtracer", renderer); + for (int i = 0; i < argc; ++i) + { + if (!strcmp(argv[i], "--OptiX")) + { + vtkOSPRayRendererNode::SetRendererType("optix pathtracer", renderer); + break; + } + } + + + vtkSmartPointer textr = vtkSmartPointer::New(); + vtkSmartPointer imgReader = vtkSmartPointer::New(); + vtkSmartPointer image = vtkSmartPointer::New(); + + char* fname = vtkTestUtilities::ExpandDataFileName( + argc, argv, "Data/wintersun.jpg"); + imgReader->SetFileName(fname); + delete[] fname; + imgReader->Update(); + textr->SetInputConnection(imgReader->GetOutputPort(0)); + renderer->TexturedBackgroundOn(); + renderer->SetBackgroundTexture(textr); + + double up[3] = { 0.0, 1.0, 0.0 }; + double east[3] = { -1.0, 0.0, 0.0 }; + vtkOSPRayRendererNode::SetNorthPole(up, renderer); + vtkOSPRayRendererNode::SetEastPole(east, renderer); + + renWin->Render(); + + vtkSmartPointer w2i = vtkSmartPointer::New(); + w2i->SetInput(renWin); + w2i->SetScale(4, 4); + w2i->Update(); + + //vtkSmartPointer writer = vtkSmartPointer::New(); + //writer->SetFileName("screenshot.png"); + //writer->SetInputConnection(w2i->GetOutputPort()); + //writer->Write(); + + // Show stitched image in separate window + vtkNew imageActor; + imageActor->GetMapper()->SetInputData(w2i->GetOutput()); + vtkNew ren2; + ren2->AddActor(imageActor); + + // Background color white to distinguish image boundary + ren2->SetBackground(1, 1, 1); + vtkNew renderWindow; + renderWindow->AddRenderer(ren2); + renderWindow->Render(); + + vtkSmartPointer style = + vtkSmartPointer::New(); + style->SetPipelineControlPoints(renderer, ospray, nullptr); + iren->SetInteractorStyle(style); + style->SetCurrentRenderer(renderer); + + iren->Start(); + return 0; +} diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMaterialsOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMaterialsOptiX.png.sha512 index d43bed663424..131f687218ee 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMaterialsOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMaterialsOptiX.png.sha512 @@ -1 +1 @@ -4a2238ac8fc5a5b456ea261ac1d3cd3306eb44a209f1b5a5c15995efcfc2f0f12cc8dafd09953a14895ca20106e81bd079d72be5165eed9f3b8a68775c80ddfe +53fc0784386508943a1216098d09858473cacb6b2baab9c8468b6e954c1292de2a35afe1379dae18b5fb9e7df20551878d1b70e1d07062fdaca3790659bb7f08 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlockOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlockOptiX.png.sha512 index bee59d3ab792..a68758ce8154 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlockOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestCategoricalMultiBlockOptiX.png.sha512 @@ -1 +1 @@ -a9abc5a84dbac059c0881e1b4d081ccd1bbd44fc11313c3c82c415c171bc58b0272d371894952114a0685f46789cd18ddc7d65b427e24392a985275ea3c657cb +8837bf77b1a6d98d8ef6c12f771caf8021ed3d28918d1b9b89118516586320067a107f2943dff84bf6c3e3e4aef0e07db7fa8dbbff34734ad1e6dbf7b23d163e diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLightsOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLightsOptiX.png.sha512 index 79ec409e5d20..c160a858962d 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLightsOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayLightsOptiX.png.sha512 @@ -1 +1 @@ -932f5331da69ac3101bff5f41f99c332b4a4ea8b8f3c2a33fda72a0d7aebe7d488cc6a38a64980ca8ce472f26af6487e57ef9c09394ebaf9d6b5c9daf9731e66 +302c8db17d77806a2f9b48b8b205130c4d213b813b9751b02af502b8be2018ece396561fb8c7c6510c62fff14b35714ac3c62df3eb2f664417bc9abeb26652c4 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayScalarBarOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayScalarBarOptiX.png.sha512 index 9ca075d275fa..9bea504246f1 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayScalarBarOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayScalarBarOptiX.png.sha512 @@ -1 +1 @@ -d48f202540d15dc3ad0d4fe295055be606e80f60a0069885b45290c7b84d32b8bc025d2860354a97ce657a1cb49916622a9f7d04ab7efe1eb1813dade006484e +783d2054fc54e8db446596173bbfb736e99d3c16a8c28a7bf256abf070f0f67f0f4da4bb0311ae19e48dbb23771caec6c3cd3977f0755765284e660ba63525e0 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 new file mode 100644 index 000000000000..e35e1225300d --- /dev/null +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTiling.png.sha512 @@ -0,0 +1 @@ +e7ed435445e9c6c8c55bc411027261b493994a9795a61dee45f4a9622516565d89c982f41fd89adee0dca975cdde6d020601a1a8b8c76e77d5e49844332e2a44 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTilingOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTilingOptiX.png.sha512 new file mode 100644 index 000000000000..14746d87b6c2 --- /dev/null +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestOSPRayTilingOptiX.png.sha512 @@ -0,0 +1 @@ +f581366fd12de4a8daf34554887c8ca98c2e39a48219a03a915a3a35632de1f56f93c5cbc4f78fb584be78314318baa0923bf02bed00af3d8ad0410f8e473ef3 diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackgroundOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackgroundOptiX.png.sha512 index af78607cb786..60d24f2ffbd3 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackgroundOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerBackgroundOptiX.png.sha512 @@ -1 +1 @@ -699b8250ddb735586ed8ee9f45762db15bb2f7c2342a28e4fbd57ad7722caf3492e55f1192a86b4d557332e1ddb02865a3b6e78a41f0c7df9543d8efc3829f57 +b8b908a11fc01206f88d2ee8c199a8dec03461cc5dd1970182251850eb25ec482ee7bfcce1adb9e79f376f550aebab7e2f44ba9ed85162a03c9ee7d263e4d0eb diff --git a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerMaterialsOptiX.png.sha512 b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerMaterialsOptiX.png.sha512 index 61c57c2b3dd3..1a3290e65923 100644 --- a/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerMaterialsOptiX.png.sha512 +++ b/Rendering/RayTracing/Testing/Data/Baseline/TestPathTracerMaterialsOptiX.png.sha512 @@ -1 +1 @@ -99c2b94f6aa46c8a27c07d195deebdb73f67fa6369c31d18a7ba23dee8da0d78e76c507592a35cec211e05755655a68e6f776a929da7f1b9f2870d2934d94a95 +8b2e74e7727b4acd38e7f25d46bfdd317dcc1227e064d71f63de580fde6c751de758c2b2b90c98373feb60ff80f2d52f96eb56f400a8c3c3edcd4eadc3d9457b diff --git a/Rendering/RayTracing/vtkOSPRayMaterialHelpers.h b/Rendering/RayTracing/vtkOSPRayMaterialHelpers.h index b2b5ce56594b..d36c31aef50e 100644 --- a/Rendering/RayTracing/vtkOSPRayMaterialHelpers.h +++ b/Rendering/RayTracing/vtkOSPRayMaterialHelpers.h @@ -32,6 +32,7 @@ #define vtkOSPRayMaterialHelpers_h #include +#include #include "RTWrapper/RTWrapper.h" // for handle types -- GitLab