pymomentum-cpu 0.0.0__cp312-cp312-manylinux_2_39_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymomentum-cpu might be problematic. Click here for more details.

Files changed (555) hide show
  1. include/axel/BoundingBox.h +58 -0
  2. include/axel/Bvh.h +708 -0
  3. include/axel/BvhBase.h +75 -0
  4. include/axel/BvhCommon.h +43 -0
  5. include/axel/BvhEmbree.h +86 -0
  6. include/axel/BvhFactory.h +34 -0
  7. include/axel/Checks.h +21 -0
  8. include/axel/KdTree.h +199 -0
  9. include/axel/Log.h +22 -0
  10. include/axel/MeshToSdf.h +123 -0
  11. include/axel/Profile.h +64 -0
  12. include/axel/Ray.h +45 -0
  13. include/axel/SignedDistanceField.h +237 -0
  14. include/axel/SimdKdTree.h +515 -0
  15. include/axel/TriBvh.h +157 -0
  16. include/axel/TriBvhEmbree.h +57 -0
  17. include/axel/common/Constants.h +27 -0
  18. include/axel/common/Types.h +21 -0
  19. include/axel/common/VectorizationTypes.h +58 -0
  20. include/axel/math/BoundingBoxUtils.h +54 -0
  21. include/axel/math/ContinuousCollisionDetection.h +48 -0
  22. include/axel/math/CoplanarityCheck.h +30 -0
  23. include/axel/math/EdgeEdgeDistance.h +31 -0
  24. include/axel/math/MeshHoleFilling.h +98 -0
  25. include/axel/math/PointTriangleProjection.h +34 -0
  26. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  27. include/axel/math/RayTriangleIntersection.h +36 -0
  28. include/momentum/character/blend_shape.h +91 -0
  29. include/momentum/character/blend_shape_base.h +70 -0
  30. include/momentum/character/blend_shape_skinning.h +96 -0
  31. include/momentum/character/character.h +272 -0
  32. include/momentum/character/character_state.h +108 -0
  33. include/momentum/character/character_utility.h +128 -0
  34. include/momentum/character/collision_geometry.h +80 -0
  35. include/momentum/character/collision_geometry_state.h +130 -0
  36. include/momentum/character/fwd.h +243 -0
  37. include/momentum/character/inverse_parameter_transform.h +58 -0
  38. include/momentum/character/joint.h +82 -0
  39. include/momentum/character/joint_state.h +241 -0
  40. include/momentum/character/linear_skinning.h +139 -0
  41. include/momentum/character/locator.h +82 -0
  42. include/momentum/character/locator_state.h +43 -0
  43. include/momentum/character/marker.h +48 -0
  44. include/momentum/character/parameter_limits.h +144 -0
  45. include/momentum/character/parameter_transform.h +250 -0
  46. include/momentum/character/pose_shape.h +65 -0
  47. include/momentum/character/skeleton.h +85 -0
  48. include/momentum/character/skeleton_state.h +181 -0
  49. include/momentum/character/skeleton_utility.h +38 -0
  50. include/momentum/character/skin_weights.h +67 -0
  51. include/momentum/character/skinned_locator.h +80 -0
  52. include/momentum/character/types.h +202 -0
  53. include/momentum/character_sequence_solver/fwd.h +200 -0
  54. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +62 -0
  55. include/momentum/character_sequence_solver/multipose_solver.h +63 -0
  56. include/momentum/character_sequence_solver/multipose_solver_function.h +80 -0
  57. include/momentum/character_sequence_solver/sequence_error_function.h +95 -0
  58. include/momentum/character_sequence_solver/sequence_solver.h +144 -0
  59. include/momentum/character_sequence_solver/sequence_solver_function.h +126 -0
  60. include/momentum/character_sequence_solver/state_sequence_error_function.h +106 -0
  61. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +125 -0
  62. include/momentum/character_solver/aim_error_function.h +112 -0
  63. include/momentum/character_solver/collision_error_function.h +88 -0
  64. include/momentum/character_solver/collision_error_function_stateless.h +71 -0
  65. include/momentum/character_solver/constraint_error_function-inl.h +321 -0
  66. include/momentum/character_solver/constraint_error_function.h +241 -0
  67. include/momentum/character_solver/distance_error_function.h +74 -0
  68. include/momentum/character_solver/error_function_utils.h +60 -0
  69. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  70. include/momentum/character_solver/fwd.h +924 -0
  71. include/momentum/character_solver/gauss_newton_solver_qr.h +62 -0
  72. include/momentum/character_solver/limit_error_function.h +53 -0
  73. include/momentum/character_solver/model_parameters_error_function.h +61 -0
  74. include/momentum/character_solver/normal_error_function.h +73 -0
  75. include/momentum/character_solver/orientation_error_function.h +74 -0
  76. include/momentum/character_solver/plane_error_function.h +102 -0
  77. include/momentum/character_solver/point_triangle_vertex_error_function.h +140 -0
  78. include/momentum/character_solver/pose_prior_error_function.h +76 -0
  79. include/momentum/character_solver/position_error_function.h +75 -0
  80. include/momentum/character_solver/projection_error_function.h +90 -0
  81. include/momentum/character_solver/simd_collision_error_function.h +95 -0
  82. include/momentum/character_solver/simd_normal_error_function.h +151 -0
  83. include/momentum/character_solver/simd_plane_error_function.h +154 -0
  84. include/momentum/character_solver/simd_position_error_function.h +155 -0
  85. include/momentum/character_solver/skeleton_error_function.h +136 -0
  86. include/momentum/character_solver/skeleton_solver_function.h +72 -0
  87. include/momentum/character_solver/skinned_locator_error_function.h +163 -0
  88. include/momentum/character_solver/skinned_locator_triangle_error_function.h +138 -0
  89. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  90. include/momentum/character_solver/state_error_function.h +90 -0
  91. include/momentum/character_solver/transform_pose.h +80 -0
  92. include/momentum/character_solver/trust_region_qr.h +78 -0
  93. include/momentum/character_solver/vertex_error_function.h +154 -0
  94. include/momentum/character_solver/vertex_projection_error_function.h +118 -0
  95. include/momentum/character_solver/vertex_vertex_distance_error_function.h +143 -0
  96. include/momentum/common/aligned.h +155 -0
  97. include/momentum/common/checks.h +27 -0
  98. include/momentum/common/exception.h +70 -0
  99. include/momentum/common/filesystem.h +20 -0
  100. include/momentum/common/fwd.h +27 -0
  101. include/momentum/common/log.h +173 -0
  102. include/momentum/common/log_channel.h +17 -0
  103. include/momentum/common/memory.h +71 -0
  104. include/momentum/common/profile.h +79 -0
  105. include/momentum/common/progress_bar.h +37 -0
  106. include/momentum/common/string.h +52 -0
  107. include/momentum/diff_ik/ceres_utility.h +73 -0
  108. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  109. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  110. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  111. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +109 -0
  112. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  113. include/momentum/diff_ik/fully_differentiable_position_error_function.h +133 -0
  114. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  115. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  116. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  117. include/momentum/diff_ik/fwd.h +385 -0
  118. include/momentum/diff_ik/union_error_function.h +63 -0
  119. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  120. include/momentum/gui/rerun/logger.h +102 -0
  121. include/momentum/gui/rerun/logging_redirect.h +27 -0
  122. include/momentum/io/character_io.h +56 -0
  123. include/momentum/io/common/gsl_utils.h +50 -0
  124. include/momentum/io/common/stream_utils.h +65 -0
  125. include/momentum/io/fbx/fbx_io.h +109 -0
  126. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  127. include/momentum/io/fbx/openfbx_loader.h +49 -0
  128. include/momentum/io/fbx/polygon_data.h +60 -0
  129. include/momentum/io/gltf/gltf_builder.h +135 -0
  130. include/momentum/io/gltf/gltf_file_format.h +19 -0
  131. include/momentum/io/gltf/gltf_io.h +136 -0
  132. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  133. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  134. include/momentum/io/gltf/utils/json_utils.h +102 -0
  135. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  136. include/momentum/io/marker/c3d_io.h +29 -0
  137. include/momentum/io/marker/conversions.h +57 -0
  138. include/momentum/io/marker/coordinate_system.h +30 -0
  139. include/momentum/io/marker/marker_io.h +54 -0
  140. include/momentum/io/marker/trc_io.h +27 -0
  141. include/momentum/io/motion/mmo_io.h +97 -0
  142. include/momentum/io/shape/blend_shape_io.h +70 -0
  143. include/momentum/io/shape/pose_shape_io.h +21 -0
  144. include/momentum/io/skeleton/locator_io.h +41 -0
  145. include/momentum/io/skeleton/mppca_io.h +26 -0
  146. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  147. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  148. include/momentum/io/skeleton/parameters_io.h +20 -0
  149. include/momentum/io/urdf/urdf_io.h +26 -0
  150. include/momentum/io/usd/usd_io.h +36 -0
  151. include/momentum/marker_tracking/app_utils.h +62 -0
  152. include/momentum/marker_tracking/marker_tracker.h +213 -0
  153. include/momentum/marker_tracking/process_markers.h +58 -0
  154. include/momentum/marker_tracking/tracker_utils.h +90 -0
  155. include/momentum/math/constants.h +82 -0
  156. include/momentum/math/covariance_matrix.h +84 -0
  157. include/momentum/math/fmt_eigen.h +23 -0
  158. include/momentum/math/fwd.h +132 -0
  159. include/momentum/math/generalized_loss.h +61 -0
  160. include/momentum/math/intersection.h +32 -0
  161. include/momentum/math/mesh.h +84 -0
  162. include/momentum/math/mppca.h +67 -0
  163. include/momentum/math/online_householder_qr.h +516 -0
  164. include/momentum/math/random-inl.h +404 -0
  165. include/momentum/math/random.h +310 -0
  166. include/momentum/math/simd_generalized_loss.h +40 -0
  167. include/momentum/math/transform.h +229 -0
  168. include/momentum/math/types.h +461 -0
  169. include/momentum/math/utility.h +251 -0
  170. include/momentum/rasterizer/camera.h +453 -0
  171. include/momentum/rasterizer/fwd.h +102 -0
  172. include/momentum/rasterizer/geometry.h +83 -0
  173. include/momentum/rasterizer/image.h +18 -0
  174. include/momentum/rasterizer/rasterizer.h +583 -0
  175. include/momentum/rasterizer/tensor.h +140 -0
  176. include/momentum/rasterizer/utility.h +268 -0
  177. include/momentum/simd/simd.h +221 -0
  178. include/momentum/solver/fwd.h +131 -0
  179. include/momentum/solver/gauss_newton_solver.h +136 -0
  180. include/momentum/solver/gradient_descent_solver.h +65 -0
  181. include/momentum/solver/solver.h +155 -0
  182. include/momentum/solver/solver_function.h +126 -0
  183. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  184. include/rerun/archetypes/annotation_context.hpp +157 -0
  185. include/rerun/archetypes/arrows2d.hpp +271 -0
  186. include/rerun/archetypes/arrows3d.hpp +257 -0
  187. include/rerun/archetypes/asset3d.hpp +262 -0
  188. include/rerun/archetypes/asset_video.hpp +275 -0
  189. include/rerun/archetypes/bar_chart.hpp +261 -0
  190. include/rerun/archetypes/boxes2d.hpp +293 -0
  191. include/rerun/archetypes/boxes3d.hpp +369 -0
  192. include/rerun/archetypes/capsules3d.hpp +333 -0
  193. include/rerun/archetypes/clear.hpp +180 -0
  194. include/rerun/archetypes/depth_image.hpp +425 -0
  195. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  196. include/rerun/archetypes/encoded_image.hpp +250 -0
  197. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  198. include/rerun/archetypes/geo_points.hpp +177 -0
  199. include/rerun/archetypes/graph_edges.hpp +152 -0
  200. include/rerun/archetypes/graph_nodes.hpp +206 -0
  201. include/rerun/archetypes/image.hpp +434 -0
  202. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  203. include/rerun/archetypes/line_strips2d.hpp +289 -0
  204. include/rerun/archetypes/line_strips3d.hpp +270 -0
  205. include/rerun/archetypes/mesh3d.hpp +387 -0
  206. include/rerun/archetypes/pinhole.hpp +385 -0
  207. include/rerun/archetypes/points2d.hpp +333 -0
  208. include/rerun/archetypes/points3d.hpp +369 -0
  209. include/rerun/archetypes/recording_properties.hpp +132 -0
  210. include/rerun/archetypes/scalar.hpp +170 -0
  211. include/rerun/archetypes/scalars.hpp +153 -0
  212. include/rerun/archetypes/segmentation_image.hpp +305 -0
  213. include/rerun/archetypes/series_line.hpp +274 -0
  214. include/rerun/archetypes/series_lines.hpp +271 -0
  215. include/rerun/archetypes/series_point.hpp +265 -0
  216. include/rerun/archetypes/series_points.hpp +251 -0
  217. include/rerun/archetypes/tensor.hpp +213 -0
  218. include/rerun/archetypes/text_document.hpp +200 -0
  219. include/rerun/archetypes/text_log.hpp +211 -0
  220. include/rerun/archetypes/transform3d.hpp +925 -0
  221. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  222. include/rerun/archetypes/view_coordinates.hpp +393 -0
  223. include/rerun/archetypes.hpp +43 -0
  224. include/rerun/arrow_utils.hpp +32 -0
  225. include/rerun/as_components.hpp +90 -0
  226. include/rerun/blueprint/archetypes/background.hpp +113 -0
  227. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  228. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  229. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  230. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  231. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  232. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  233. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  234. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  235. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  236. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  237. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  238. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  239. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  240. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  241. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  242. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  243. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  244. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  245. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  246. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  247. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  248. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  249. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  250. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  251. include/rerun/blueprint/archetypes.hpp +29 -0
  252. include/rerun/blueprint/components/active_tab.hpp +82 -0
  253. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  254. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  255. include/rerun/blueprint/components/auto_views.hpp +77 -0
  256. include/rerun/blueprint/components/background_kind.hpp +66 -0
  257. include/rerun/blueprint/components/column_share.hpp +78 -0
  258. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  259. include/rerun/blueprint/components/container_kind.hpp +65 -0
  260. include/rerun/blueprint/components/corner2d.hpp +64 -0
  261. include/rerun/blueprint/components/enabled.hpp +77 -0
  262. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  263. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  264. include/rerun/blueprint/components/force_distance.hpp +82 -0
  265. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  266. include/rerun/blueprint/components/force_strength.hpp +82 -0
  267. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  268. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  269. include/rerun/blueprint/components/included_content.hpp +86 -0
  270. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  271. include/rerun/blueprint/components/map_provider.hpp +64 -0
  272. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  273. include/rerun/blueprint/components/panel_state.hpp +61 -0
  274. include/rerun/blueprint/components/query_expression.hpp +89 -0
  275. include/rerun/blueprint/components/root_container.hpp +77 -0
  276. include/rerun/blueprint/components/row_share.hpp +78 -0
  277. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  278. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  279. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  280. include/rerun/blueprint/components/view_class.hpp +76 -0
  281. include/rerun/blueprint/components/view_fit.hpp +61 -0
  282. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  283. include/rerun/blueprint/components/view_origin.hpp +81 -0
  284. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  285. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  286. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  287. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  288. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  289. include/rerun/blueprint/components.hpp +41 -0
  290. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  291. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  292. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  293. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  294. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  295. include/rerun/blueprint/datatypes.hpp +9 -0
  296. include/rerun/c/arrow_c_data_interface.h +111 -0
  297. include/rerun/c/compiler_utils.h +10 -0
  298. include/rerun/c/rerun.h +627 -0
  299. include/rerun/c/sdk_info.h +28 -0
  300. include/rerun/collection.hpp +496 -0
  301. include/rerun/collection_adapter.hpp +43 -0
  302. include/rerun/collection_adapter_builtins.hpp +138 -0
  303. include/rerun/compiler_utils.hpp +61 -0
  304. include/rerun/component_batch.hpp +163 -0
  305. include/rerun/component_column.hpp +111 -0
  306. include/rerun/component_descriptor.hpp +142 -0
  307. include/rerun/component_type.hpp +35 -0
  308. include/rerun/components/aggregation_policy.hpp +76 -0
  309. include/rerun/components/albedo_factor.hpp +74 -0
  310. include/rerun/components/annotation_context.hpp +102 -0
  311. include/rerun/components/axis_length.hpp +74 -0
  312. include/rerun/components/blob.hpp +73 -0
  313. include/rerun/components/class_id.hpp +71 -0
  314. include/rerun/components/clear_is_recursive.hpp +75 -0
  315. include/rerun/components/color.hpp +99 -0
  316. include/rerun/components/colormap.hpp +99 -0
  317. include/rerun/components/depth_meter.hpp +84 -0
  318. include/rerun/components/draw_order.hpp +79 -0
  319. include/rerun/components/entity_path.hpp +83 -0
  320. include/rerun/components/fill_mode.hpp +72 -0
  321. include/rerun/components/fill_ratio.hpp +79 -0
  322. include/rerun/components/gamma_correction.hpp +80 -0
  323. include/rerun/components/geo_line_string.hpp +63 -0
  324. include/rerun/components/graph_edge.hpp +75 -0
  325. include/rerun/components/graph_node.hpp +79 -0
  326. include/rerun/components/graph_type.hpp +57 -0
  327. include/rerun/components/half_size2d.hpp +91 -0
  328. include/rerun/components/half_size3d.hpp +95 -0
  329. include/rerun/components/image_buffer.hpp +86 -0
  330. include/rerun/components/image_format.hpp +84 -0
  331. include/rerun/components/image_plane_distance.hpp +77 -0
  332. include/rerun/components/interactive.hpp +76 -0
  333. include/rerun/components/keypoint_id.hpp +74 -0
  334. include/rerun/components/lat_lon.hpp +89 -0
  335. include/rerun/components/length.hpp +77 -0
  336. include/rerun/components/line_strip2d.hpp +73 -0
  337. include/rerun/components/line_strip3d.hpp +73 -0
  338. include/rerun/components/magnification_filter.hpp +63 -0
  339. include/rerun/components/marker_shape.hpp +82 -0
  340. include/rerun/components/marker_size.hpp +74 -0
  341. include/rerun/components/media_type.hpp +157 -0
  342. include/rerun/components/name.hpp +83 -0
  343. include/rerun/components/opacity.hpp +77 -0
  344. include/rerun/components/pinhole_projection.hpp +94 -0
  345. include/rerun/components/plane3d.hpp +75 -0
  346. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  347. include/rerun/components/pose_rotation_quat.hpp +71 -0
  348. include/rerun/components/pose_scale3d.hpp +102 -0
  349. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  350. include/rerun/components/pose_translation3d.hpp +96 -0
  351. include/rerun/components/position2d.hpp +86 -0
  352. include/rerun/components/position3d.hpp +90 -0
  353. include/rerun/components/radius.hpp +98 -0
  354. include/rerun/components/range1d.hpp +75 -0
  355. include/rerun/components/resolution.hpp +88 -0
  356. include/rerun/components/rotation_axis_angle.hpp +72 -0
  357. include/rerun/components/rotation_quat.hpp +71 -0
  358. include/rerun/components/scalar.hpp +76 -0
  359. include/rerun/components/scale3d.hpp +102 -0
  360. include/rerun/components/series_visible.hpp +76 -0
  361. include/rerun/components/show_labels.hpp +79 -0
  362. include/rerun/components/stroke_width.hpp +74 -0
  363. include/rerun/components/tensor_data.hpp +94 -0
  364. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  365. include/rerun/components/tensor_height_dimension.hpp +71 -0
  366. include/rerun/components/tensor_width_dimension.hpp +71 -0
  367. include/rerun/components/texcoord2d.hpp +101 -0
  368. include/rerun/components/text.hpp +83 -0
  369. include/rerun/components/text_log_level.hpp +110 -0
  370. include/rerun/components/timestamp.hpp +76 -0
  371. include/rerun/components/transform_mat3x3.hpp +92 -0
  372. include/rerun/components/transform_relation.hpp +66 -0
  373. include/rerun/components/translation3d.hpp +96 -0
  374. include/rerun/components/triangle_indices.hpp +85 -0
  375. include/rerun/components/value_range.hpp +78 -0
  376. include/rerun/components/vector2d.hpp +92 -0
  377. include/rerun/components/vector3d.hpp +96 -0
  378. include/rerun/components/video_timestamp.hpp +120 -0
  379. include/rerun/components/view_coordinates.hpp +346 -0
  380. include/rerun/components/visible.hpp +74 -0
  381. include/rerun/components.hpp +77 -0
  382. include/rerun/config.hpp +52 -0
  383. include/rerun/datatypes/angle.hpp +76 -0
  384. include/rerun/datatypes/annotation_info.hpp +76 -0
  385. include/rerun/datatypes/blob.hpp +67 -0
  386. include/rerun/datatypes/bool.hpp +57 -0
  387. include/rerun/datatypes/channel_datatype.hpp +87 -0
  388. include/rerun/datatypes/class_description.hpp +92 -0
  389. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  390. include/rerun/datatypes/class_id.hpp +62 -0
  391. include/rerun/datatypes/color_model.hpp +68 -0
  392. include/rerun/datatypes/dvec2d.hpp +76 -0
  393. include/rerun/datatypes/entity_path.hpp +60 -0
  394. include/rerun/datatypes/float32.hpp +62 -0
  395. include/rerun/datatypes/float64.hpp +62 -0
  396. include/rerun/datatypes/image_format.hpp +107 -0
  397. include/rerun/datatypes/keypoint_id.hpp +63 -0
  398. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  399. include/rerun/datatypes/mat3x3.hpp +105 -0
  400. include/rerun/datatypes/mat4x4.hpp +119 -0
  401. include/rerun/datatypes/pixel_format.hpp +142 -0
  402. include/rerun/datatypes/plane3d.hpp +60 -0
  403. include/rerun/datatypes/quaternion.hpp +110 -0
  404. include/rerun/datatypes/range1d.hpp +59 -0
  405. include/rerun/datatypes/range2d.hpp +55 -0
  406. include/rerun/datatypes/rgba32.hpp +94 -0
  407. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  408. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  409. include/rerun/datatypes/tensor_data.hpp +100 -0
  410. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  411. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  412. include/rerun/datatypes/time_int.hpp +62 -0
  413. include/rerun/datatypes/time_range.hpp +55 -0
  414. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  415. include/rerun/datatypes/uint16.hpp +62 -0
  416. include/rerun/datatypes/uint32.hpp +62 -0
  417. include/rerun/datatypes/uint64.hpp +62 -0
  418. include/rerun/datatypes/utf8.hpp +76 -0
  419. include/rerun/datatypes/utf8pair.hpp +62 -0
  420. include/rerun/datatypes/uuid.hpp +60 -0
  421. include/rerun/datatypes/uvec2d.hpp +76 -0
  422. include/rerun/datatypes/uvec3d.hpp +80 -0
  423. include/rerun/datatypes/uvec4d.hpp +59 -0
  424. include/rerun/datatypes/vec2d.hpp +76 -0
  425. include/rerun/datatypes/vec3d.hpp +80 -0
  426. include/rerun/datatypes/vec4d.hpp +84 -0
  427. include/rerun/datatypes/video_timestamp.hpp +67 -0
  428. include/rerun/datatypes/view_coordinates.hpp +87 -0
  429. include/rerun/datatypes/visible_time_range.hpp +57 -0
  430. include/rerun/datatypes.hpp +51 -0
  431. include/rerun/demo_utils.hpp +75 -0
  432. include/rerun/entity_path.hpp +20 -0
  433. include/rerun/error.hpp +180 -0
  434. include/rerun/half.hpp +10 -0
  435. include/rerun/image_utils.hpp +187 -0
  436. include/rerun/indicator_component.hpp +59 -0
  437. include/rerun/loggable.hpp +54 -0
  438. include/rerun/recording_stream.hpp +960 -0
  439. include/rerun/rerun_sdk_export.hpp +25 -0
  440. include/rerun/result.hpp +86 -0
  441. include/rerun/rotation3d.hpp +33 -0
  442. include/rerun/sdk_info.hpp +20 -0
  443. include/rerun/spawn.hpp +21 -0
  444. include/rerun/spawn_options.hpp +57 -0
  445. include/rerun/string_utils.hpp +16 -0
  446. include/rerun/third_party/cxxopts.hpp +2198 -0
  447. include/rerun/time_column.hpp +288 -0
  448. include/rerun/timeline.hpp +38 -0
  449. include/rerun/type_traits.hpp +40 -0
  450. include/rerun.hpp +86 -0
  451. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  452. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  453. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  454. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  455. lib/libarrow.a +0 -0
  456. lib/libarrow_bundled_dependencies.a +0 -0
  457. lib/librerun_c__linux_x64.a +0 -0
  458. lib/librerun_sdk.a +0 -0
  459. lib64/cmake/axel/axel-config.cmake +45 -0
  460. lib64/cmake/axel/axelTargets-release.cmake +19 -0
  461. lib64/cmake/axel/axelTargets.cmake +108 -0
  462. lib64/cmake/momentum/Findre2.cmake +52 -0
  463. lib64/cmake/momentum/momentum-config.cmake +67 -0
  464. lib64/cmake/momentum/momentumTargets-release.cmake +269 -0
  465. lib64/cmake/momentum/momentumTargets.cmake +445 -0
  466. lib64/libaxel.a +0 -0
  467. lib64/libmomentum_app_utils.a +0 -0
  468. lib64/libmomentum_character.a +0 -0
  469. lib64/libmomentum_character_sequence_solver.a +0 -0
  470. lib64/libmomentum_character_solver.a +0 -0
  471. lib64/libmomentum_common.a +0 -0
  472. lib64/libmomentum_diff_ik.a +0 -0
  473. lib64/libmomentum_io.a +0 -0
  474. lib64/libmomentum_io_common.a +0 -0
  475. lib64/libmomentum_io_fbx.a +0 -0
  476. lib64/libmomentum_io_gltf.a +0 -0
  477. lib64/libmomentum_io_legacy_json.a +0 -0
  478. lib64/libmomentum_io_marker.a +0 -0
  479. lib64/libmomentum_io_motion.a +0 -0
  480. lib64/libmomentum_io_shape.a +0 -0
  481. lib64/libmomentum_io_skeleton.a +0 -0
  482. lib64/libmomentum_io_urdf.a +0 -0
  483. lib64/libmomentum_marker_tracker.a +0 -0
  484. lib64/libmomentum_math.a +0 -0
  485. lib64/libmomentum_online_qr.a +0 -0
  486. lib64/libmomentum_process_markers.a +0 -0
  487. lib64/libmomentum_rasterizer.a +0 -0
  488. lib64/libmomentum_rerun.a +0 -0
  489. lib64/libmomentum_simd_constraints.a +0 -0
  490. lib64/libmomentum_simd_generalized_loss.a +0 -0
  491. lib64/libmomentum_skeleton.a +0 -0
  492. lib64/libmomentum_solver.a +0 -0
  493. pymomentum/axel.cpython-312-x86_64-linux-gnu.so +0 -0
  494. pymomentum/backend/__init__.py +16 -0
  495. pymomentum/backend/skel_state_backend.py +614 -0
  496. pymomentum/backend/trs_backend.py +871 -0
  497. pymomentum/backend/utils.py +224 -0
  498. pymomentum/geometry.cpython-312-x86_64-linux-gnu.so +0 -0
  499. pymomentum/marker_tracking.cpython-312-x86_64-linux-gnu.so +0 -0
  500. pymomentum/quaternion.py +740 -0
  501. pymomentum/renderer.cpython-312-x86_64-linux-gnu.so +0 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-x86_64-linux-gnu.so +0 -0
  504. pymomentum/solver2.cpython-312-x86_64-linux-gnu.so +0 -0
  505. pymomentum/torch/character.py +809 -0
  506. pymomentum/torch/parameter_limits.py +494 -0
  507. pymomentum/torch/utility.py +20 -0
  508. pymomentum/trs.py +535 -0
  509. pymomentum_cpu-0.0.0.dist-info/METADATA +209 -0
  510. pymomentum_cpu-0.0.0.dist-info/RECORD +555 -0
  511. pymomentum_cpu-0.0.0.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.0.0.dist-info/licenses/LICENSE +21 -0
  513. pymomentum_cpu.libs/libabsl_base-86f3b38c.so.2505.0.0 +0 -0
  514. pymomentum_cpu.libs/libabsl_city-31b65ca2.so.2505.0.0 +0 -0
  515. pymomentum_cpu.libs/libabsl_debugging_internal-38680253.so.2505.0.0 +0 -0
  516. pymomentum_cpu.libs/libabsl_decode_rust_punycode-750652c3.so.2505.0.0 +0 -0
  517. pymomentum_cpu.libs/libabsl_demangle_internal-9a0351a3.so.2505.0.0 +0 -0
  518. pymomentum_cpu.libs/libabsl_demangle_rust-71629506.so.2505.0.0 +0 -0
  519. pymomentum_cpu.libs/libabsl_examine_stack-57661ecd.so.2505.0.0 +0 -0
  520. pymomentum_cpu.libs/libabsl_hash-8c523b7e.so.2505.0.0 +0 -0
  521. pymomentum_cpu.libs/libabsl_hashtablez_sampler-b5c3e343.so.2505.0.0 +0 -0
  522. pymomentum_cpu.libs/libabsl_int128-295bfed5.so.2505.0.0 +0 -0
  523. pymomentum_cpu.libs/libabsl_kernel_timeout_internal-29296ac1.so.2505.0.0 +0 -0
  524. pymomentum_cpu.libs/libabsl_log_globals-6cfa8af5.so.2505.0.0 +0 -0
  525. pymomentum_cpu.libs/libabsl_log_internal_format-a5c79460.so.2505.0.0 +0 -0
  526. pymomentum_cpu.libs/libabsl_log_internal_globals-481e9a7c.so.2505.0.0 +0 -0
  527. pymomentum_cpu.libs/libabsl_log_internal_log_sink_set-ac08f942.so.2505.0.0 +0 -0
  528. pymomentum_cpu.libs/libabsl_log_internal_message-7dfe150a.so.2505.0.0 +0 -0
  529. pymomentum_cpu.libs/libabsl_log_internal_nullguard-883adc72.so.2505.0.0 +0 -0
  530. pymomentum_cpu.libs/libabsl_log_internal_proto-a5da8c75.so.2505.0.0 +0 -0
  531. pymomentum_cpu.libs/libabsl_log_internal_structured_proto-e601fd9b.so.2505.0.0 +0 -0
  532. pymomentum_cpu.libs/libabsl_log_sink-894261b2.so.2505.0.0 +0 -0
  533. pymomentum_cpu.libs/libabsl_low_level_hash-a3284638.so.2505.0.0 +0 -0
  534. pymomentum_cpu.libs/libabsl_malloc_internal-814569de.so.2505.0.0 +0 -0
  535. pymomentum_cpu.libs/libabsl_raw_hash_set-922d64ad.so.2505.0.0 +0 -0
  536. pymomentum_cpu.libs/libabsl_raw_logging_internal-477f78ec.so.2505.0.0 +0 -0
  537. pymomentum_cpu.libs/libabsl_spinlock_wait-8b85a473.so.2505.0.0 +0 -0
  538. pymomentum_cpu.libs/libabsl_stacktrace-7369e71d.so.2505.0.0 +0 -0
  539. pymomentum_cpu.libs/libabsl_str_format_internal-98de729d.so.2505.0.0 +0 -0
  540. pymomentum_cpu.libs/libabsl_strerror-39a52998.so.2505.0.0 +0 -0
  541. pymomentum_cpu.libs/libabsl_strings-a57d5127.so.2505.0.0 +0 -0
  542. pymomentum_cpu.libs/libabsl_strings_internal-ed8c7c0d.so.2505.0.0 +0 -0
  543. pymomentum_cpu.libs/libabsl_symbolize-eba17dd1.so.2505.0.0 +0 -0
  544. pymomentum_cpu.libs/libabsl_synchronization-2f8cf326.so.2505.0.0 +0 -0
  545. pymomentum_cpu.libs/libabsl_time-066c0dde.so.2505.0.0 +0 -0
  546. pymomentum_cpu.libs/libabsl_time_zone-72867365.so.2505.0.0 +0 -0
  547. pymomentum_cpu.libs/libabsl_tracing_internal-021e37ee.so.2505.0.0 +0 -0
  548. pymomentum_cpu.libs/libabsl_utf8_for_code_point-de2a4d4a.so.2505.0.0 +0 -0
  549. pymomentum_cpu.libs/libconsole_bridge-f26e11cc.so.1.0 +0 -0
  550. pymomentum_cpu.libs/libdeflate-577b71e3.so.0 +0 -0
  551. pymomentum_cpu.libs/libdispenso-67ac1721.so.1.4.0 +0 -0
  552. pymomentum_cpu.libs/libezc3d-4a95ab2c.so +0 -0
  553. pymomentum_cpu.libs/libre2-985fb83c.so.11 +0 -0
  554. pymomentum_cpu.libs/libtinyxml2-8d10763c.so.11.0.0 +0 -0
  555. pymomentum_cpu.libs/liburdfdom_model-7b26ae88.so.4.0 +0 -0
