Skip to content

Commit ad504fa

Browse files
author
devsh
committed
Merge branch 'new_ditt_premerge'
2 parents d4935a1 + 332e8d7 commit ad504fa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+3912
-1384
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ compiled.spv
1212
*.pyc
1313
*/.vscode/*
1414
*/__main__.py
15+
/tmp/rtSamples.bin

22_RaytracedAO/CMakeLists.txt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,22 @@ endif()
3131

3232
set(EXTRA_SOURCES
3333
../../src/nbl/ext/DebugDraw/CDraw3DLine.cpp
34+
../../src/nbl/ext/EnvmapImportanceSampling/EnvmapImportanceSampling.cpp
3435
Renderer.cpp
3536
CommandLineHandler.cpp
37+
SimpleJson.cpp
3638
)
3739

3840
nbl_create_executable_project(
3941
"${EXTRA_SOURCES}"
4042
""
4143
"${RAY_TRACED_AO_EXAMPLE_INCLUDE_DIRS}"
4244
"${RAY_TRACED_AO_EXAMPLE_LIBS}"
43-
"${NBL_EXECUTABLE_PROJECT_CREATION_PCH_TARGET}"
44-
)
45+
)
46+
47+
# TODO: Abstract this stuff away inside `nbl_create_executable_project`
48+
if(NBL_RUN_TESTS)
49+
get_target_property(_RTAO_OUTPUT_RUNTIME_RELEASE_ ${EXECUTABLE_NAME} RUNTIME_OUTPUT_DIRECTORY_RELEASE)
50+
set(_NBL_PATHTRACER_EXE_ "${_RTAO_OUTPUT_RUNTIME_RELEASE_}/${EXECUTABLE_NAME}.exe" CACHE FILEPATH "")
51+
configure_file("${NBL_ROOT_PATH}/tests/22.RaytracedAO/test.py" "${NBL_BINARY_PATH}/examples_tests/22.RaytracedAO/test.py")
52+
endif()

22_RaytracedAO/CommandLineHandler.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,14 @@ CommandLineHandler::CommandLineHandler(const std::vector<std::string>& argv)
9595
else
9696
{
9797
const auto offset = firstHyphen + 1;
98-
const auto endOfFetchedVariableName = rawFetchedCmdArgument.find_first_of("=");
98+
bool hasArguments = true;
99+
auto endOfFetchedVariableName = rawFetchedCmdArgument.find_first_of("=");
100+
if (endOfFetchedVariableName == std::string::npos)
101+
{
102+
hasArguments = false;
103+
endOfFetchedVariableName = std::distance(rawFetchedCmdArgument.begin(), rawFetchedCmdArgument.end());
104+
}
105+
99106
const auto count = endOfFetchedVariableName - offset;
100107
const auto cmdFetchedVariable = rawFetchedCmdArgument.substr(offset, count);
101108
std::string variable = cmdFetchedVariable;
@@ -115,9 +122,10 @@ CommandLineHandler::CommandLineHandler(const std::vector<std::string>& argv)
115122
break;
116123
}
117124

118-
if(endOfFetchedVariableName != std::string::npos)
125+
if(hasArguments)
119126
{
120127
auto value = rawFetchedCmdArgument.substr(endOfFetchedVariableName + 1);
128+
121129
auto zipExtensionPos = value.find(".zip");
122130
if(zipExtensionPos == std::string::npos)
123131
zipExtensionPos = value.find(".ZIP");
@@ -144,7 +152,6 @@ CommandLineHandler::CommandLineHandler(const std::vector<std::string>& argv)
144152
toAdd.push_back(value);
145153
rawVariables[arg].emplace(toAdd);
146154
}
147-
148155
}
149156
else
150157
{
@@ -154,7 +161,6 @@ CommandLineHandler::CommandLineHandler(const std::vector<std::string>& argv)
154161

155162
previousArg = arg;
156163
}
157-
158164
}
159165

160166
if (!validateParameters() || !success)

22_RaytracedAO/CommandLineHandler.hpp

Lines changed: 85 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,69 +16,93 @@ constexpr std::string_view helpMessage = R"(
1616
1717
Parameters:
1818
-SCENE=sceneMitsubaXMLPathOrZipAndXML
19-
-TERMINATE
2019
2120
Description and usage:
2221
2322
-SCENE:
2423
some/path extra/path which will make it skip the file choose dialog
2524
26-
-TERMINATE:
27-
which will make the app stop when the required amount of samples has been renderered (its in the Mitsuba Scene metadata) and obviously take screenshot when quitting
25+
-PROCESS_SENSORS ID:
26+
It will control the behaviour of sensors in the app as detailed above.
27+
If the option is not passed, then it defaults to RenderAllThenInteractive.
28+
If the ID is not passed, then it defaults to 0.
2829
2930
Example Usages :
30-
raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml -TERMINATE
31-
raytracedao.exe -SCENE="../../media/my good kitchen.zip" scene.xml -TERMINATE
32-
raytracedao.exe -SCENE="../../media/my good kitchen.zip scene.xml" -TERMINATE
33-
raytracedao.exe -SCENE="../../media/extraced folder/scene.xml" -TERMINATE
31+
raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml
32+
raytracedao.exe -SCENE=../../media/kitchen.zip scene.xml -PROCESS_SENSORS RenderAllThenInteractive
33+
raytracedao.exe -SCENE="../../media/my good kitchen.zip" scene.xml -PROCESS_SENSORS RenderAllThenTerminate 0
34+
raytracedao.exe -SCENE="../../media/my good kitchen.zip scene.xml" -PROCESS_SENSORS RenderSensorThenInteractive 1
35+
raytracedao.exe -SCENE="../../media/extraced folder/scene.xml" -PROCESS_SENSORS InteractiveAtSensor 2
3436
)";
3537

