adding more models

This commit is contained in:
Dynamitos
2025-01-26 20:59:51 +01:00
parent b58d6db3b6
commit d8b80760ba
10 changed files with 16 additions and 5 deletions
+2
View File
@@ -18,6 +18,7 @@ find_package(glfw3 CONFIG REQUIRED)
find_package(glm CONFIG REQUIRED)
find_package(Ktx CONFIG REQUIRED)
find_package(imgui CONFIG REQUIRED)
find_package(OpenMP REQUIRED)
add_executable(RayTracer "")
target_include_directories(RayTracer PUBLIC src/)
@@ -31,5 +32,6 @@ target_link_libraries(RayTracer PUBLIC GLEW::GLEW)
target_link_libraries(RayTracer PUBLIC glm::glm)
target_link_libraries(RayTracer PUBLIC KTX::ktx)
target_link_libraries(RayTracer PUBLIC ${VCPKG_INSTALLED_DIR}/x64-windows/lib/slang.lib)
target_link_libraries(RayTracer PUBLIC OpenMP::OpenMP_CXX)
add_subdirectory(src/)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1 -1
View File
@@ -13,7 +13,7 @@ struct Batch
class ThreadPool
{
public:
ThreadPool(uint32_t numWorkers = std::thread::hardware_concurrency());
ThreadPool(uint32_t numWorkers = std::thread::hardware_concurrency() - 2);
~ThreadPool();
// cancel running jobs
+3 -2
View File
@@ -10,7 +10,7 @@ Renderer::Renderer()
.direction = glm::normalize(glm::vec3(-0.4f, -0.2f, -0.6f)),
.color = glm::vec3(1, 1, 1),
});
bvh.addModels(ModelLoader::loadModel("../res/models/cube.fbx"),
bvh.addModels(ModelLoader::loadModel("../res/models/box.glb"),
glm::mat4(glm::vec4(1.0f, 0.0f, 0.0f, 0.0f), glm::vec4(0.0f, 1.0f, 0.0f, 0.0f), glm::vec4(0.0f, 0.0f, 1.0f, 0.0f),
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)));
bvh.generate();
@@ -48,12 +48,14 @@ void Renderer::render(Camera camera, RenderParameter params)
{
if (pendingCancel)
return;
auto start = std::chrono::high_resolution_clock::now();
Batch batch;
for (int w = 0; w < params.width; ++w)
{
batch.jobs.push_back(
[&](int w, int samp) -> Task
{
// #pragma omp parallel for
for (int h = 0; h < params.height; ++h)
{
Ray cam = Ray(camera.position, glm::normalize(camera.direction));
@@ -99,7 +101,6 @@ void Renderer::render(Camera camera, RenderParameter params)
co_return;
}(w, samp));
}
auto start = std::chrono::high_resolution_clock::now();
threadPool.runBatch(std::move(batch));
auto end = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << std::endl;
+9 -2
View File
@@ -68,8 +68,10 @@ void Scene::generate()
PNode newNode = std::make_unique<Node>(AABB::combine(pendingNodes[lhs]->aabb, pendingNodes[rhs]->aabb));
newNode->left = std::move(pendingNodes[lhs]);
newNode->right = std::move(pendingNodes[rhs]);
pendingNodes.erase(pendingNodes.begin() + lhs);
assert(rhs > lhs);
//
pendingNodes.erase(pendingNodes.begin() + rhs);
pendingNodes.erase(pendingNodes.begin() + lhs);
pendingNodes.push_back(std::move(newNode));
}
hierarchy = std::move(pendingNodes[0]);
@@ -94,7 +96,12 @@ void Scene::traceRay(Ray ray, Payload& payload, const float tmin, const float tm
{
// russian roulette ray termination
float p = std::max(std::max(info.brdf.albedo.x, info.brdf.albedo.y), info.brdf.albedo.z);
if (payload.depth > 5)
if (payload.depth >= 12)
{
return;
}
else if (payload.depth > 5)
{
if (rnd01.z >= p)
return;
+1
View File
@@ -9,6 +9,7 @@ std::vector<PModel> ModelLoader::loadModel(std::string_view filename)
{
Assimp::Importer importer;
const aiScene* scene = importer.ReadFile(std::string(filename), aiProcess_Triangulate);
std::cout << importer.GetErrorString() << std::endl;
std::vector<PModel> result;
for (int m = 0; m < scene->mNumMeshes; ++m)
{