@@ -0,0 +1,515 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <memory>
11
+ #include <vector>
12
+
13
+ #include <Eigen/Core>
14
+ #include <Eigen/Geometry>
15
+ #include <gsl/span>
16
+
17
+ #ifdef AXEL_ENABLE_AVX
18
+ #include <immintrin.h>
19
+ #include <xmmintrin.h>
20
+ #endif
21
+
22
+ #include <axel/Checks.h>
23
+
24
+ // TODO: Keeping this temporarily
25
+ #define AXEL_DEFINE_POINTERS(x) \
26
+ using x##_p = ::std::shared_ptr<x>; \
27
+ using x##_u = ::std::unique_ptr<x>; \
28
+ using x##_w = ::std::weak_ptr<x>; \
29
+ using x##_const_p = ::std::shared_ptr<const x>; \
30
+ using x##_const_u = ::std::unique_ptr<const x>; \
31
+ using x##_const_w = ::std::weak_ptr<const x>;
32
+
33
+ namespace axel {
34
+
35
+ /// A k-d tree is a spatial data structure that supports fast nearest-points lookup.
36
+ ///
37
+ /// For details, see: http://en.wikipedia.org/wiki/k-d_tree
38
+ ///
39
+ /// This particular k-d tree is a bit unusual, in that it only stores points at the leaf nodes. This
40
+ /// allows some amount of speedup because we can then blast through the points 10 at a time or so,
41
+ /// exploiting cache locality.
42
+ template <int32_t nDim>
43
+ class SimdKdTreef {
44
+ public:
45
+ static constexpr int32_t kDim = nDim;
46
+ static constexpr int32_t kColorDimensions = 4;
47
+
48
+ /// We will use this value for storing the "too far away" distance instead of FLT_MAX because we
49
+ /// can square it and still remain well within the range of acceptable values.
50
+ static constexpr float kFarValueFloat = 1e+10f;
51
+
52
+ using SizeType = int32_t; // We use signed integer indices for easier compatibility with SSE
53
+ using Scalar = float;
54
+ using Vec = Eigen::Matrix<Scalar, kDim, 1>;
55
+ using Col = Eigen::Matrix<Scalar, kColorDimensions, 1>;
56
+ using Box = Eigen::AlignedBox<Scalar, kDim>;
57
+
58
+ /// Limiting the total number of nodes to 2^20 or 1,048,576 to prevent infinite recursion.
59
+ static constexpr SizeType kMaxDepth = 20;
60
+
61
+ /// Constructs k-d tree from points, normals, and colors.
62
+ explicit SimdKdTreef(
63
+ gsl::span<const Vec> points = gsl::span<Vec>{},
64
+ gsl::span<const Vec> normals = gsl::span<Vec>{},
65
+ gsl::span<const Col> colors = gsl::span<Col>{});
66
+
67
+ /// Destructor.
68
+ virtual ~SimdKdTreef();
69
+
70
+ /// Disables copy constructor.
71
+ SimdKdTreef(const SimdKdTreef&) = delete;
72
+
73
+ /// Disables assignment operator.
74
+ SimdKdTreef& operator=(const SimdKdTreef&) = delete;
75
+
76
+ /// Returns (1) whether a point was found, (2) the index of the point, and (3) the squared
77
+ /// distance.
78
+ [[nodiscard]] virtual std::tuple<bool, SizeType, Scalar> closestPoint(
79
+ const Vec& queryPoint,
80
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max()) const;
81
+ // TODO: Consider making the result as a structure for better readability
82
+
83
+ /// This version of closest points also validates that the normals agree; that is, it won't return
84
+ /// a closest point whose normal dotted with the passed-in normal is negative.
85
+ [[nodiscard]] virtual std::tuple<bool, SizeType, Scalar> closestPoint(
86
+ const Vec& queryPoint,
87
+ const Vec& queryNormal,
88
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max(),
89
+ Scalar maxNormalDot = 0.0f) const;
90
+
91
+ /// This version of closest points also validates that the normals and colors agree; that is, it
92
+ /// won't return a closest point whose normal dotted with the passed-in normal is negative.
93
+ [[nodiscard]] virtual std::tuple<bool, SizeType, Scalar> closestPoint(
94
+ const Vec& queryPoint,
95
+ const Vec& queryNormal,
96
+ const Col& color,
97
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max(),
98
+ Scalar maxNormalDot = 0.0f,
99
+ Scalar maxColorSqrDist = 0.5f) const;
100
+
101
+ /// Allows the user to mark out which points are considered 'acceptable.'
102
+ ///
103
+ /// The passed-in function should map from a __m256i (the indices) to an __m256i which uses the
104
+ /// standard AVX convention (all ones in the appropriate spots). It also needs to be tolerant to
105
+ /// possible INT_MAX values since we may not have actual indices for all 4 points.
106
+ ///
107
+ /// Here's an example acceptance function that looks for odd-valued points:
108
+ /// @code
109
+ /// closestPointWithAcceptance(queryPoint, maxSqrDist, [](SizeType index) -> bool { return !(index
110
+ /// % 2); });
111
+ /// @endcode
112
+ [[nodiscard]] std::tuple<bool, SizeType, Scalar> closestPointWithAcceptance(
113
+ const Vec& queryPoint,
114
+ Scalar maxSqrDist,
115
+ const std::function<bool(SizeType pointIndex)>& acceptanceFunction) const;
116
+ // TODO: Consider take a SIMD version of acceptance function. Currently, non-vectorized function
117
+ // is used.
118
+
119
+ /// Queries a sphere against the tree.
120
+ virtual void pointsInNSphere(const Vec& center, Scalar radius, std::vector<SizeType>& points)
121
+ const;
122
+
123
+ /// Returns whether this tree has no points.
124
+ [[nodiscard]] bool empty() const;
125
+
126
+ /// Returns the most outter bounding box.
127
+ [[nodiscard]] const Box& boundingBox() const;
128
+
129
+ /// Returns the number of points.
130
+ [[nodiscard]] SizeType size() const;
131
+
132
+ /// Returns the depth of the tree.
133
+ [[nodiscard]] SizeType depth() const;
134
+
135
+ /// Checks that the KD tree is valid. This could be arbitrarily slow, so it should only be used
136
+ /// for debugging.
137
+ void validate() const;
138
+
139
+ protected:
140
+ /// Returns the SIMD packet size (e.g., 8 for AVX)
141
+ [[nodiscard]] virtual size_t getSimdPacketSize() const;
142
+
143
+ /// Internal implementation for validate()
144
+ virtual void validateInternal(SizeType node, const Box& box, std::vector<char>& touched) const;
145
+
146
+ /// Builds a tree; split the range [start, end) in two, generating a new Node at the split.
147
+ /// Returns the index of that new node.
148
+ SizeType split(
149
+ std::vector<std::pair<SizeType, Vec>>& points,
150
+ gsl::span<const Vec> normals,
151
+ gsl::span<const Col> colors,
152
+ SizeType start,
153
+ SizeType end,
154
+ SizeType depth);
155
+
156
+ /// Creates a leaf node when the number of points is equal to or greater than 8 SIMD blocks.
157
+ virtual SizeType createLeafNode(
158
+ std::vector<std::pair<SizeType, Vec>>& points,
159
+ gsl::span<const Vec> normals,
160
+ gsl::span<const Col> colors,
161
+ SizeType start,
162
+ SizeType end,
163
+ const Box& box);
164
+
165
+ /// Each node in the tree splits the space in half
166
+ struct Node {
167
+ /// Constructs as an internal node
168
+ Node(
169
+ Scalar splitVal_in,
170
+ unsigned char splitDim_in,
171
+ SizeType leftChild_in,
172
+ SizeType rightChild_in,
173
+ const Box& box_in);
174
+
175
+ /// Constructs as a leaf node
176
+ Node(SizeType leftChild_in, SizeType rightChild_in, const Box& box_in);
177
+
178
+ /// Returns whether this is a leaf node.
179
+ [[nodiscard]] bool isLeaf() const;
180
+
181
+ /// For internal nodes, the split value. For leaf nodes, std::numeric_limits<Scalar>::max().
182
+ const Scalar splitVal;
183
+
184
+ /// For internal nodes, the index to the left child node. For leaf nodes,
185
+ /// std::numeric_limits<unsigned char>::max().
186
+ const unsigned char splitDim;
187
+
188
+ union {
189
+ /// For internal nodes, the index to the left child node.
190
+ SizeType leftChild;
191
+
192
+ /// For leaf nodes, the block start of the list of points.
193
+ const SizeType pointBlocksStart;
194
+ };
195
+
196
+ union {
197
+ /// For internal nodes, the index to the right child node.
198
+ SizeType rightChild;
199
+
200
+ /// For leaf nodes, the block end of the list of points.
201
+ const SizeType pointBlocksEnd;
202
+ };
203
+
204
+ /// Inner bounding box
205
+ const Box box;
206
+ };
207
+
208
+ /// The axis-aligned bounding box of the whole tree.
209
+ Box bbox_;
210
+
211
+ /// The number of points in the tree.
212
+ SizeType numPoints_;
213
+
214
+ /// The list of nodes in the tree.
215
+ std::vector<Node> nodes_;
216
+
217
+ /// The node index to the root node.
218
+ SizeType root_;
219
+
220
+ /// The largest depth of the tree.
221
+ SizeType depth_;
222
+
223
+ /// Used purely for debugging, to make sure we never use a normal-less k-d tree to check against
224
+ /// normals.
225
+ bool hasNormals_;
226
+
227
+ private:
228
+ /// Initializes the k-d tree. This function is intended to be only called by the constructor.
229
+ void init(
230
+ gsl::span<const Vec> points_in,
231
+ gsl::span<const Vec> normals_in,
232
+ gsl::span<const Col> colors_in);
233
+
234
+ /// PIMPL idiom to hide the SIMD specific implementation.
235
+ struct Implementation;
236
+
237
+ /// PIMPL instance for the SIMD implementation.
238
+ std::unique_ptr<Implementation> impl_;
239
+ };
240
+
241
+ using SimdKdTree2f = SimdKdTreef<2>;
242
+ using SimdKdTree3f = SimdKdTreef<3>;
243
+
244
+ AXEL_DEFINE_POINTERS(SimdKdTree2f);
245
+ AXEL_DEFINE_POINTERS(SimdKdTree3f);
246
+
247
+ extern template class SimdKdTreef<2>;
248
+ extern template class SimdKdTreef<3>;
249
+
250
+ #ifdef AXEL_ENABLE_AVX
251
+
252
+ template <int32_t nDim>
253
+ class SimdKdTreeAvxf : public SimdKdTreef<nDim> {
254
+ public:
255
+ using Base = SimdKdTreef<nDim>;
256
+
257
+ using Base::kColorDimensions;
258
+ using Base::kFarValueFloat;
259
+
260
+ using Box = typename Base::Box;
261
+ using Col = typename Base::Col;
262
+ using Scalar = typename Base::Scalar;
263
+ using SizeType = typename Base::SizeType;
264
+ using Vec = typename Base::Vec;
265
+
266
+ static constexpr SizeType kMaxDepth = Base::kMaxDepth;
267
+
268
+ /// Constructs k-d tree from points, normals, and colors
269
+ explicit SimdKdTreeAvxf(
270
+ gsl::span<const Vec> points = gsl::span<Vec>{},
271
+ gsl::span<const Vec> normals = gsl::span<Vec>{},
272
+ gsl::span<const Col> colors = gsl::span<Col>{});
273
+
274
+ /// Destructor
275
+ ~SimdKdTreeAvxf() override;
276
+
277
+ /// Disables copy constructor.
278
+ SimdKdTreeAvxf(const SimdKdTreeAvxf&) = delete;
279
+
280
+ /// Disables assignment operator.
281
+ SimdKdTreeAvxf& operator=(const SimdKdTreeAvxf&) = delete;
282
+
283
+ // Documentation inherited
284
+ [[nodiscard]] std::tuple<bool, SizeType, Scalar> closestPoint(
285
+ const Vec& queryPoint,
286
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max()) const override;
287
+
288
+ // Documentation inherited
289
+ [[nodiscard]] std::tuple<bool, SizeType, Scalar> closestPoint(
290
+ const Vec& queryPoint,
291
+ const Vec& normal,
292
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max(),
293
+ Scalar maxNormalDot = 0.0f) const override;
294
+
295
+ // Documentation inherited
296
+ [[nodiscard]] std::tuple<bool, SizeType, Scalar> closestPoint(
297
+ const Vec& queryPoint,
298
+ const Vec& normal,
299
+ const Col& color,
300
+ Scalar maxSqrDist = std::numeric_limits<Scalar>::max(),
301
+ Scalar maxNormalDot = 0.0f,
302
+ Scalar maxColorSqrDist = 0.5f) const override;
303
+
304
+ /// Allows the user to mark out which points are considered 'acceptable.'
305
+ ///
306
+ /// The passed-in function should map from a __m256i (the indices) to an __m256i which uses the
307
+ /// standard AVX convention (all ones in the appropriate spots). It also needs to be tolerant to
308
+ /// possible INT_MAX values since we may not have actual indices for all 4 points.
309
+ ///
310
+ /// Here's an example acceptance function that looks for odd-valued points:
311
+ ///
312
+ /// @code
313
+ /// [] (const __m256i indices_in) -> __m256i
314
+ /// {
315
+ /// const int all_zeros = 0;
316
+ /// const int all_ones = ~all_zeros;
317
+ ///
318
+ /// alignas(AVX_ALIGNMENT) int32_t indices[8];
319
+ /// _mm256_store_si256 ((__m256i*) indices, indices_in);
320
+ ///
321
+ /// alignas(AVX_ALIGNMENT) int32_t result[8];
322
+ /// for (int32_t j = 0; j < 8; ++j)
323
+ /// {
324
+ /// if (indices[j] % 2 == 0)
325
+ /// result[j] = all_ones;
326
+ /// else
327
+ /// result[j] = all_zeros;
328
+ /// }
329
+ ///
330
+ /// return _mm256_load_si256 ((const __m256i*) result);
331
+ /// } );
332
+ /// @endcode
333
+ template <typename AcceptanceFunction>
334
+ [[nodiscard]] std::tuple<bool, SizeType, Scalar> closestPointWithAcceptance(
335
+ const Vec& queryPoint,
336
+ Scalar maxSqrDist,
337
+ const AcceptanceFunction& acceptanceFunction) const;
338
+
339
+ // Documentation inherited
340
+ void pointsInNSphere(const Vec& center, Scalar radius, std::vector<SizeType>& points)
341
+ const override;
342
+
343
+ protected:
344
+ // Documentation inherited
345
+ [[nodiscard]] size_t getSimdPacketSize() const override;
346
+
347
+ // Documentation inherited
348
+ void validateInternal(SizeType node, const Box& box, std::vector<char>& touched) const override;
349
+
350
+ // Documentation inherited
351
+ SizeType createLeafNode(
352
+ std::vector<std::pair<SizeType, Vec>>& points,
353
+ gsl::span<const Vec> normals,
354
+ gsl::span<const Col> colors,
355
+ SizeType start,
356
+ SizeType end,
357
+ const Box& box) override;
358
+
359
+ private:
360
+ using Node = typename Base::Node;
361
+
362
+ static constexpr int32_t AVX_FLOAT_BLOCK_SIZE = 8;
363
+ static constexpr int32_t AVX_ALIGNMENT = AVX_FLOAT_BLOCK_SIZE * 4;
364
+
365
+ /// In order to enable the use of AVX intrinsics, we will store the points in blocks of 8. Empty
366
+ /// point values will get FAR_VALUE for their location (so we can safely use it in difference and
367
+ /// squared norm operations) and INT_MAX for their index.
368
+ struct PointBlock {
369
+ __m256 values[nDim]; // [ {x1 x2 x3 x4 x5 x6 x7 x8}, {y1 y2 y3 y4 y5 y6 y7 y8}, ... ]
370
+ __m256i indices; // [i1 i2 i3 i4 i5 i6 i7 i8]
371
+ };
372
+
373
+ struct NormalBlock {
374
+ __m256 values[nDim];
375
+ };
376
+
377
+ struct ColorBlock {
378
+ __m256 values[4];
379
+ };
380
+
381
+ /// Initializes the k-d tree. This function is intended to be only called by the constructor.
382
+ void init(
383
+ gsl::span<const Vec> points_in,
384
+ gsl::span<const Vec> normals_in,
385
+ gsl::span<const Col> colors_in);
386
+
387
+ std::vector<PointBlock> pointBlocks_;
388
+ std::vector<NormalBlock> normalBlocks_;
389
+ std::vector<ColorBlock> colorBlocks_;
390
+ };
391
+
392
+ template <int32_t nDim>
393
+ template <typename AcceptanceFunction>
394
+ std::tuple<bool, typename SimdKdTreeAvxf<nDim>::SizeType, typename SimdKdTreeAvxf<nDim>::Scalar>
395
+ SimdKdTreeAvxf<nDim>::closestPointWithAcceptance(
396
+ const Vec& queryPoint,
397
+ Scalar maxSqrDist,
398
+ const AcceptanceFunction& acceptanceFunction) const {
399
+ Scalar bestSqrDist = maxSqrDist;
400
+ SizeType bestPoint = std::numeric_limits<SizeType>::max();
401
+ bool foundPoint = false;
402
+
403
+ if (this->empty()) {
404
+ return std::make_tuple(foundPoint, bestPoint, bestSqrDist);
405
+ }
406
+
407
+ // Use an explicit stack for speed:
408
+ std::array<SizeType, kMaxDepth + 1> nodeStack;
409
+
410
+ // Start with just the root on the stack:
411
+ SizeType stackSize = 1;
412
+ nodeStack[0] = this->root_;
413
+
414
+ __m256 query_p[nDim];
415
+ for (SizeType iDim = 0; iDim < nDim; ++iDim) {
416
+ query_p[iDim] = _mm256_broadcast_ss(&queryPoint(iDim));
417
+ }
418
+
419
+ while (stackSize != 0) {
420
+ // Pop the top of the stack:
421
+ const SizeType cur = nodeStack[--stackSize];
422
+ const auto& curNode = this->nodes_[cur];
423
+
424
+ // check again if the current best distance is smaller than the distance to the current node
425
+ // split. if so we can skip the node
426
+ if (curNode.box.squaredExteriorDistance(queryPoint) > bestSqrDist) {
427
+ continue;
428
+ }
429
+
430
+ if (curNode.isLeaf()) {
431
+ const SizeType pointBlocksStart = curNode.pointBlocksStart;
432
+ const SizeType pointBlocksEnd = curNode.pointBlocksEnd;
433
+ XR_CHECK(pointBlocksEnd > pointBlocksStart);
434
+
435
+ __m256 bestSqrDistBlock = _mm256_broadcast_ss(&bestSqrDist);
436
+ __m256i bestSqrDistIndicesBlock = _mm256_set1_epi32(INT_MAX);
437
+
438
+ for (SizeType iBlock = pointBlocksStart; iBlock != pointBlocksEnd; ++iBlock) {
439
+ const PointBlock& pointBlock = pointBlocks_[iBlock];
440
+ __m256 sqrDist = _mm256_setzero_ps();
441
+ for (SizeType iDim = 0; iDim < nDim; ++iDim) {
442
+ const __m256 dimDiff = _mm256_sub_ps(pointBlock.values[iDim], query_p[iDim]);
443
+ sqrDist = _mm256_add_ps(sqrDist, _mm256_mul_ps(dimDiff, dimDiff));
444
+ }
445
+
446
+ const __m256 lessThanMask = _mm256_cmp_ps(sqrDist, bestSqrDistBlock, _CMP_LT_OS);
447
+ const __m256 userMask = _mm256_castsi256_ps(acceptanceFunction(pointBlock.indices));
448
+ const __m256 finalMask = _mm256_and_ps(lessThanMask, userMask);
449
+ bestSqrDistBlock = _mm256_or_ps(
450
+ _mm256_and_ps(finalMask, sqrDist), _mm256_andnot_ps(finalMask, bestSqrDistBlock));
451
+
452
+ const __m256i finalMaskInt = _mm256_castps_si256(finalMask);
453
+ bestSqrDistIndicesBlock = _mm256_or_si256(
454
+ _mm256_and_si256(finalMaskInt, pointBlock.indices),
455
+ _mm256_andnot_si256(finalMaskInt, bestSqrDistIndicesBlock));
456
+ }
457
+
458
+ alignas(AVX_ALIGNMENT) float bestSqrDist_extract[AVX_FLOAT_BLOCK_SIZE];
459
+ _mm256_store_ps(bestSqrDist_extract, bestSqrDistBlock);
460
+
461
+ alignas(AVX_ALIGNMENT) SizeType bestSqrDistIndices_extract[AVX_FLOAT_BLOCK_SIZE];
462
+ _mm256_store_si256((__m256i*)bestSqrDistIndices_extract, bestSqrDistIndicesBlock);
463
+
464
+ for (SizeType k = 0; k < AVX_FLOAT_BLOCK_SIZE; ++k) {
465
+ if (bestSqrDist_extract[k] < bestSqrDist) {
466
+ XR_CHECK(bestSqrDistIndices_extract[k] != INT_MAX);
467
+ XR_CHECK(bestSqrDistIndices_extract[k] < this->numPoints_);
468
+ foundPoint = true;
469
+ bestPoint = bestSqrDistIndices_extract[k];
470
+ bestSqrDist = bestSqrDist_extract[k];
471
+ }
472
+ }
473
+ } else {
474
+ // We need to descend on
475
+ const unsigned char splitDim = curNode.splitDim;
476
+ const Scalar splitVal = curNode.splitVal;
477
+ const Scalar queryPointVal = queryPoint[splitDim];
478
+ const Scalar distToSplit = (queryPointVal - splitVal);
479
+ const Scalar sqrDistToSplit = distToSplit * distToSplit;
480
+
481
+ if (queryPointVal >= splitVal) {
482
+ // We only need to descend if the distance to the split is less than the distance to our
483
+ // best point so far.
484
+ if (sqrDistToSplit < bestSqrDist) {
485
+ nodeStack[stackSize++] = curNode.leftChild;
486
+ }
487
+
488
+ // Since the query point is in the right half of the space we think it more likely that
489
+ // we'll find the closest point in that half of the space, so we should descend on it first.
490
+ // Since we grab the top entry of the stack first, this implies pushing it last.
491
+ nodeStack[stackSize++] = curNode.rightChild;
492
+ } else {
493
+ // Same as above:
494
+ if (sqrDistToSplit < bestSqrDist) {
495
+ nodeStack[stackSize++] = curNode.rightChild;
496
+ }
497
+
498
+ nodeStack[stackSize++] = curNode.leftChild;
499
+ }
500
+ }
501
+ }
502
+
503
+ XR_CHECK(!foundPoint || bestPoint < this->numPoints_);
504
+ return std::make_tuple(foundPoint, bestPoint, bestSqrDist);
505
+ }
506
+
507
+ using SimdKdTreeAvx3f = SimdKdTreeAvxf<3>;
508
+ using SimdKdTreeAvx2f = SimdKdTreeAvxf<2>;
509
+
510
+ extern template class SimdKdTreeAvxf<3>;
511
+ extern template class SimdKdTreeAvxf<2>;
512
+
513
+ #endif
514
+
515
+ } // namespace axel
include/axel/TriBvh.h ADDED
@@ -0,0 +1,157 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <optional>
11
+
12
+ #ifndef AXEL_NO_DISPENSO
13
+ #include <dispenso/parallel_for.h>
14
+ #endif
15
+
16
+ #include "axel/Bvh.h"
17
+ #include "axel/Ray.h"
18
+
19
+ namespace axel {
20
+
21
+ inline constexpr double kDefaultBoundingBoxThickness{0.0};
22
+
23
+ template <typename S, size_t LeafCapacity = 1>
24
+ class TriBvh {
25
+ public:
26
+ using Scalar = S;
27
+ using QueryBuffer = typename BvhBase<S>::QueryBuffer;
28
+ using ClosestSurfacePointResult = ::axel::ClosestSurfacePointResult<S>;
29
+
30
+ TriBvh() = default;
31
+
32
+ /**
33
+ * @brief Construct a new Bvh from the given positions and triangles. The constructor assumes
34
+ * that the integrity of provided positions and triangles is checked beforehand.
35
+ */
36
+ explicit TriBvh(
37
+ Eigen::MatrixX3<S>&& positions,
38
+ Eigen::MatrixX3i&& triangles,
39
+ const std::optional<S>& boundingBoxThickness = kDefaultBoundingBoxThickness);
40
+
41
+ /**
42
+ * @brief Performs a query with a given bounding box.
43
+ * All primitives whose bounding box intersects with the query get returned as a list of their
44
+ * IDs, e.g. the triangle indices.
45
+ */
46
+ std::vector<uint32_t> boxQuery(const BoundingBox<S>& box) const;
47
+
48
+ /**
49
+ * @brief Performs a query with a given bounding box.
50
+ * Stores up to 512 primitive IDs in the query buffer, such that their bounding boxes
51
+ * intersect with the query.
52
+ * The number of valid hits in the buffer is returned.
53
+ * NOTE: This method performs no dynamic memory allocation.
54
+ */
55
+ uint32_t boxQuery(const BoundingBox<S>& box, QueryBuffer& hits) const;
56
+
57
+ /**
58
+ * @brief Returns all primitives hit by the line formed from the ray's direction.
59
+ */
60
+ std::vector<uint32_t> lineHits(const Ray3<S>& ray) const;
61
+
62
+ /**
63
+ * @brief Returns the closest hit with the given query ray.
64
+ * If the ray hits nothing, returns a std::nullopt.
65
+ */
66
+ std::optional<IntersectionResult<S>> closestHit(const Ray3<S>& ray) const;
67
+
68
+ /**
69
+ * @brief Returns all hits with the given query ray.
70
+ */
71
+ std::vector<IntersectionResult<S>> allHits(const Ray3<S>& ray) const;
72
+
73
+ /**
74
+ * @brief Checks whether the given ray intersects any of the primitives in the Bvh.
75
+ */
76
+ bool anyHit(const Ray3<S>& ray) const;
77
+
78
+ ClosestSurfacePointResult closestSurfacePoint(const Eigen::Vector3<S>& query) const;
79
+
80
+ /**
81
+ * @brief Returns the total number of internal nodes in the tree.
82
+ */
83
+ size_t getNodeCount() const;
84
+
85
+ /**
86
+ * @brief Returns the total number of primitives in the tree. It should be equal to the number of
87
+ * triangles that Bvh was constructed with.
88
+ */
89
+ size_t getPrimitiveCount() const;
90
+
91
+ private:
92
+ // This memory layout is required for gather operations in vectorized code.
93
+ Eigen::Matrix<S, Eigen::Dynamic, 3, Eigen::RowMajor> positions_;
94
+ Eigen::MatrixX3i triangles_;
95
+ Bvh<S, LeafCapacity> bvh_;
96
+ };
97
+
98
+ using TriBvhf = TriBvh<float>;
99
+ using TriBvhd = TriBvh<double>;
100
+
101
+ extern template class TriBvh<float>;
102
+ extern template class TriBvh<double>;
103
+ extern template class TriBvh<float, kNativeLaneWidth<float>>;
104
+ extern template class TriBvh<double, kNativeLaneWidth<double>>;
105
+
106
+ template <typename Derived, typename F>
107
+ void closestSurfacePoints(
108
+ const TriBvh<typename Derived::Scalar>& bvh,
109
+ const Eigen::PlainObjectBase<Derived>& queryPoints,
110
+ F&& resultFunc) {
111
+ #ifdef AXEL_NO_DISPENSO
112
+ for (uint32_t i = 0; i < queryPoints.rows(); ++i) {
113
+ resultFunc(i, bvh.closestSurfacePoint(queryPoints.row(i)));
114
+ }
115
+ #else
116
+ dispenso::parallel_for(
117
+ 0, queryPoints.rows(), [&bvh, &queryPoints, &resultFunc](const uint32_t i) {
118
+ resultFunc(i, bvh.closestSurfacePoint(queryPoints.row(i)));
119
+ });
120
+ #endif
121
+ }
122
+
123
+ template <typename Derived1, typename Derived2, typename Derived3, typename Derived4>
124
+ void closestSurfacePoints(
125
+ const TriBvh<typename Derived1::Scalar>& bvh,
126
+ const Eigen::PlainObjectBase<Derived1>& queryPoints,
127
+ Eigen::PlainObjectBase<Derived2>& closestSquareDistances,
128
+ Eigen::PlainObjectBase<Derived3>& closestTriangles,
129
+ Eigen::PlainObjectBase<Derived4>& closestPoints) {
130
+ using S = typename Derived1::Scalar;
131
+ static_assert(
132
+ std::is_same_v<typename Derived2::Scalar, S> && std::is_same_v<typename Derived4::Scalar, S>,
133
+ "All output matrices must have the same scalar type.");
134
+ closestSquareDistances.resize(queryPoints.rows(), 1);
135
+ closestTriangles.resize(queryPoints.rows(), 1);
136
+ closestPoints.resize(queryPoints.rows(), 3);
137
+
138
+ const auto closestSquareDistancesLambda =
139
+ [&bvh, &queryPoints, &closestSquareDistances, &closestPoints, &closestTriangles](
140
+ const uint32_t i) {
141
+ const auto result = bvh.closestSurfacePoint(queryPoints.row(i));
142
+ closestPoints.row(i) = result.point;
143
+ closestTriangles(i) = static_cast<int32_t>(result.triangleIdx);
144
+ closestSquareDistances(i) =
145
+ (Eigen::Vector3<S>(queryPoints.row(i)) - result.point).squaredNorm();
146
+ };
147
+
148
+ #ifdef AXEL_NO_DISPENSO
149
+ for (uint32_t i = 0; i < queryPoints.rows(); ++i) {
150
+ closestSquareDistancesLambda(i);
151
+ }
152
+ #else
153
+ dispenso::parallel_for(0, queryPoints.rows(), closestSquareDistancesLambda);
154
+ #endif
155
+ }
156
+
157
+ } // namespace axel