3638

3739
constexpr std::string_view SCENE_VAR_NAME = "SCENE";
3840
constexpr std::string_view SCREENSHOT_OUTPUT_FOLDER_VAR_NAME = "SCREENSHOT_OUTPUT_FOLDER";
39-
constexpr std::string_view TERMINATE_VAR_NAME = "TERMINATE";
41+
constexpr std::string_view PROCESS_SENSORS_VAR_NAME = "PROCESS_SENSORS";
42+
constexpr std::string_view DEFER_DENOISE_VAR_NAME = "DEFER_DENOISE";
4043

4144
constexpr uint32_t MaxRayTracerCommandLineArgs = 8;
4245

4346
enum RaytracerExampleArguments
4447
{
4548
REA_SCENE,
46-
REA_TERMINATE,
49+
REA_PROCESS_SENSORS,
50+
REA_DEFER_DENOISE,
4751
REA_COUNT,
4852
};
4953

54+
enum class ProcessSensorsBehaviour
55+
{
56+
PSB_RENDER_ALL_THEN_INTERACTIVE,
57+
PSB_RENDER_ALL_THEN_TERMINATE,
58+
PSB_RENDER_SENSOR_THEN_INTERACTIVE,
59+
PSB_INTERACTIVE_AT_SENSOR,
60+
PSB_COUNT
61+
};
62+
5063
using variablesType = std::unordered_map<RaytracerExampleArguments, std::optional<std::vector<std::string>>>;
5164

5265
class CommandLineHandler
5366
{
5467
public:
55-
5668
CommandLineHandler(const std::vector<std::string>& argv);
5769

58-
auto& getSceneDirectory() const
70+
inline auto& getSceneDirectory() const
5971
{
6072
return sceneDirectory;
6173
}
6274

63-
auto& getTerminate() const
75+
inline auto& getProcessSensorsBehaviour() const
6476
{
65-
return terminate;
77+
return processSensorsBehaviour;
6678
}
6779

68-
private:
80+
inline auto& getSensorID() const
81+
{
82+
return sensorID;
83+
}
6984

85+
inline bool getDeferredDenoiseFlag() const
86+
{
87+
return isDenoiseDeferred;
88+
}
89+
90+
private:
7091
void initializeMatchingMap()
7192
{
7293
rawVariables[REA_SCENE];
73-
rawVariables[REA_TERMINATE];
94+
rawVariables[REA_PROCESS_SENSORS];
95+
rawVariables[REA_DEFER_DENOISE];
7496
}
7597

7698
RaytracerExampleArguments getMatchedVariableMapID(const std::string& variableName)
7799
{
78100
if (variableName == SCENE_VAR_NAME)
79101
return REA_SCENE;
80-
else if (variableName == TERMINATE_VAR_NAME)
81-
return REA_TERMINATE;
102+
else if (variableName == PROCESS_SENSORS_VAR_NAME)
103+
return REA_PROCESS_SENSORS;
104+
else if (variableName == DEFER_DENOISE_VAR_NAME)
105+
return REA_DEFER_DENOISE;
82106
else
83107
return REA_COUNT;
84108
}
@@ -89,16 +113,57 @@ class CommandLineHandler
89113
{
90114
if(rawVariables[REA_SCENE].has_value())
91115
sceneDirectory = rawVariables[REA_SCENE].value();
92-
if(rawVariables[REA_TERMINATE].has_value())
93-
terminate = true;
116+
if (rawVariables[REA_PROCESS_SENSORS].has_value())
117+
{
118+
const auto& values = rawVariables[REA_PROCESS_SENSORS].value();
119+
for (uint32_t i = 0; i < values.size(); ++i)
120+
{
121+
if (i == 0)
122+
{
123+
const char* behaviour = values[0].c_str();
124+
if (strcmp(behaviour, "RenderAllThenInteractive") == 0)
125+
{
126+
processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_INTERACTIVE;
127+
}
128+
else if (strcmp(behaviour, "RenderAllThenTerminate") == 0)
129+
{
130+
processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_TERMINATE;
131+
}
132+
else if (strcmp(behaviour, "RenderSensorThenInteractive") == 0)
133+
{
134+
processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_SENSOR_THEN_INTERACTIVE;
135+
}
136+
else if (strcmp(behaviour, "InteractiveAtSensor") == 0)
137+
{
138+
processSensorsBehaviour = ProcessSensorsBehaviour::PSB_INTERACTIVE_AT_SENSOR;
139+
}
140+
else
141+
{
142+
printf("[ERROR]: Invalid option for '%s'. Using RenderAllThenInteractive.\n", PROCESS_SENSORS_VAR_NAME.data());
143+
}
144+
}
145+
else if (i == 1)
146+
{
147+
sensorID = std::stoi(values[1]);
148+
}
149+
}
150+
}
151+
152+
isDenoiseDeferred = rawVariables[REA_DEFER_DENOISE].has_value();
94153
}
95154

96155
variablesType rawVariables;
97156

98157
// Loaded from CMD
99158
std::vector<std::string> sceneDirectory; // [0] zip [1] optional xml in zip
100159
std::string outputScreenshotsFolderPath;
101-
bool terminate = false;
160+
bool isDenoiseDeferred;
161+
struct
162+
{
163+
ProcessSensorsBehaviour processSensorsBehaviour = ProcessSensorsBehaviour::PSB_RENDER_ALL_THEN_INTERACTIVE;
164+
uint32_t sensorID = 0;
165+
};
166+
102167
};
103168

104169
#endif // _DENOISER_TONEMAPPER_COMMAND_LINE_HANDLER_

0 commit comments

Comments
 (0)