removing thread local random
This commit is contained in:
Vendored
+4
@@ -0,0 +1,4 @@
|
|||||||
|
[Window][Debug##Default]
|
||||||
|
Pos=60,60
|
||||||
|
Size=400,400
|
||||||
|
|
||||||
Vendored
+21
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "(lldb) Launch",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/build/RayTracer",
|
||||||
|
"args": [],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"cwd": "${fileDirname}",
|
||||||
|
"environment": [],
|
||||||
|
"externalConsole": false,
|
||||||
|
"MIMode": "lldb"
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
+5
-2
@@ -21,7 +21,6 @@ find_package(imgui CONFIG REQUIRED)
|
|||||||
|
|
||||||
add_executable(RayTracer "")
|
add_executable(RayTracer "")
|
||||||
target_include_directories(RayTracer PUBLIC src/)
|
target_include_directories(RayTracer PUBLIC src/)
|
||||||
target_include_directories(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/x64-windows/include)
|
|
||||||
target_link_libraries(RayTracer PUBLIC Vulkan::Vulkan)
|
target_link_libraries(RayTracer PUBLIC Vulkan::Vulkan)
|
||||||
target_link_libraries(RayTracer PUBLIC Vulkan::Headers)
|
target_link_libraries(RayTracer PUBLIC Vulkan::Headers)
|
||||||
target_link_libraries(RayTracer PUBLIC assimp::assimp)
|
target_link_libraries(RayTracer PUBLIC assimp::assimp)
|
||||||
@@ -30,6 +29,10 @@ target_link_libraries(RayTracer PUBLIC imgui::imgui)
|
|||||||
target_link_libraries(RayTracer PUBLIC GLEW::GLEW)
|
target_link_libraries(RayTracer PUBLIC GLEW::GLEW)
|
||||||
target_link_libraries(RayTracer PUBLIC glm::glm)
|
target_link_libraries(RayTracer PUBLIC glm::glm)
|
||||||
target_link_libraries(RayTracer PUBLIC KTX::ktx)
|
target_link_libraries(RayTracer PUBLIC KTX::ktx)
|
||||||
|
if(WIN32)
|
||||||
|
target_include_directories(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/x64-windows/include)
|
||||||
target_link_libraries(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/x64-windows/lib/slang.lib)
|
target_link_libraries(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/x64-windows/lib/slang.lib)
|
||||||
|
elseif(APPLE)
|
||||||
|
target_include_directories(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/arm64-osx/include)
|
||||||
|
endif()
|
||||||
add_subdirectory(src/)
|
add_subdirectory(src/)
|
||||||
Vendored
+1
-1
Submodule external/vcpkg updated: 791ae5e74b...01be99fec0
@@ -39,8 +39,6 @@ glm::vec3 rand01(glm::uvec3 x)
|
|||||||
return glm::vec3(x) * (1.0f / float(0xffffffffU));
|
return glm::vec3(x) * (1.0f / float(0xffffffffU));
|
||||||
}
|
}
|
||||||
|
|
||||||
thread_local glm::vec3 rnd01;
|
|
||||||
|
|
||||||
void Renderer::render(Camera camera, RenderParameter params)
|
void Renderer::render(Camera camera, RenderParameter params)
|
||||||
{
|
{
|
||||||
for (int samp = 0; samp < params.numSamples; ++samp)
|
for (int samp = 0; samp < params.numSamples; ++samp)
|
||||||
@@ -57,6 +55,7 @@ void Renderer::render(Camera camera, RenderParameter params)
|
|||||||
// #pragma omp parallel for
|
// #pragma omp parallel for
|
||||||
for (int h = 0; h < params.height; ++h)
|
for (int h = 0; h < params.height; ++h)
|
||||||
{
|
{
|
||||||
|
Payload payload;
|
||||||
Ray cam = Ray(camera.position, glm::normalize(camera.target - camera.position));
|
Ray cam = Ray(camera.position, glm::normalize(camera.target - camera.position));
|
||||||
glm::vec3 cx =
|
glm::vec3 cx =
|
||||||
glm::normalize(glm::cross(cam.direction, abs(cam.direction.y) < 0.9 ? glm::vec3(0, 1, 0) : glm::vec3(0, 0, 1))),
|
glm::normalize(glm::cross(cam.direction, abs(cam.direction.y) < 0.9 ? glm::vec3(0, 1, 0) : glm::vec3(0, 0, 1))),
|
||||||
@@ -67,8 +66,9 @@ void Renderer::render(Camera camera, RenderParameter params)
|
|||||||
|
|
||||||
//-- sample sensor
|
//-- sample sensor
|
||||||
glm::uvec2 pix = glm::uvec2(w, h);
|
glm::uvec2 pix = glm::uvec2(w, h);
|
||||||
rnd01 = rand01(glm::uvec3(pix, samp));
|
|
||||||
glm::vec2 rnd2 = 2.0f * glm::vec2(rnd01); // vvv tent filter sample
|
payload.rnd01 = rand01(glm::uvec3(pix, samp));
|
||||||
|
glm::vec2 rnd2 = 2.0f * glm::vec2(payload.rnd01); // vvv tent filter sample
|
||||||
glm::vec2 tent =
|
glm::vec2 tent =
|
||||||
glm::vec2(rnd2.x < 1 ? sqrt(rnd2.x) - 1 : 1 - sqrt(2 - rnd2.x), rnd2.y < 1 ? sqrt(rnd2.y) - 1 : 1 - sqrt(2 - rnd2.y));
|
glm::vec2(rnd2.x < 1 ? sqrt(rnd2.x) - 1 : 1 - sqrt(2 - rnd2.x), rnd2.y < 1 ? sqrt(rnd2.y) - 1 : 1 - sqrt(2 - rnd2.y));
|
||||||
glm::vec2 s =
|
glm::vec2 s =
|
||||||
@@ -84,14 +84,13 @@ void Renderer::render(Camera camera, RenderParameter params)
|
|||||||
glm::vec3 lensX = glm::cross(lensN, glm::vec3(0, 1, 0)); // the exact vector doesnt matter
|
glm::vec3 lensX = glm::cross(lensN, glm::vec3(0, 1, 0)); // the exact vector doesnt matter
|
||||||
glm::vec3 lensY = glm::cross(lensN, lensX);
|
glm::vec3 lensY = glm::cross(lensN, lensX);
|
||||||
|
|
||||||
glm::vec3 lensSample = lensP + rnd01.x * camera.A * lensX + rnd01.y * camera.A * lensY;
|
glm::vec3 lensSample = lensP + payload.rnd01.x * camera.A * lensX + payload.rnd01.y * camera.A * lensY;
|
||||||
|
|
||||||
glm::vec3 focalPoint = cam.origin + (camera.S_O + S_I) * cam.direction;
|
glm::vec3 focalPoint = cam.origin + (camera.S_O + S_I) * cam.direction;
|
||||||
float t = glm::dot(focalPoint - r.origin, lensN) / glm::dot(r.direction, lensN);
|
float t = glm::dot(focalPoint - r.origin, lensN) / glm::dot(r.direction, lensN);
|
||||||
glm::vec3 focus = r.origin + t * r.direction;
|
glm::vec3 focus = r.origin + t * r.direction;
|
||||||
r = Ray(lensSample, normalize(focus - lensSample)); // TODO: Fix lens
|
r = Ray(lensSample, normalize(focus - lensSample)); // TODO: Fix lens
|
||||||
|
|
||||||
Payload payload;
|
|
||||||
bvh.traceRay(r, payload, 1e-4, 1e20);
|
bvh.traceRay(r, payload, 1e-4, 1e20);
|
||||||
|
|
||||||
accumulator[w + h * params.width] += payload.accumulatedRadiance;
|
accumulator[w + h * params.width] += payload.accumulatedRadiance;
|
||||||
|
|||||||
+3
-5
@@ -77,8 +77,6 @@ void Scene::generate()
|
|||||||
hierarchy = std::move(pendingNodes[0]);
|
hierarchy = std::move(pendingNodes[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern glm::vec3 rnd01;
|
|
||||||
|
|
||||||
void Scene::traceRay(Ray ray, Payload& payload, const float tmin, const float tmax) const noexcept
|
void Scene::traceRay(Ray ray, Payload& payload, const float tmin, const float tmax) const noexcept
|
||||||
{
|
{
|
||||||
IntersectionInfo info = generateIntersections(hierarchy, ray, tmin, tmax);
|
IntersectionInfo info = generateIntersections(hierarchy, ray, tmin, tmax);
|
||||||
@@ -94,7 +92,7 @@ void Scene::traceRay(Ray ray, Payload& payload, const float tmin, const float tm
|
|||||||
}
|
}
|
||||||
else if (payload.depth > 5)
|
else if (payload.depth > 5)
|
||||||
{
|
{
|
||||||
if (rnd01.z >= p)
|
if (payload.rnd01.z >= p)
|
||||||
return;
|
return;
|
||||||
else
|
else
|
||||||
payload.accumulatedMaterial /= p;
|
payload.accumulatedMaterial /= p;
|
||||||
@@ -127,8 +125,8 @@ void Scene::traceRay(Ray ray, Payload& payload, const float tmin, const float tm
|
|||||||
// TODO: Next Event Estimation for mesh lights
|
// TODO: Next Event Estimation for mesh lights
|
||||||
|
|
||||||
// indirect lighting
|
// indirect lighting
|
||||||
float r1 = 2 * std::numbers::pi * rnd01.x;
|
float r1 = 2 * std::numbers::pi * payload.rnd01.x;
|
||||||
float r2 = rnd01.y;
|
float r2 = payload.rnd01.y;
|
||||||
float r2s = sqrt(r2);
|
float r2s = sqrt(r2);
|
||||||
glm::vec3 w = info.hitInfo.normalLight;
|
glm::vec3 w = info.hitInfo.normalLight;
|
||||||
glm::vec3 u = glm::normalize(glm::cross(std::abs(w.x) > 0.1 ? glm::vec3(0, 1, 0) : glm::vec3(1, 0, 0), w));
|
glm::vec3 u = glm::normalize(glm::cross(std::abs(w.x) > 0.1 ? glm::vec3(0, 1, 0) : glm::vec3(1, 0, 0), w));
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
struct Payload
|
struct Payload
|
||||||
{
|
{
|
||||||
|
glm::vec3 rnd01;
|
||||||
glm::vec3 accumulatedRadiance = glm::vec3(0);
|
glm::vec3 accumulatedRadiance = glm::vec3(0);
|
||||||
glm::vec3 accumulatedMaterial = glm::vec3(1);
|
glm::vec3 accumulatedMaterial = glm::vec3(1);
|
||||||
uint32_t depth = 0;
|
uint32_t depth = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user