From 3cc8dbc1027bb35c06d968e9f67e1b8e9770ba83 Mon Sep 17 00:00:00 2001 From: IlyaShurupov Date: Tue, 18 Jun 2024 15:45:51 +0300 Subject: [PATCH] Add albedo output to the raytracer --- 3DEditor/public/EditorWidget.hpp | 10 +++++----- RayTracer/applications/Rayt.cpp | 3 ++- RayTracer/private/RayTracer.cpp | 16 +++++++++++++--- RayTracer/public/RayTracer.hpp | 1 + 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/3DEditor/public/EditorWidget.hpp b/3DEditor/public/EditorWidget.hpp index 78c9872..a7996d3 100644 --- a/3DEditor/public/EditorWidget.hpp +++ b/3DEditor/public/EditorWidget.hpp @@ -10,7 +10,7 @@ namespace tp { mRender(renderResolution) { mImage = canvas->createImageFromTextId(mRender.getRenderBufferID(), { 0, 0 }); - mGeometry = geometry; + mScene = geometry; mCanvas = canvas; } @@ -18,18 +18,18 @@ namespace tp { void eventProcess(const Events& events) override { mRender.getRenderBuffer()->resize(this->mArea.size); - mGeometry->mCamera.rotate(0.01f, 0.0); - mGeometry->mCamera.setRatio(this->mArea.w / this->mArea.z); + mScene->mCamera.rotate(0.01f, 0.0); + mScene->mCamera.setRatio(this->mArea.w / this->mArea.z); } void eventDraw(Canvas& canvas) override { - mRender.render(*mGeometry, this->mArea.size); + mRender.render(*mScene, this->mArea.size); canvas.drawImage(this->mArea, &mImage, PI); } public: Render mRender; - Scene* mGeometry = nullptr; + Scene* mScene = nullptr; Canvas* mCanvas = nullptr; Canvas::ImageHandle mImage; }; diff --git a/RayTracer/applications/Rayt.cpp b/RayTracer/applications/Rayt.cpp index 310a85a..eeb1ed2 100644 --- a/RayTracer/applications/Rayt.cpp +++ b/RayTracer/applications/Rayt.cpp @@ -74,9 +74,10 @@ void renderCommand(const std::string& scenePath) { std::cout << "\nRender finished with average render time per sample - " << (end - start) << " (ms)\n"; - writeImage(output.normals, "normals.png"); + writeImage(output.normals, "normal.png"); writeImage(output.color, "color.png"); writeImage(output.depth, "depth.png"); + writeImage(output.albedo, "albedo.png"); } int main(int argc, const char** argv) { diff --git a/RayTracer/private/RayTracer.cpp b/RayTracer/private/RayTracer.cpp index ab2db13..b975c59 100644 --- a/RayTracer/private/RayTracer.cpp +++ b/RayTracer/private/RayTracer.cpp @@ -45,6 +45,7 @@ using namespace tp; void RayTracer::castRay(const Ray& ray, RayCastData& out, alnf farVal) { out.hit = false; + out.obj = nullptr; farVal *= farVal; @@ -120,6 +121,7 @@ void RayTracer::render(const Scene& scene, OutputBuffers& out, const RenderSetti out.color.reserve({ settings.size.x, settings.size.y }); out.normals.reserve({ settings.size.x, settings.size.y }); out.depth.reserve({ settings.size.x, settings.size.y }); + out.albedo.reserve({ settings.size.x, settings.size.y }); mScene = &scene; mSettings = settings; @@ -169,6 +171,7 @@ void RayTracer::render(const Scene& scene, OutputBuffers& out, const RenderSetti out.color.set({ i, j }, 0.f); out.normals.set({ i, j }, 0.f); out.depth.set({ i, j }, 0.f); + out.albedo.set({ i, j }, 0.f); } } @@ -183,6 +186,13 @@ void RayTracer::render(const Scene& scene, OutputBuffers& out, const RenderSetti castRay(ray, castData, mScene->mCamera.getFar()); + halni albedoColor = abs(hash((ualni) castData.obj)); + halnf albedoColorR = float((albedoColor & 0x00000011) % 155) + 100; + halnf albedoColorG = float((albedoColor & 0x00001100) % 155) + 100; + halnf albedoColorB = float((albedoColor & 0x00110000) % 155) + 100; + + out.albedo.set({ i, j }, { albedoColorR, albedoColorG, albedoColorB, 1.f }); + if (castData.hit) { LightData lightData; cycle(castData, lightData, mSettings.depth); @@ -198,9 +208,9 @@ void RayTracer::render(const Scene& scene, OutputBuffers& out, const RenderSetti accumulateColor(out.depth.get({ i, j }), { depth, depth, depth, 1.f }); } else { - out.color.set({ i, j }, 0.f); - out.normals.set({ i, j }, 0.f); - out.depth.set({ i, j }, 0.f); + // out.color.set({ i, j }, 0.f); + // out.normals.set({ i, j }, 0.f); + // out.depth.set({ i, j }, 0.f); } // auto tmp = buff.get({i, j}); diff --git a/RayTracer/public/RayTracer.hpp b/RayTracer/public/RayTracer.hpp index 08ea94e..d448b06 100644 --- a/RayTracer/public/RayTracer.hpp +++ b/RayTracer/public/RayTracer.hpp @@ -56,6 +56,7 @@ namespace tp { RenderBuffer normals; RenderBuffer color; RenderBuffer depth; + RenderBuffer albedo; // albedo, reflectance ... };