// ---------------------------------------------------------------------------- // - Open3D: www.open3d.org - // ---------------------------------------------------------------------------- // Copyright (c) 2018-2023 www.open3d.org // SPDX-License-Identifier: MIT // ---------------------------------------------------------------------------- #pragma once #include #include "open3d/core/Tensor.h" #include "open3d/core/hashmap/HashMap.h" #include "open3d/t/geometry/TensorMap.h" namespace open3d { namespace t { namespace geometry { namespace kernel { namespace voxel_grid { using index_t = int; void PointCloudTouch(std::shared_ptr& hashmap, const core::Tensor& points, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc); void DepthTouch(std::shared_ptr& hashmap, const core::Tensor& depth, const core::Tensor& intrinsic, const core::Tensor& extrinsic, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max, index_t stride); void GetVoxelCoordinatesAndFlattenedIndices(const core::Tensor& buf_indices, const core::Tensor& block_keys, core::Tensor& voxel_coords, core::Tensor& flattened_indices, index_t block_resolution, float voxel_size); void Integrate(const core::Tensor& depth, const core::Tensor& color, const core::Tensor& block_indices, const core::Tensor& block_keys, TensorMap& block_value_map, const core::Tensor& depth_intrinsic, const core::Tensor& color_intrinsic, const core::Tensor& extrinsic, index_t resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max); void EstimateRange(const core::Tensor& block_keys, core::Tensor& range_minmax_map, const core::Tensor& intrinsics, const core::Tensor& extrinsics, int h, int w, int down_factor, int64_t block_resolution, float voxel_size, float depth_min, float depth_max, core::Tensor& fragment_buffer); void RayCast(std::shared_ptr& hashmap, const TensorMap& block_value_map, const core::Tensor& range_map, TensorMap& renderings_map, const core::Tensor& intrinsic, const core::Tensor& extrinsic, index_t h, index_t w, index_t block_resolution, float voxel_size, float depth_scale, float depth_min, float depth_max, float weight_threshold, float trunc_voxel_multiplier, int range_map_down_factor); void ExtractPointCloud(const core::Tensor& block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& points, core::Tensor& normals, core::Tensor& colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& valid_size); void ExtractTriangleMesh(const core::Tensor& block_indices, const core::Tensor& inv_block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& vertices, core::Tensor& triangles, core::Tensor& vertex_normals, core::Tensor& vertex_colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& vertex_count); /// CPU void PointCloudTouchCPU(std::shared_ptr& hashmap, const core::Tensor& points, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc); void DepthTouchCPU(std::shared_ptr& hashmap, const core::Tensor& depth, const core::Tensor& intrinsic, const core::Tensor& extrinsic, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max, index_t stride); void GetVoxelCoordinatesAndFlattenedIndicesCPU(const core::Tensor& buf_indices, const core::Tensor& block_keys, core::Tensor& voxel_coords, core::Tensor& flattened_indices, index_t block_resolution, float voxel_size); template void IntegrateCPU(const core::Tensor& depth, const core::Tensor& color, const core::Tensor& block_indices, const core::Tensor& block_keys, TensorMap& block_value_map, const core::Tensor& depth_intrinsic, const core::Tensor& color_intrinsic, const core::Tensor& extrinsic, index_t resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max); void EstimateRangeCPU(const core::Tensor& block_keys, core::Tensor& range_minmax_map, const core::Tensor& intrinsics, const core::Tensor& extrinsics, int h, int w, int down_factor, int64_t block_resolution, float voxel_size, float depth_min, float depth_max, core::Tensor& fragment_buffer); template void RayCastCPU(std::shared_ptr& hashmap, const TensorMap& block_value_map, const core::Tensor& range_map, TensorMap& renderings_map, const core::Tensor& intrinsic, const core::Tensor& extrinsic, index_t h, index_t w, index_t block_resolution, float voxel_size, float depth_scale, float depth_min, float depth_max, float weight_threshold, float trunc_voxel_multiplier, int range_map_down_factor); template void ExtractPointCloudCPU(const core::Tensor& block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& points, core::Tensor& normals, core::Tensor& colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& valid_size); template void ExtractTriangleMeshCPU(const core::Tensor& block_indices, const core::Tensor& inv_block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& vertices, core::Tensor& triangles, core::Tensor& vertex_normals, core::Tensor& vertex_colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& vertex_count); #ifdef BUILD_CUDA_MODULE void PointCloudTouchCUDA(std::shared_ptr& hashmap, const core::Tensor& points, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc); void DepthTouchCUDA(std::shared_ptr& hashmap, const core::Tensor& depth, const core::Tensor& intrinsic, const core::Tensor& extrinsic, core::Tensor& voxel_block_coords, index_t voxel_grid_resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max, index_t stride); void GetVoxelCoordinatesAndFlattenedIndicesCUDA(const core::Tensor& buf_indices, const core::Tensor& block_keys, core::Tensor& voxel_coords, core::Tensor& flattened_indices, index_t block_resolution, float voxel_size); template void IntegrateCUDA(const core::Tensor& depth, const core::Tensor& color, const core::Tensor& block_indices, const core::Tensor& block_keys, TensorMap& block_value_map, const core::Tensor& depth_intrinsic, const core::Tensor& color_intrinsic, const core::Tensor& extrinsic, index_t resolution, float voxel_size, float sdf_trunc, float depth_scale, float depth_max); void EstimateRangeCUDA(const core::Tensor& block_keys, core::Tensor& range_minmax_map, const core::Tensor& intrinsics, const core::Tensor& extrinsics, int h, int w, int down_factor, int64_t block_resolution, float voxel_size, float depth_min, float depth_max, core::Tensor& fragment_buffer); template void RayCastCUDA(std::shared_ptr& hashmap, const TensorMap& block_value_map, const core::Tensor& range_map, TensorMap& renderings_map, const core::Tensor& intrinsic, const core::Tensor& extrinsic, index_t h, index_t w, index_t block_resolution, float voxel_size, float depth_scale, float depth_min, float depth_max, float weight_threshold, float trunc_voxel_multiplier, int range_map_down_factor); template void ExtractPointCloudCUDA(const core::Tensor& block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& points, core::Tensor& normals, core::Tensor& colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& valid_size); template void ExtractTriangleMeshCUDA(const core::Tensor& block_indices, const core::Tensor& inv_block_indices, const core::Tensor& nb_block_indices, const core::Tensor& nb_block_masks, const core::Tensor& block_keys, const TensorMap& block_value_map, core::Tensor& vertices, core::Tensor& triangles, core::Tensor& vertex_normals, core::Tensor& vertex_colors, index_t block_resolution, float voxel_size, float weight_threshold, index_t& vertex_count); #endif } // namespace voxel_grid } // namespace kernel } // namespace geometry } // namespace t } // namespace open3d