From d8b69f01c87df0e3b0c57498cfec274ff853c7ee Mon Sep 17 00:00:00 2001 From: waternine9 <62113486+waternine9@users.noreply.github.com> Date: Wed, 9 Feb 2022 20:49:00 -0500 Subject: [PATCH] Update krov_engine_main.cu --- krov_engine_main.cu | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/krov_engine_main.cu b/krov_engine_main.cu index 4f2b688..2c2bf8a 100644 --- a/krov_engine_main.cu +++ b/krov_engine_main.cu @@ -21,6 +21,7 @@ #include #include "cudamathOld.cuh" #include +#include "OpenImageDenoise/oidn.hpp" #define RESOLUTION 512 #define ALLOC_MEM_TRIS_NUM 800 __host__ __device__ struct Triangle @@ -77,7 +78,7 @@ __host__ __device__ bool rayTriangleIntersect(float3 v0, float3 v1, float3 v2, f float3 vp2 = sub(P, v2); C = cross(edge2, vp2); if (dot(N, C) < 0) return false; - return true; + return true; } __global__ void _draw_pix(int y, float camX, float camY, float camZ, float sunX, float sunY, float sunZ, float playerX, float playerY, float playerZ, float degreesXZ, float degreesYZ, curandState* rand_state, Triangle* tris, int depth, int* r, int* g, int* b) { @@ -240,7 +241,7 @@ public: int* g; int* b; }; -bool loadFromObjectFile(std::string sFilename, std::vector &anyData) +bool loadFromObjectFile(std::string sFilename, std::vector& anyData) { std::ifstream f(sFilename); if (!f.is_open()) @@ -291,7 +292,7 @@ bool loadFromObjectFile(std::string sFilename, std::vector &anyData) return true; } -Wrapper helper(int y, float camX, float camY, float camZ, float sunX, float sunY, float sunZ, float playerX, float playerY, float playerZ, float degreesXZ, float degreesYZ, Triangle* tris, curandState *state, int depth) +Wrapper helper(int y, float camX, float camY, float camZ, float sunX, float sunY, float sunZ, float playerX, float playerY, float playerZ, float degreesXZ, float degreesYZ, Triangle* tris, curandState* state, int depth) { Triangle* dev_tris = nullptr; cudaMalloc(&dev_tris, sizeof(Triangle) * ALLOC_MEM_TRIS_NUM); @@ -311,7 +312,7 @@ Wrapper helper(int y, float camX, float camY, float camZ, float sunX, float sunY curandState* dev_state = nullptr; cudaMalloc(&dev_state, sizeof(curandState)); cudaMemcpy(dev_state, state, sizeof(curandState), cudaMemcpyHostToDevice); - _draw_pix<<>>(y, camX, camY, camZ, sunX, sunY, sunZ, playerX, playerY, playerZ, degreesXZ, degreesYZ, dev_state, dev_tris, depth, dev_outputR, dev_outputG, dev_outputB); + _draw_pix << > > (y, camX, camY, camZ, sunX, sunY, sunZ, playerX, playerY, playerZ, degreesXZ, degreesYZ, dev_state, dev_tris, depth, dev_outputR, dev_outputG, dev_outputB); cudaDeviceSynchronize(); cudaMemcpy(outputR, dev_outputR, RESOLUTION * (RESOLUTION / 4) * sizeof(int), cudaMemcpyDeviceToHost); cudaMemcpy(outputG, dev_outputG, RESOLUTION * (RESOLUTION / 4) * sizeof(int), cudaMemcpyDeviceToHost); @@ -341,13 +342,13 @@ void main() Mesh mesh; mesh.triangles = std::vector(ALLOC_MEM_TRIS_NUM); loadFromObjectFile("C:/Users/arthu/ObjFiles/helmet.obj", mesh.triangles); - cv::Mat canvas; - + cv::Mat canvas; + glm::mat4 projection = glm::perspectiveFov(glm::half_pi() / 2.0f, 2.0f, 2.0f, 0.01f, 100.0f); - + float frameCount = 0; glm::mat4 identity = glm::identity(); - + float playerPos[3] = { 0, 2.0f, 0 }; float playerVec[3] = { 0, 0, 0 }; float playerRotY = 0.0f; @@ -355,6 +356,9 @@ void main() float cameraDist = 4.0f; float depth_UNDERCOVER = 1.0f; int depth = 1.0f; + oidn::DeviceRef device = oidn::newDevice(); + device.commit(); + oidn::FilterRef filter = device.newFilter("RT"); // generic ray tracing filter while (true) { frameCount++; @@ -440,6 +444,17 @@ void main() } mesh.triangles = oldTris; std::cout << (clock() - s) / CLOCKS_PER_SEC << std::endl; + + + // Create a denoising filter + if (depth_UNDERCOVER > 4.0f) + { + canvas.convertTo(canvas, CV_32FC3); + filter.setImage("color", canvas.data, oidn::Format::Float3, RESOLUTION, RESOLUTION); + filter.setImage("output", canvas.data, oidn::Format::Float3, RESOLUTION, RESOLUTION); + filter.commit(); + filter.execute(); + } cv::imshow("Output", canvas); cv::setMouseCallback("Output", mouseCallback); cv::waitKey(1); @@ -513,4 +528,4 @@ void main() } } return; -} +} \ No newline at end of file