OpenImadeDenoiser
This commit is contained in:
@@ -22,13 +22,10 @@ if (UNIX)
|
||||
endif(UNIX)
|
||||
|
||||
if (WIN32)
|
||||
set(CMAKE_CXX_FLAGS "-IC:/dev/SDL2/include/ -LC:/dev/SDL2/lib/x64/")
|
||||
#set(CMAKE_CXX_FLAGS "-IC:/dev/SDL2_image/include/ -LC:/dev/SDL2_image/lib/x64/")
|
||||
set(CMAKE_CXX_FLAGS "-IC:/dev/glm")
|
||||
|
||||
include_directories(${executable}
|
||||
"C:/dev/glm"
|
||||
"C:/dev/SDL2/include/"
|
||||
"C:/dev/oidn/include"
|
||||
#"C:/dev/SDL2_image/include/"
|
||||
)
|
||||
endif (WIN32)
|
||||
@@ -65,6 +62,7 @@ file(GLOB SourceFiles
|
||||
${SrcDIR}/definitions/*
|
||||
${SrcDIR}/definitions/materials/*
|
||||
${SrcDIR}/definitions/primatives/*
|
||||
${SrcDIR}/denoise/*
|
||||
${SrcDIR}/util/*
|
||||
${SrcDIR}/util/imgui/*
|
||||
${TestDIR}/${CurrentTest}
|
||||
@@ -93,6 +91,9 @@ if (WIN32)
|
||||
"C:/dev/SDL2/lib/x64/SDL2main.lib"
|
||||
"C:/dev/SDL2/lib/x64/SDL2test.lib"
|
||||
#"C:/dev/SDL2_image/lib/x64/SDL2_image.lib"
|
||||
"C:/dev/oidn/lib/OpenImageDenoise.lib"
|
||||
"C:/dev/oidn/lib/tbb.lib"
|
||||
"C:/dev/oidn/lib/tbbmalloc.lib"
|
||||
${WinSDK}
|
||||
)
|
||||
endif (WIN32)
|
||||
|
||||
3
src/denoise/denoise.cpp
Normal file
3
src/denoise/denoise.cpp
Normal file
@@ -0,0 +1,3 @@
|
||||
#include "denoise.hpp"
|
||||
|
||||
|
||||
24
src/denoise/denoise.hpp
Normal file
24
src/denoise/denoise.hpp
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef INFERNO_DENOISE_DENOISE_H_
|
||||
#define INFERNO_DENOISE_DENOISE_H_
|
||||
|
||||
#include "../maths.hpp"
|
||||
|
||||
class Denoiser {
|
||||
public:
|
||||
|
||||
void SetAlbedo(glm::vec3* albedoBuffer);
|
||||
void SetNormals(glm::vec3* normalBuffer);
|
||||
|
||||
void Denoise(glm::vec3* target, bool hdr);
|
||||
|
||||
private:
|
||||
|
||||
bool m_hdr;
|
||||
|
||||
glm::vec3* m_albedoBuffer;
|
||||
glm::vec3* m_normalBuffer;
|
||||
glm::vec3* m_targetBuffer;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
5
src/denoise/oidn.cpp
Normal file
5
src/denoise/oidn.cpp
Normal file
@@ -0,0 +1,5 @@
|
||||
#include "oidn.hpp"
|
||||
|
||||
#include <OpenImageDenoise/oidn.hpp>
|
||||
|
||||
|
||||
5
src/denoise/oidn.hpp
Normal file
5
src/denoise/oidn.hpp
Normal file
@@ -0,0 +1,5 @@
|
||||
#ifndef INFERNO_DENOISE_OIDN_H_
|
||||
#define INFERNO_DENOISE_OIDN_H_
|
||||
|
||||
|
||||
#endif
|
||||
@@ -9,7 +9,6 @@
|
||||
#include "../common.hpp"
|
||||
#include "../pixel.hpp"
|
||||
|
||||
|
||||
#include "../display/displayinterface.hpp"
|
||||
#include "../display/framebuffer.hpp"
|
||||
|
||||
@@ -41,13 +40,19 @@ void ProgressiveRenderer::Input() {
|
||||
|
||||
const Uint8* state = SDL_GetKeyboardState(NULL);
|
||||
|
||||
// if (state[SDL_SCANCODE_W]) m_scene->objects[0]->center.y += 0.001f;
|
||||
// if (state[SDL_SCANCODE_S]) m_scene->objects[0]->center.y -= 0.001f;
|
||||
// if (state[SDL_SCANCODE_D]) m_scene->objects[0]->center.x += 0.001f;
|
||||
// if (state[SDL_SCANCODE_A]) m_scene->objects[0]->center.x -= 0.001f;
|
||||
// if (state[SDL_SCANCODE_R]) m_scene->objects[0]->center.z += 0.001f;
|
||||
// if (state[SDL_SCANCODE_F]) m_scene->objects[0]->center.z -= 0.001f;
|
||||
// std::cout << m_scene->objects[0]->center.x << " " << m_scene->objects[0]->center.y << " " << m_scene->objects[0]->center.z << std::endl;
|
||||
//glm::vec3 pos = m_scene->objects[0]->center;
|
||||
//if (state[SDL_SCANCODE_W]) m_scene->objects[0]->center.y += 0.01f;
|
||||
//if (state[SDL_SCANCODE_S]) m_scene->objects[0]->center.y -= 0.01f;
|
||||
//if (state[SDL_SCANCODE_D]) m_scene->objects[0]->center.x += 0.01f;
|
||||
//if (state[SDL_SCANCODE_A]) m_scene->objects[0]->center.x -= 0.01f;
|
||||
//if (state[SDL_SCANCODE_R]) m_scene->objects[0]->center.z += 0.01f;
|
||||
//if (state[SDL_SCANCODE_F]) m_scene->objects[0]->center.z -= 0.01f;
|
||||
//glm::vec3 newpos = m_scene->objects[0]->center;
|
||||
|
||||
//if (newpos.x != pos.x || newpos.y != pos.y || newpos.z != pos.z) {
|
||||
// m_threadPool->ThreadFrameBuffer->ClearFramebuffer();
|
||||
// m_engine->SPP = 0; m_engine->SPPDepth = 0;
|
||||
//}
|
||||
|
||||
if (!m_interface->ImGui) return;
|
||||
|
||||
@@ -85,6 +90,11 @@ void ProgressiveRenderer::Input() {
|
||||
ImGui::SliderFloat("Gamma", &m_gamma, 1.0f, 4.0f);
|
||||
m_interface->Framebuffer->Gamma = 1.0f / m_gamma;
|
||||
|
||||
if (ImGui::Button("Reset")) {
|
||||
m_threadPool->ThreadFrameBuffer->ClearFramebuffer();
|
||||
m_engine->SPP = 0; m_engine->SPPDepth = 0;
|
||||
}
|
||||
|
||||
if (ImGui::Button("Save Image")) {
|
||||
m_interface->Framebuffer->DumpToFile(m_imageSavePath);
|
||||
std::cout << "Saved: " << m_imageSavePath << std::endl;
|
||||
@@ -107,6 +117,8 @@ void ProgressiveRenderer::Render() {
|
||||
m_engine->Mode = m_mode;
|
||||
m_engine->PostProcess(m_threadPool->ThreadFrameBuffer->RenderTarget, m_threadPool->ThreadFrameBuffer->RenderPostProcess, m_scene->w, m_scene->h);
|
||||
|
||||
// Denoise
|
||||
|
||||
m_threadPool->ThreadFrameBuffer->PostProcess((ToneMapMode)m_toneMapModeSelected);
|
||||
|
||||
m_threadPool->MergeBuffers(m_interface->Framebuffer);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
class RenderThreadPool;
|
||||
class DisplayInterface;
|
||||
class RenderEngine;
|
||||
class Denoiser;
|
||||
class Scene;
|
||||
class Ray;
|
||||
|
||||
@@ -34,6 +35,7 @@ public:
|
||||
RenderThreadPool* m_threadPool = nullptr;
|
||||
DisplayInterface* m_interface = nullptr;
|
||||
RenderEngine* m_engine = nullptr;
|
||||
Denoiser* m_denoiser = nullptr;
|
||||
Scene* m_scene = nullptr;
|
||||
|
||||
private:
|
||||
|
||||
@@ -94,7 +94,6 @@ glm::vec3 RenderEngine::GetColour(Ray ray, int& depth) {
|
||||
// colour.r = pattern; colour.g = pattern; colour.b = pattern;
|
||||
//}
|
||||
|
||||
|
||||
if (hit->material->Emissive) return (colour * hit->material->Emittance);
|
||||
|
||||
glm::vec3 direction = hit->material->Bounce(ray.direction, normal);
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
#include "../src/inferno.hpp"
|
||||
|
||||
static const int width = 500;
|
||||
static const int height = 500;
|
||||
static const int width = 1010;
|
||||
static const int height = 1010;
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
InfernoEngine inferno;
|
||||
@@ -18,19 +18,42 @@ int main(int argc, char** argv) {
|
||||
|
||||
Scene* scene = new Scene(width, height);
|
||||
scene->camera = new Camera(width, height);
|
||||
|
||||
Sphere sphere({ 0.0f, 0.0f, -20.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere);
|
||||
|
||||
scene->objects.push_back(new Sphere({ 35.0f, 26.0f, 25.0f }, 15.0f, new Material({ 1.0f, 1.0f, 1.0f }, 0.0f, 5.0f)));
|
||||
scene->objects.push_back(new Sphere({-0.457001f, 0.19f, -3.53899f}, 0.02f, new Material({ 1.0f, 0.9f, 0.8f }, 0.0f, 500.0f)));
|
||||
scene->objects.push_back(new Plane( { 0.0f, -1.0f, 0.0f }, { 0.0f, -1.0f, 0.0f }, new Material({ 0.847f, 0.792f, 0.658f }, 0.2f)));
|
||||
Sphere sphere1({ 0.0f, 0.0f, -20.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere1);
|
||||
|
||||
Sphere sphere2({ -3.0f, 1.0f, -10.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere2);
|
||||
|
||||
Sphere sphere3({ 6.0f, 3.0f, -13.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere3);
|
||||
|
||||
Sphere sphere4({ -1.0f, 2.0f, -10.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere4);
|
||||
|
||||
Sphere sphere5({ 2.0f, 5.0f, -15.0f }, 1.0f, new Material({ 0.817f, 0.374, 0.574 }, 0.5f));
|
||||
scene->objects.push_back(&sphere5);
|
||||
|
||||
Sphere light({ 35.0f, 56.0f, 25.0f }, 35.0f, new Material({ 1.0f, 1.0f, 1.0f }, 0.0f, 5.0f));
|
||||
scene->objects.push_back(&light);
|
||||
|
||||
Plane plane({ 0.0f,-1.0f, 0.0f }, { 0.0f, -1.0f, 0.0f }, new Material({ 0.9f, 0.9f, 0.9f }, 0.0f));
|
||||
scene->objects.push_back(&plane);
|
||||
|
||||
//scene->objects.push_back(new Sphere({ 35.0f, 26.0f, 25.0f }, 15.0f, new Material({ 1.0f, 1.0f, 1.0f }, 0.0f, 5.0f)));
|
||||
//scene->objects.push_back(new Sphere({-0.457001f, 0.19f, -3.53899f}, 0.02f, new Material({ 1.0f, 0.9f, 0.8f }, 0.0f, 500.0f)));
|
||||
//scene->objects.push_back(new Plane( { 0.0f, -1.0f, 0.0f }, { 0.0f, -1.0f, 0.0f }, new Material({ 0.847f, 0.792f, 0.658f }, 0.2f)));
|
||||
|
||||
// std::vector<Triangle*> tris = LoadTrianglesBasic("E://Projects//Inferno//resources//dragon-normals.obj", "E://Projects//Inferno//resources");
|
||||
std::vector<Triangle*> tris = LoadTrianglesBasic("//home//ben//programming//inferno//resources//dragon-normals.obj", "//home//ben//programming//inferno//resources//resources");
|
||||
|
||||
Mesh* mesh1 = new Mesh(tris);
|
||||
mesh1->Translate({ 0.2f, -1.04, -3.8f });
|
||||
mesh1->Optimise();
|
||||
scene->meshs.push_back(mesh1);
|
||||
//std::vector<Triangle*> tris = LoadTrianglesBasic("//home//ben//programming//inferno//resources//dragon-normals.obj", "//home//ben//programming//inferno//resources//resources");
|
||||
|
||||
//Mesh* mesh1 = new Mesh(tris);
|
||||
//mesh1->Translate({ 0.2f, -1.04, -3.8f });
|
||||
//mesh1->Optimise();
|
||||
//scene->meshs.push_back(mesh1);
|
||||
|
||||
inferno.SetScene(scene);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user