adding more models
This commit is contained in:
@@ -18,6 +18,7 @@ find_package(glfw3 CONFIG REQUIRED)
|
|||||||
find_package(glm CONFIG REQUIRED)
|
find_package(glm CONFIG REQUIRED)
|
||||||
find_package(Ktx CONFIG REQUIRED)
|
find_package(Ktx CONFIG REQUIRED)
|
||||||
find_package(imgui CONFIG REQUIRED)
|
find_package(imgui CONFIG REQUIRED)
|
||||||
|
find_package(OpenMP REQUIRED)
|
||||||
|
|
||||||
add_executable(RayTracer "")
|
add_executable(RayTracer "")
|
||||||
target_include_directories(RayTracer PUBLIC src/)
|
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 glm::glm)
|
||||||
target_link_libraries(RayTracer PUBLIC KTX::ktx)
|
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 ${VCPKG_INSTALLED_DIR}/x64-windows/lib/slang.lib)
|
||||||
|
target_link_libraries(RayTracer PUBLIC OpenMP::OpenMP_CXX)
|
||||||
|
|
||||||
add_subdirectory(src/)
|
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
@@ -13,7 +13,7 @@ struct Batch
|
|||||||
class ThreadPool
|
class ThreadPool
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ThreadPool(uint32_t numWorkers = std::thread::hardware_concurrency());
|
ThreadPool(uint32_t numWorkers = std::thread::hardware_concurrency() - 2);
|
||||||
~ThreadPool();
|
~ThreadPool();
|
||||||
|
|
||||||
// cancel running jobs
|
// cancel running jobs
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Renderer::Renderer()
|
|||||||
.direction = glm::normalize(glm::vec3(-0.4f, -0.2f, -0.6f)),
|
.direction = glm::normalize(glm::vec3(-0.4f, -0.2f, -0.6f)),
|
||||||
.color = glm::vec3(1, 1, 1),
|
.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::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)));
|
glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)));
|
||||||
bvh.generate();
|
bvh.generate();
|
||||||
@@ -48,12 +48,14 @@ void Renderer::render(Camera camera, RenderParameter params)
|
|||||||
{
|
{
|
||||||
if (pendingCancel)
|
if (pendingCancel)
|
||||||
return;
|
return;
|
||||||
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
Batch batch;
|
Batch batch;
|
||||||
for (int w = 0; w < params.width; ++w)
|
for (int w = 0; w < params.width; ++w)
|
||||||
{
|
{
|
||||||
batch.jobs.push_back(
|
batch.jobs.push_back(
|
||||||
[&](int w, int samp) -> Task
|
[&](int w, int samp) -> Task
|
||||||
{
|
{
|
||||||
|
// #pragma omp parallel for
|
||||||
for (int h = 0; h < params.height; ++h)
|
for (int h = 0; h < params.height; ++h)
|
||||||
{
|
{
|
||||||
Ray cam = Ray(camera.position, glm::normalize(camera.direction));
|
Ray cam = Ray(camera.position, glm::normalize(camera.direction));
|
||||||
@@ -99,7 +101,6 @@ void Renderer::render(Camera camera, RenderParameter params)
|
|||||||
co_return;
|
co_return;
|
||||||
}(w, samp));
|
}(w, samp));
|
||||||
}
|
}
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
|
||||||
threadPool.runBatch(std::move(batch));
|
threadPool.runBatch(std::move(batch));
|
||||||
auto end = std::chrono::high_resolution_clock::now();
|
auto end = std::chrono::high_resolution_clock::now();
|
||||||
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << std::endl;
|
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() << std::endl;
|
||||||
|
|||||||
+9
-2
@@ -68,8 +68,10 @@ void Scene::generate()
|
|||||||
PNode newNode = std::make_unique<Node>(AABB::combine(pendingNodes[lhs]->aabb, pendingNodes[rhs]->aabb));
|
PNode newNode = std::make_unique<Node>(AABB::combine(pendingNodes[lhs]->aabb, pendingNodes[rhs]->aabb));
|
||||||
newNode->left = std::move(pendingNodes[lhs]);
|
newNode->left = std::move(pendingNodes[lhs]);
|
||||||
newNode->right = std::move(pendingNodes[rhs]);
|
newNode->right = std::move(pendingNodes[rhs]);
|
||||||
pendingNodes.erase(pendingNodes.begin() + lhs);
|
assert(rhs > lhs);
|
||||||
|
//
|
||||||
pendingNodes.erase(pendingNodes.begin() + rhs);
|
pendingNodes.erase(pendingNodes.begin() + rhs);
|
||||||
|
pendingNodes.erase(pendingNodes.begin() + lhs);
|
||||||
pendingNodes.push_back(std::move(newNode));
|
pendingNodes.push_back(std::move(newNode));
|
||||||
}
|
}
|
||||||
hierarchy = std::move(pendingNodes[0]);
|
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
|
// russian roulette ray termination
|
||||||
float p = std::max(std::max(info.brdf.albedo.x, info.brdf.albedo.y), info.brdf.albedo.z);
|
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)
|
if (rnd01.z >= p)
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ std::vector<PModel> ModelLoader::loadModel(std::string_view filename)
|
|||||||
{
|
{
|
||||||
Assimp::Importer importer;
|
Assimp::Importer importer;
|
||||||
const aiScene* scene = importer.ReadFile(std::string(filename), aiProcess_Triangulate);
|
const aiScene* scene = importer.ReadFile(std::string(filename), aiProcess_Triangulate);
|
||||||
|
std::cout << importer.GetErrorString() << std::endl;
|
||||||
std::vector<PModel> result;
|
std::vector<PModel> result;
|
||||||
for (int m = 0; m < scene->mNumMeshes; ++m)
|
for (int m = 0; m < scene->mNumMeshes; ++m)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user