Skip to content
Snippets Groups Projects
Commit c77c762a authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Fixes #66 virtual compactify

parent b8a6cfc6
No related branches found
No related tags found
No related merge requests found
...@@ -42,7 +42,7 @@ public: ...@@ -42,7 +42,7 @@ public:
return params; return params;
} }
void render(const ftl::voxhash::HashData& hashData, const ftl::voxhash::HashParams& hashParams, const DepthCameraParams& cameraParams, const Eigen::Matrix4f& lastRigidTransform); void render(ftl::voxhash::HashData& hashData, ftl::voxhash::HashParams& hashParams, const DepthCameraParams& cameraParams, const Eigen::Matrix4f& lastRigidTransform);
const RayCastData& getRayCastData(void) { const RayCastData& getRayCastData(void) {
return m_data; return m_data;
...@@ -60,6 +60,8 @@ private: ...@@ -60,6 +60,8 @@ private:
void create(const RayCastParams& params); void create(const RayCastParams& params);
void destroy(void); void destroy(void);
void compactifyHashEntries(ftl::voxhash::HashData& hashData, ftl::voxhash::HashParams& hashParams);
void rayIntervalSplatting(const ftl::voxhash::HashData& hashData, const ftl::voxhash::HashParams& hashParams, const Eigen::Matrix4f& lastRigidTransform); // rasterize void rayIntervalSplatting(const ftl::voxhash::HashData& hashData, const ftl::voxhash::HashParams& hashParams, const Eigen::Matrix4f& lastRigidTransform); // rasterize
RayCastParams m_params; RayCastParams m_params;
......
...@@ -98,7 +98,7 @@ class SceneRep : public ftl::Configurable { ...@@ -98,7 +98,7 @@ class SceneRep : public ftl::Configurable {
alloc(depthCameraData, depthCameraParams, d_bitMask); alloc(depthCameraData, depthCameraParams, d_bitMask);
//generate a linear hash array with only occupied entries //generate a linear hash array with only occupied entries
compactifyHashEntries(depthCameraData); compactifyHashEntries();
//volumetrically integrate the depth data into the depth SDFBlocks //volumetrically integrate the depth data into the depth SDFBlocks
integrateDepthMap(depthCameraData, depthCameraParams); integrateDepthMap(depthCameraData, depthCameraParams);
...@@ -115,7 +115,7 @@ class SceneRep : public ftl::Configurable { ...@@ -115,7 +115,7 @@ class SceneRep : public ftl::Configurable {
void setLastRigidTransformAndCompactify(const Eigen::Matrix4f& lastRigidTransform, const DepthCameraData& depthCameraData) { void setLastRigidTransformAndCompactify(const Eigen::Matrix4f& lastRigidTransform, const DepthCameraData& depthCameraData) {
setLastRigidTransform(lastRigidTransform); setLastRigidTransform(lastRigidTransform);
compactifyHashEntries(depthCameraData); compactifyHashEntries();
} }
...@@ -145,7 +145,7 @@ class SceneRep : public ftl::Configurable { ...@@ -145,7 +145,7 @@ class SceneRep : public ftl::Configurable {
return m_hashData; return m_hashData;
} }
const HashParams& getHashParams() const { HashParams& getHashParams() {
return m_hashParams; return m_hashParams;
} }
...@@ -312,7 +312,7 @@ private: ...@@ -312,7 +312,7 @@ private:
} }
void compactifyHashEntries(const DepthCameraData& depthCameraData) { void compactifyHashEntries() { //const DepthCameraData& depthCameraData) {
//Start Timing //Start Timing
//if(GlobalAppState::get().s_timingsDetailledEnabled) { cutilSafeCall(cudaDeviceSynchronize()); m_timer.start(); } //if(GlobalAppState::get().s_timingsDetailledEnabled) { cutilSafeCall(cudaDeviceSynchronize()); m_timer.start(); }
......
...@@ -36,7 +36,17 @@ void CUDARayCastSDF::destroy(void) ...@@ -36,7 +36,17 @@ void CUDARayCastSDF::destroy(void)
//m_rayIntervalSplatting.OnD3D11DestroyDevice(); //m_rayIntervalSplatting.OnD3D11DestroyDevice();
} }
void CUDARayCastSDF::render(const ftl::voxhash::HashData& hashData, const ftl::voxhash::HashParams& hashParams, const DepthCameraParams& cameraParams, const Eigen::Matrix4f& lastRigidTransform) extern "C" unsigned int compactifyHashAllInOneCUDA(ftl::voxhash::HashData& hashData, const ftl::voxhash::HashParams& hashParams);
void CUDARayCastSDF::compactifyHashEntries(ftl::voxhash::HashData& hashData, ftl::voxhash::HashParams& hashParams) { //const DepthCameraData& depthCameraData) {
hashParams.m_numOccupiedBlocks = compactifyHashAllInOneCUDA(hashData, hashParams); //this version uses atomics over prefix sums, which has a much better performance
std::cout << "Ray blocks = " << hashParams.m_numOccupiedBlocks << std::endl;
hashData.updateParams(hashParams); //make sure numOccupiedBlocks is updated on the GPU
}
void CUDARayCastSDF::render(ftl::voxhash::HashData& hashData, ftl::voxhash::HashParams& hashParams, const DepthCameraParams& cameraParams, const Eigen::Matrix4f& lastRigidTransform)
{ {
updateConstantDepthCameraParams(cameraParams); updateConstantDepthCameraParams(cameraParams);
//rayIntervalSplatting(hashData, hashParams, lastRigidTransform); //rayIntervalSplatting(hashData, hashParams, lastRigidTransform);
...@@ -48,6 +58,8 @@ void CUDARayCastSDF::render(const ftl::voxhash::HashData& hashData, const ftl::v ...@@ -48,6 +58,8 @@ void CUDARayCastSDF::render(const ftl::voxhash::HashData& hashData, const ftl::v
m_params.m_viewMatrixInverse = MatrixConversion::toCUDA(lastRigidTransform); m_params.m_viewMatrixInverse = MatrixConversion::toCUDA(lastRigidTransform);
m_data.updateParams(m_params); m_data.updateParams(m_params);
compactifyHashEntries(hashData, hashParams);
if (hash_render_) nickRenderCUDA(hashData, hashParams, m_data, m_params); if (hash_render_) nickRenderCUDA(hashData, hashParams, m_data, m_params);
else renderCS(hashData, m_data, m_params); else renderCS(hashData, m_data, m_params);
......
...@@ -298,6 +298,8 @@ __global__ void nickRenderKernel(ftl::voxhash::HashData hashData, RayCastData ra ...@@ -298,6 +298,8 @@ __global__ void nickRenderKernel(ftl::voxhash::HashData hashData, RayCastData ra
const float2 screenPosf = DepthCameraData::cameraToKinectScreenFloat(camPos); const float2 screenPosf = DepthCameraData::cameraToKinectScreenFloat(camPos);
const uint2 screenPos = make_uint2(make_int2(screenPosf)); // + make_float2(0.5f, 0.5f) const uint2 screenPos = make_uint2(make_int2(screenPosf)); // + make_float2(0.5f, 0.5f)
if (camPos.z < 0.0f) return;
/*if (screenPos.x < params.m_width && screenPos.y < params.m_height && /*if (screenPos.x < params.m_width && screenPos.y < params.m_height &&
rayCastData.d_depth[(screenPos.y)*params.m_width+screenPos.x] > camPos.z) { rayCastData.d_depth[(screenPos.y)*params.m_width+screenPos.x] > camPos.z) {
rayCastData.d_depth[(screenPos.y)*params.m_width+screenPos.x] = camPos.z; rayCastData.d_depth[(screenPos.y)*params.m_width+screenPos.x] = camPos.z;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment