add oidn
This commit is contained in:
parent
351a5d842e
commit
8b54ca0216
10 changed files with 87 additions and 20 deletions
40
3DEditor/private/Denoise.cpp
Normal file
40
3DEditor/private/Denoise.cpp
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
#include "Editor.hpp"
|
||||
|
||||
#include "OpenImageDenoise/oidn.hpp"
|
||||
#include <iostream>
|
||||
|
||||
using namespace tp;
|
||||
|
||||
void Editor::denoise() {
|
||||
auto& out = mPathTracerBuffers;
|
||||
|
||||
// Initialize OIDN device
|
||||
oidn::DeviceRef device = oidn::newDevice(oidn::DeviceType::CPU);
|
||||
device.commit();
|
||||
|
||||
// Define buffer size
|
||||
const int channels = 4; // ARGB
|
||||
const auto size = out.color.size();
|
||||
// Create the denoising filter
|
||||
oidn::FilterRef filter = device.newFilter("RT"); // Use the 'RT' filter for path tracing
|
||||
|
||||
// Set the input and output buffer (same buffer for in-place denoising)
|
||||
filter.setImage("color", out.color.getBuff(), oidn::Format::Float3, size.x, size.y, 0, sizeof(float) * channels); // ARGB
|
||||
filter.setImage("output", out.color.getBuff(), oidn::Format::Float3, size.x, size.y, 0, sizeof(float) * channels); // ARGB
|
||||
|
||||
// Set additional parameters if needed
|
||||
filter.set("hdr", false); // Assuming the input image is not HDR
|
||||
|
||||
// Commit the filter
|
||||
filter.commit();
|
||||
|
||||
// Execute the filter
|
||||
filter.execute();
|
||||
|
||||
// Check for errors
|
||||
const char* errorMessage;
|
||||
if (device.getError(errorMessage) != oidn::Error::None) {
|
||||
std::cerr << "Error: " << errorMessage << std::endl;
|
||||
}
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ void Editor::loadDefaults() {
|
|||
|
||||
void Editor::setViewportSize(const Vec2F& size) {
|
||||
// TODO remove
|
||||
// mScene.mCamera.rotate(0.01f, 0.0);
|
||||
mScene.mCamera.rotate(0.01f, 0.0);
|
||||
|
||||
mScene.mRenderSettings.size = size;
|
||||
|
||||
|
|
@ -72,25 +72,29 @@ Editor::~Editor() {
|
|||
|
||||
void Editor::renderPathFrame() {
|
||||
mPathRenderer.render(mScene, mPathTracerBuffers, mScene.mRenderSettings);
|
||||
// mPathTracerBuffers.color.flipY();
|
||||
sendBuffersToGPU();
|
||||
}
|
||||
|
||||
{
|
||||
glBindTexture(GL_TEXTURE_2D, mPathRenderTexture);
|
||||
const auto size = mPathTracerBuffers.color.size();
|
||||
glTexImage2D(
|
||||
GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_RGBA32F,
|
||||
(GLsizei) size.x,
|
||||
(GLsizei) size.y,
|
||||
0,
|
||||
GL_RGBA,
|
||||
GL_FLOAT,
|
||||
mPathTracerBuffers.color.getBuff()
|
||||
);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
void Editor::sendBuffersToGPU() {
|
||||
glBindTexture(GL_TEXTURE_2D, mPathRenderTexture);
|
||||
const auto size = mPathTracerBuffers.color.size();
|
||||
glTexImage2D(
|
||||
GL_TEXTURE_2D,
|
||||
0,
|
||||
GL_RGBA32F,
|
||||
(GLsizei) size.x,
|
||||
(GLsizei) size.y,
|
||||
0,
|
||||
GL_RGBA,
|
||||
GL_FLOAT,
|
||||
mPathTracerBuffers.color.getBuff()
|
||||
);
|
||||
glBindTexture(GL_TEXTURE_2D, 0);
|
||||
}
|
||||
|
||||
}
|
||||
void Editor::denoisePathRenderBuffers() {
|
||||
denoise();
|
||||
sendBuffersToGPU();
|
||||
}
|
||||
|
||||
void Editor::setRenderType(Editor::RenderType type) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue