pymomentum-cpu 0.1.82.post0__cp313-cp313-macosx_14_0_arm64.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 (512) 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/DualContouring.h +79 -0
  9. include/axel/KdTree.h +199 -0
  10. include/axel/Log.h +22 -0
  11. include/axel/MeshToSdf.h +123 -0
  12. include/axel/Profile.h +64 -0
  13. include/axel/Ray.h +45 -0
  14. include/axel/SignedDistanceField.h +248 -0
  15. include/axel/SimdKdTree.h +515 -0
  16. include/axel/TriBvh.h +157 -0
  17. include/axel/TriBvhEmbree.h +57 -0
  18. include/axel/common/Constants.h +27 -0
  19. include/axel/common/Types.h +21 -0
  20. include/axel/common/VectorizationTypes.h +58 -0
  21. include/axel/math/BoundingBoxUtils.h +54 -0
  22. include/axel/math/ContinuousCollisionDetection.h +48 -0
  23. include/axel/math/CoplanarityCheck.h +30 -0
  24. include/axel/math/EdgeEdgeDistance.h +31 -0
  25. include/axel/math/MeshHoleFilling.h +117 -0
  26. include/axel/math/PointTriangleProjection.h +34 -0
  27. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  28. include/axel/math/RayTriangleIntersection.h +36 -0
  29. include/momentum/character/blend_shape.h +91 -0
  30. include/momentum/character/blend_shape_base.h +70 -0
  31. include/momentum/character/blend_shape_skinning.h +96 -0
  32. include/momentum/character/character.h +272 -0
  33. include/momentum/character/character_state.h +108 -0
  34. include/momentum/character/character_utility.h +128 -0
  35. include/momentum/character/collision_geometry.h +80 -0
  36. include/momentum/character/collision_geometry_state.h +130 -0
  37. include/momentum/character/fwd.h +262 -0
  38. include/momentum/character/inverse_parameter_transform.h +58 -0
  39. include/momentum/character/joint.h +82 -0
  40. include/momentum/character/joint_state.h +241 -0
  41. include/momentum/character/linear_skinning.h +139 -0
  42. include/momentum/character/locator.h +82 -0
  43. include/momentum/character/locator_state.h +43 -0
  44. include/momentum/character/marker.h +48 -0
  45. include/momentum/character/mesh_state.h +71 -0
  46. include/momentum/character/parameter_limits.h +144 -0
  47. include/momentum/character/parameter_transform.h +250 -0
  48. include/momentum/character/pose_shape.h +65 -0
  49. include/momentum/character/skeleton.h +85 -0
  50. include/momentum/character/skeleton_state.h +181 -0
  51. include/momentum/character/skeleton_utility.h +38 -0
  52. include/momentum/character/skin_weights.h +67 -0
  53. include/momentum/character/skinned_locator.h +80 -0
  54. include/momentum/character/types.h +202 -0
  55. include/momentum/character_sequence_solver/fwd.h +200 -0
  56. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
  57. include/momentum/character_sequence_solver/multipose_solver.h +65 -0
  58. include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
  59. include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
  60. include/momentum/character_sequence_solver/sequence_solver.h +144 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +924 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/limit_error_function.h +57 -0
  75. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  76. include/momentum/character_solver/normal_error_function.h +73 -0
  77. include/momentum/character_solver/orientation_error_function.h +74 -0
  78. include/momentum/character_solver/plane_error_function.h +102 -0
  79. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  80. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  81. include/momentum/character_solver/position_error_function.h +75 -0
  82. include/momentum/character_solver/projection_error_function.h +93 -0
  83. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  84. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  85. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  86. include/momentum/character_solver/simd_position_error_function.h +165 -0
  87. include/momentum/character_solver/skeleton_error_function.h +151 -0
  88. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  89. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  90. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  91. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  92. include/momentum/character_solver/state_error_function.h +94 -0
  93. include/momentum/character_solver/transform_pose.h +80 -0
  94. include/momentum/character_solver/trust_region_qr.h +80 -0
  95. include/momentum/character_solver/vertex_error_function.h +155 -0
  96. include/momentum/character_solver/vertex_projection_error_function.h +117 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
  98. include/momentum/common/aligned.h +155 -0
  99. include/momentum/common/checks.h +27 -0
  100. include/momentum/common/exception.h +70 -0
  101. include/momentum/common/filesystem.h +20 -0
  102. include/momentum/common/fwd.h +27 -0
  103. include/momentum/common/log.h +173 -0
  104. include/momentum/common/log_channel.h +17 -0
  105. include/momentum/common/memory.h +71 -0
  106. include/momentum/common/profile.h +79 -0
  107. include/momentum/common/progress_bar.h +37 -0
  108. include/momentum/common/string.h +52 -0
  109. include/momentum/diff_ik/ceres_utility.h +73 -0
  110. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  111. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  112. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  113. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  114. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  115. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  116. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  117. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  118. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  119. include/momentum/diff_ik/fwd.h +385 -0
  120. include/momentum/diff_ik/union_error_function.h +67 -0
  121. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  122. include/momentum/gui/rerun/logger.h +102 -0
  123. include/momentum/gui/rerun/logging_redirect.h +27 -0
  124. include/momentum/io/character_io.h +56 -0
  125. include/momentum/io/common/gsl_utils.h +50 -0
  126. include/momentum/io/common/stream_utils.h +65 -0
  127. include/momentum/io/fbx/fbx_io.h +109 -0
  128. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  129. include/momentum/io/fbx/openfbx_loader.h +49 -0
  130. include/momentum/io/fbx/polygon_data.h +60 -0
  131. include/momentum/io/gltf/gltf_builder.h +132 -0
  132. include/momentum/io/gltf/gltf_file_format.h +19 -0
  133. include/momentum/io/gltf/gltf_io.h +148 -0
  134. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  135. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  136. include/momentum/io/gltf/utils/json_utils.h +102 -0
  137. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  138. include/momentum/io/marker/c3d_io.h +30 -0
  139. include/momentum/io/marker/conversions.h +57 -0
  140. include/momentum/io/marker/coordinate_system.h +30 -0
  141. include/momentum/io/marker/marker_io.h +56 -0
  142. include/momentum/io/marker/trc_io.h +27 -0
  143. include/momentum/io/motion/mmo_io.h +97 -0
  144. include/momentum/io/shape/blend_shape_io.h +70 -0
  145. include/momentum/io/shape/pose_shape_io.h +21 -0
  146. include/momentum/io/skeleton/locator_io.h +41 -0
  147. include/momentum/io/skeleton/mppca_io.h +26 -0
  148. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  149. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  150. include/momentum/io/skeleton/parameters_io.h +20 -0
  151. include/momentum/io/urdf/urdf_io.h +26 -0
  152. include/momentum/io/usd/usd_io.h +36 -0
  153. include/momentum/marker_tracking/app_utils.h +62 -0
  154. include/momentum/marker_tracking/marker_tracker.h +213 -0
  155. include/momentum/marker_tracking/process_markers.h +58 -0
  156. include/momentum/marker_tracking/tracker_utils.h +90 -0
  157. include/momentum/math/constants.h +82 -0
  158. include/momentum/math/covariance_matrix.h +84 -0
  159. include/momentum/math/fmt_eigen.h +23 -0
  160. include/momentum/math/fwd.h +132 -0
  161. include/momentum/math/generalized_loss.h +61 -0
  162. include/momentum/math/intersection.h +32 -0
  163. include/momentum/math/mesh.h +84 -0
  164. include/momentum/math/mppca.h +67 -0
  165. include/momentum/math/online_householder_qr.h +516 -0
  166. include/momentum/math/random-inl.h +404 -0
  167. include/momentum/math/random.h +310 -0
  168. include/momentum/math/simd_generalized_loss.h +40 -0
  169. include/momentum/math/transform.h +229 -0
  170. include/momentum/math/types.h +461 -0
  171. include/momentum/math/utility.h +251 -0
  172. include/momentum/rasterizer/camera.h +453 -0
  173. include/momentum/rasterizer/fwd.h +102 -0
  174. include/momentum/rasterizer/geometry.h +83 -0
  175. include/momentum/rasterizer/image.h +18 -0
  176. include/momentum/rasterizer/rasterizer.h +583 -0
  177. include/momentum/rasterizer/tensor.h +140 -0
  178. include/momentum/rasterizer/utility.h +268 -0
  179. include/momentum/simd/simd.h +221 -0
  180. include/momentum/solver/fwd.h +131 -0
  181. include/momentum/solver/gauss_newton_solver.h +136 -0
  182. include/momentum/solver/gradient_descent_solver.h +65 -0
  183. include/momentum/solver/solver.h +155 -0
  184. include/momentum/solver/solver_function.h +126 -0
  185. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  186. include/rerun/archetypes/annotation_context.hpp +157 -0
  187. include/rerun/archetypes/arrows2d.hpp +271 -0
  188. include/rerun/archetypes/arrows3d.hpp +257 -0
  189. include/rerun/archetypes/asset3d.hpp +262 -0
  190. include/rerun/archetypes/asset_video.hpp +275 -0
  191. include/rerun/archetypes/bar_chart.hpp +261 -0
  192. include/rerun/archetypes/boxes2d.hpp +293 -0
  193. include/rerun/archetypes/boxes3d.hpp +369 -0
  194. include/rerun/archetypes/capsules3d.hpp +333 -0
  195. include/rerun/archetypes/clear.hpp +180 -0
  196. include/rerun/archetypes/depth_image.hpp +425 -0
  197. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  198. include/rerun/archetypes/encoded_image.hpp +250 -0
  199. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  200. include/rerun/archetypes/geo_points.hpp +177 -0
  201. include/rerun/archetypes/graph_edges.hpp +152 -0
  202. include/rerun/archetypes/graph_nodes.hpp +206 -0
  203. include/rerun/archetypes/image.hpp +434 -0
  204. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  205. include/rerun/archetypes/line_strips2d.hpp +289 -0
  206. include/rerun/archetypes/line_strips3d.hpp +270 -0
  207. include/rerun/archetypes/mesh3d.hpp +387 -0
  208. include/rerun/archetypes/pinhole.hpp +385 -0
  209. include/rerun/archetypes/points2d.hpp +333 -0
  210. include/rerun/archetypes/points3d.hpp +369 -0
  211. include/rerun/archetypes/recording_properties.hpp +132 -0
  212. include/rerun/archetypes/scalar.hpp +170 -0
  213. include/rerun/archetypes/scalars.hpp +153 -0
  214. include/rerun/archetypes/segmentation_image.hpp +305 -0
  215. include/rerun/archetypes/series_line.hpp +274 -0
  216. include/rerun/archetypes/series_lines.hpp +271 -0
  217. include/rerun/archetypes/series_point.hpp +265 -0
  218. include/rerun/archetypes/series_points.hpp +251 -0
  219. include/rerun/archetypes/tensor.hpp +213 -0
  220. include/rerun/archetypes/text_document.hpp +200 -0
  221. include/rerun/archetypes/text_log.hpp +211 -0
  222. include/rerun/archetypes/transform3d.hpp +925 -0
  223. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  224. include/rerun/archetypes/view_coordinates.hpp +393 -0
  225. include/rerun/archetypes.hpp +43 -0
  226. include/rerun/arrow_utils.hpp +32 -0
  227. include/rerun/as_components.hpp +90 -0
  228. include/rerun/blueprint/archetypes/background.hpp +113 -0
  229. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  230. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  231. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  232. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  233. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  234. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  235. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  236. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  237. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  238. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  239. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  240. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  241. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  242. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  243. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  244. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  245. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  246. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  247. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  248. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  249. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  250. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  251. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  252. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  253. include/rerun/blueprint/archetypes.hpp +29 -0
  254. include/rerun/blueprint/components/active_tab.hpp +82 -0
  255. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  256. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  257. include/rerun/blueprint/components/auto_views.hpp +77 -0
  258. include/rerun/blueprint/components/background_kind.hpp +66 -0
  259. include/rerun/blueprint/components/column_share.hpp +78 -0
  260. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  261. include/rerun/blueprint/components/container_kind.hpp +65 -0
  262. include/rerun/blueprint/components/corner2d.hpp +64 -0
  263. include/rerun/blueprint/components/enabled.hpp +77 -0
  264. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  265. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  266. include/rerun/blueprint/components/force_distance.hpp +82 -0
  267. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  268. include/rerun/blueprint/components/force_strength.hpp +82 -0
  269. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  270. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  271. include/rerun/blueprint/components/included_content.hpp +86 -0
  272. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  273. include/rerun/blueprint/components/map_provider.hpp +64 -0
  274. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  275. include/rerun/blueprint/components/panel_state.hpp +61 -0
  276. include/rerun/blueprint/components/query_expression.hpp +89 -0
  277. include/rerun/blueprint/components/root_container.hpp +77 -0
  278. include/rerun/blueprint/components/row_share.hpp +78 -0
  279. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  280. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  281. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  282. include/rerun/blueprint/components/view_class.hpp +76 -0
  283. include/rerun/blueprint/components/view_fit.hpp +61 -0
  284. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  285. include/rerun/blueprint/components/view_origin.hpp +81 -0
  286. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  287. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  288. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  289. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  290. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  291. include/rerun/blueprint/components.hpp +41 -0
  292. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  293. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  294. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  295. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  296. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  297. include/rerun/blueprint/datatypes.hpp +9 -0
  298. include/rerun/c/arrow_c_data_interface.h +111 -0
  299. include/rerun/c/compiler_utils.h +10 -0
  300. include/rerun/c/rerun.h +627 -0
  301. include/rerun/c/sdk_info.h +28 -0
  302. include/rerun/collection.hpp +496 -0
  303. include/rerun/collection_adapter.hpp +43 -0
  304. include/rerun/collection_adapter_builtins.hpp +138 -0
  305. include/rerun/compiler_utils.hpp +61 -0
  306. include/rerun/component_batch.hpp +163 -0
  307. include/rerun/component_column.hpp +111 -0
  308. include/rerun/component_descriptor.hpp +142 -0
  309. include/rerun/component_type.hpp +35 -0
  310. include/rerun/components/aggregation_policy.hpp +76 -0
  311. include/rerun/components/albedo_factor.hpp +74 -0
  312. include/rerun/components/annotation_context.hpp +102 -0
  313. include/rerun/components/axis_length.hpp +74 -0
  314. include/rerun/components/blob.hpp +73 -0
  315. include/rerun/components/class_id.hpp +71 -0
  316. include/rerun/components/clear_is_recursive.hpp +75 -0
  317. include/rerun/components/color.hpp +99 -0
  318. include/rerun/components/colormap.hpp +99 -0
  319. include/rerun/components/depth_meter.hpp +84 -0
  320. include/rerun/components/draw_order.hpp +79 -0
  321. include/rerun/components/entity_path.hpp +83 -0
  322. include/rerun/components/fill_mode.hpp +72 -0
  323. include/rerun/components/fill_ratio.hpp +79 -0
  324. include/rerun/components/gamma_correction.hpp +80 -0
  325. include/rerun/components/geo_line_string.hpp +63 -0
  326. include/rerun/components/graph_edge.hpp +75 -0
  327. include/rerun/components/graph_node.hpp +79 -0
  328. include/rerun/components/graph_type.hpp +57 -0
  329. include/rerun/components/half_size2d.hpp +91 -0
  330. include/rerun/components/half_size3d.hpp +95 -0
  331. include/rerun/components/image_buffer.hpp +86 -0
  332. include/rerun/components/image_format.hpp +84 -0
  333. include/rerun/components/image_plane_distance.hpp +77 -0
  334. include/rerun/components/interactive.hpp +76 -0
  335. include/rerun/components/keypoint_id.hpp +74 -0
  336. include/rerun/components/lat_lon.hpp +89 -0
  337. include/rerun/components/length.hpp +77 -0
  338. include/rerun/components/line_strip2d.hpp +73 -0
  339. include/rerun/components/line_strip3d.hpp +73 -0
  340. include/rerun/components/magnification_filter.hpp +63 -0
  341. include/rerun/components/marker_shape.hpp +82 -0
  342. include/rerun/components/marker_size.hpp +74 -0
  343. include/rerun/components/media_type.hpp +157 -0
  344. include/rerun/components/name.hpp +83 -0
  345. include/rerun/components/opacity.hpp +77 -0
  346. include/rerun/components/pinhole_projection.hpp +94 -0
  347. include/rerun/components/plane3d.hpp +75 -0
  348. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  349. include/rerun/components/pose_rotation_quat.hpp +71 -0
  350. include/rerun/components/pose_scale3d.hpp +102 -0
  351. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  352. include/rerun/components/pose_translation3d.hpp +96 -0
  353. include/rerun/components/position2d.hpp +86 -0
  354. include/rerun/components/position3d.hpp +90 -0
  355. include/rerun/components/radius.hpp +98 -0
  356. include/rerun/components/range1d.hpp +75 -0
  357. include/rerun/components/resolution.hpp +88 -0
  358. include/rerun/components/rotation_axis_angle.hpp +72 -0
  359. include/rerun/components/rotation_quat.hpp +71 -0
  360. include/rerun/components/scalar.hpp +76 -0
  361. include/rerun/components/scale3d.hpp +102 -0
  362. include/rerun/components/series_visible.hpp +76 -0
  363. include/rerun/components/show_labels.hpp +79 -0
  364. include/rerun/components/stroke_width.hpp +74 -0
  365. include/rerun/components/tensor_data.hpp +94 -0
  366. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  367. include/rerun/components/tensor_height_dimension.hpp +71 -0
  368. include/rerun/components/tensor_width_dimension.hpp +71 -0
  369. include/rerun/components/texcoord2d.hpp +101 -0
  370. include/rerun/components/text.hpp +83 -0
  371. include/rerun/components/text_log_level.hpp +110 -0
  372. include/rerun/components/timestamp.hpp +76 -0
  373. include/rerun/components/transform_mat3x3.hpp +92 -0
  374. include/rerun/components/transform_relation.hpp +66 -0
  375. include/rerun/components/translation3d.hpp +96 -0
  376. include/rerun/components/triangle_indices.hpp +85 -0
  377. include/rerun/components/value_range.hpp +78 -0
  378. include/rerun/components/vector2d.hpp +92 -0
  379. include/rerun/components/vector3d.hpp +96 -0
  380. include/rerun/components/video_timestamp.hpp +120 -0
  381. include/rerun/components/view_coordinates.hpp +346 -0
  382. include/rerun/components/visible.hpp +74 -0
  383. include/rerun/components.hpp +77 -0
  384. include/rerun/config.hpp +52 -0
  385. include/rerun/datatypes/angle.hpp +76 -0
  386. include/rerun/datatypes/annotation_info.hpp +76 -0
  387. include/rerun/datatypes/blob.hpp +67 -0
  388. include/rerun/datatypes/bool.hpp +57 -0
  389. include/rerun/datatypes/channel_datatype.hpp +87 -0
  390. include/rerun/datatypes/class_description.hpp +92 -0
  391. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  392. include/rerun/datatypes/class_id.hpp +62 -0
  393. include/rerun/datatypes/color_model.hpp +68 -0
  394. include/rerun/datatypes/dvec2d.hpp +76 -0
  395. include/rerun/datatypes/entity_path.hpp +60 -0
  396. include/rerun/datatypes/float32.hpp +62 -0
  397. include/rerun/datatypes/float64.hpp +62 -0
  398. include/rerun/datatypes/image_format.hpp +107 -0
  399. include/rerun/datatypes/keypoint_id.hpp +63 -0
  400. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  401. include/rerun/datatypes/mat3x3.hpp +105 -0
  402. include/rerun/datatypes/mat4x4.hpp +119 -0
  403. include/rerun/datatypes/pixel_format.hpp +142 -0
  404. include/rerun/datatypes/plane3d.hpp +60 -0
  405. include/rerun/datatypes/quaternion.hpp +110 -0
  406. include/rerun/datatypes/range1d.hpp +59 -0
  407. include/rerun/datatypes/range2d.hpp +55 -0
  408. include/rerun/datatypes/rgba32.hpp +94 -0
  409. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  410. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  411. include/rerun/datatypes/tensor_data.hpp +100 -0
  412. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  413. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  414. include/rerun/datatypes/time_int.hpp +62 -0
  415. include/rerun/datatypes/time_range.hpp +55 -0
  416. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  417. include/rerun/datatypes/uint16.hpp +62 -0
  418. include/rerun/datatypes/uint32.hpp +62 -0
  419. include/rerun/datatypes/uint64.hpp +62 -0
  420. include/rerun/datatypes/utf8.hpp +76 -0
  421. include/rerun/datatypes/utf8pair.hpp +62 -0
  422. include/rerun/datatypes/uuid.hpp +60 -0
  423. include/rerun/datatypes/uvec2d.hpp +76 -0
  424. include/rerun/datatypes/uvec3d.hpp +80 -0
  425. include/rerun/datatypes/uvec4d.hpp +59 -0
  426. include/rerun/datatypes/vec2d.hpp +76 -0
  427. include/rerun/datatypes/vec3d.hpp +80 -0
  428. include/rerun/datatypes/vec4d.hpp +84 -0
  429. include/rerun/datatypes/video_timestamp.hpp +67 -0
  430. include/rerun/datatypes/view_coordinates.hpp +87 -0
  431. include/rerun/datatypes/visible_time_range.hpp +57 -0
  432. include/rerun/datatypes.hpp +51 -0
  433. include/rerun/demo_utils.hpp +75 -0
  434. include/rerun/entity_path.hpp +20 -0
  435. include/rerun/error.hpp +180 -0
  436. include/rerun/half.hpp +10 -0
  437. include/rerun/image_utils.hpp +187 -0
  438. include/rerun/indicator_component.hpp +59 -0
  439. include/rerun/loggable.hpp +54 -0
  440. include/rerun/recording_stream.hpp +960 -0
  441. include/rerun/rerun_sdk_export.hpp +25 -0
  442. include/rerun/result.hpp +86 -0
  443. include/rerun/rotation3d.hpp +33 -0
  444. include/rerun/sdk_info.hpp +20 -0
  445. include/rerun/spawn.hpp +21 -0
  446. include/rerun/spawn_options.hpp +57 -0
  447. include/rerun/string_utils.hpp +16 -0
  448. include/rerun/third_party/cxxopts.hpp +2198 -0
  449. include/rerun/time_column.hpp +288 -0
  450. include/rerun/timeline.hpp +38 -0
  451. include/rerun/type_traits.hpp +40 -0
  452. include/rerun.hpp +86 -0
  453. lib/cmake/axel/axel-config.cmake +45 -0
  454. lib/cmake/axel/axelTargets-release.cmake +19 -0
  455. lib/cmake/axel/axelTargets.cmake +108 -0
  456. lib/cmake/momentum/Findre2.cmake +52 -0
  457. lib/cmake/momentum/momentum-config.cmake +67 -0
  458. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  459. lib/cmake/momentum/momentumTargets.cmake +377 -0
  460. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  461. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  462. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  463. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  464. lib/libarrow.a +0 -0
  465. lib/libarrow_bundled_dependencies.a +0 -0
  466. lib/libaxel.a +0 -0
  467. lib/libmomentum_app_utils.a +0 -0
  468. lib/libmomentum_character.a +0 -0
  469. lib/libmomentum_character_sequence_solver.a +0 -0
  470. lib/libmomentum_character_solver.a +0 -0
  471. lib/libmomentum_common.a +0 -0
  472. lib/libmomentum_diff_ik.a +0 -0
  473. lib/libmomentum_io.a +0 -0
  474. lib/libmomentum_io_common.a +0 -0
  475. lib/libmomentum_io_fbx.a +0 -0
  476. lib/libmomentum_io_gltf.a +0 -0
  477. lib/libmomentum_io_legacy_json.a +0 -0
  478. lib/libmomentum_io_marker.a +0 -0
  479. lib/libmomentum_io_motion.a +0 -0
  480. lib/libmomentum_io_shape.a +0 -0
  481. lib/libmomentum_io_skeleton.a +0 -0
  482. lib/libmomentum_io_urdf.a +0 -0
  483. lib/libmomentum_marker_tracker.a +0 -0
  484. lib/libmomentum_math.a +0 -0
  485. lib/libmomentum_online_qr.a +0 -0
  486. lib/libmomentum_process_markers.a +0 -0
  487. lib/libmomentum_rerun.a +0 -0
  488. lib/libmomentum_simd_constraints.a +0 -0
  489. lib/libmomentum_simd_generalized_loss.a +0 -0
  490. lib/libmomentum_skeleton.a +0 -0
  491. lib/libmomentum_solver.a +0 -0
  492. lib/librerun_c__macos_arm64.a +0 -0
  493. lib/librerun_sdk.a +0 -0
  494. pymomentum/axel.cpython-313-darwin.so +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +614 -0
  497. pymomentum/backend/trs_backend.py +871 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cpython-313-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-313-darwin.so +0 -0
  504. pymomentum/solver2.cpython-313-darwin.so +0 -0
  505. pymomentum/torch/character.py +856 -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.1.82.post0.dist-info/METADATA +121 -0
  510. pymomentum_cpu-0.1.82.post0.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.82.post0.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.82.post0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,140 @@
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 <mdspan/mdspan.hpp>
11
+ #include <momentum/common/aligned.h>
12
+ #include <momentum/rasterizer/fwd.h>
13
+ #include <algorithm>
14
+ #include <array>
15
+ #include <memory>
16
+ #include <stdexcept>
17
+
18
+ namespace momentum::rasterizer {
19
+
20
+ using index_t = std::ptrdiff_t;
21
+
22
+ // Simplified Tensor class local to Rasterizer
23
+ // Uses std::vector with aligned allocator and provides conversion to std::mdspan
24
+ template <typename T, size_t Rank>
25
+ class Tensor {
26
+ private:
27
+ using extents_t = std::array<index_t, Rank>;
28
+ using allocator_t = momentum::AlignedAllocator<T, kSimdAlignment>;
29
+ using storage_t = std::vector<T, allocator_t>;
30
+
31
+ extents_t _extents = {};
32
+ storage_t _data;
33
+
34
+ public:
35
+ using element_type = T;
36
+ using value_type = std::remove_cv_t<T>;
37
+
38
+ Tensor() = default;
39
+
40
+ explicit Tensor(const extents_t& extents, const T& defaultValue = T{}) : _extents(extents) {
41
+ auto size = calculateSize(extents);
42
+ if (size > 0) {
43
+ _data.resize(size, defaultValue);
44
+ }
45
+ }
46
+
47
+ template <typename... SizeTypes>
48
+ explicit Tensor(SizeTypes... dims) : Tensor(extents_t{static_cast<index_t>(dims)...}) {}
49
+
50
+ // Copy constructor, move constructor, copy assignment, and move assignment
51
+ // are automatically generated and work correctly with std::vector
52
+
53
+ // Conversion to mdspan
54
+ explicit operator Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>() {
55
+ return Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>(
56
+ _data.data(), Kokkos::dextents<index_t, Rank>(_extents));
57
+ }
58
+
59
+ explicit operator Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>() const {
60
+ return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
61
+ _data.data(), Kokkos::dextents<index_t, Rank>(_extents));
62
+ }
63
+
64
+ // View method for compatibility
65
+ Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>> view() {
66
+ return Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>(
67
+ _data.data(), Kokkos::dextents<index_t, Rank>(_extents));
68
+ }
69
+
70
+ [[nodiscard]] Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>> view() const {
71
+ return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
72
+ _data.data(), Kokkos::dextents<index_t, Rank>(_extents));
73
+ }
74
+
75
+ [[nodiscard]] Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>> const_view() const {
76
+ return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
77
+ _data.data(), Kokkos::dextents<index_t, Rank>(_extents));
78
+ }
79
+
80
+ // Multi-dimensional indexing operator() inspired by ASpan
81
+ template <typename... Args>
82
+ std::enable_if_t<sizeof...(Args) == Rank, T&> operator()(Args... indices) {
83
+ static_assert(sizeof...(Args) == Rank, "Number of indices must match tensor rank");
84
+ return view()(indices...);
85
+ }
86
+
87
+ template <typename... Args>
88
+ std::enable_if_t<sizeof...(Args) == Rank, const T&> operator()(Args... indices) const {
89
+ static_assert(sizeof...(Args) == Rank, "Number of indices must match tensor rank");
90
+ return view()(indices...);
91
+ }
92
+
93
+ // Basic accessors
94
+ T* data() {
95
+ return _data.data();
96
+ }
97
+ [[nodiscard]] const T* data() const {
98
+ return _data.data();
99
+ }
100
+
101
+ [[nodiscard]] constexpr index_t extent(size_t dim) const {
102
+ return _extents[dim];
103
+ }
104
+ [[nodiscard]] constexpr extents_t extents() const {
105
+ return _extents;
106
+ }
107
+
108
+ [[nodiscard]] index_t size() const {
109
+ return static_cast<index_t>(_data.size());
110
+ }
111
+ [[nodiscard]] bool empty() const {
112
+ return _data.empty();
113
+ }
114
+
115
+ void resize(const extents_t& new_extents) {
116
+ auto new_size = calculateSize(new_extents);
117
+ _data.resize(new_size);
118
+ _extents = new_extents;
119
+ }
120
+
121
+ template <typename... SizeTypes>
122
+ void resize(SizeTypes... dims) {
123
+ resize(extents_t{static_cast<index_t>(dims)...});
124
+ }
125
+
126
+ private:
127
+ static index_t calculateSize(const extents_t& extents) {
128
+ index_t size = 1;
129
+ for (auto ext : extents) {
130
+ size *= ext;
131
+ }
132
+ return size;
133
+ }
134
+ };
135
+
136
+ using Tensor2f = Tensor<float, 2>;
137
+ using Tensor3f = Tensor<float, 3>;
138
+ using Tensor2i = Tensor<int, 2>;
139
+
140
+ } // namespace momentum::rasterizer
@@ -0,0 +1,268 @@
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 <drjit/array.h>
11
+ #include <drjit/fwd.h>
12
+ #include <drjit/matrix.h>
13
+ #include <mdspan/mdspan.hpp>
14
+ #include <momentum/rasterizer/fwd.h>
15
+ #include <Eigen/Core>
16
+ #include <Eigen/Geometry>
17
+ #include <array>
18
+ #include <memory>
19
+ #include <sstream>
20
+ #include <utility>
21
+
22
+ // Forward declarations to avoid circular dependencies
23
+ namespace momentum::rasterizer {
24
+
25
+ using index_t = std::ptrdiff_t;
26
+
27
+ // Actual implementations
28
+
29
+ template <std::size_t R>
30
+ std::string formatTensorSizes(const std::array<index_t, R>& extents) {
31
+ std::ostringstream oss;
32
+ oss << "[";
33
+ for (size_t i = 0; i < extents.size(); ++i) {
34
+ if (i != 0) {
35
+ oss << " x ";
36
+ }
37
+ oss << extents[i];
38
+ }
39
+ oss << "]";
40
+ return oss.str();
41
+ }
42
+
43
+ // Overload for mdspan extents using parameter pack
44
+ template <class IndexType, size_t... Extents>
45
+ std::string formatTensorSizes(const Kokkos::extents<IndexType, Extents...>& extents) {
46
+ std::ostringstream oss;
47
+ oss << "[";
48
+ for (size_t i = 0; i < extents.rank(); ++i) {
49
+ if (i != 0) {
50
+ oss << " x ";
51
+ }
52
+ oss << extents.extent(i);
53
+ }
54
+ oss << "]";
55
+ return oss.str();
56
+ }
57
+
58
+ // Validates that an mdspan buffer is suitable for rasterization operations.
59
+ // This function checks:
60
+ // 1. Data pointer is properly aligned for SIMD operations
61
+ // 2. All dimensions except the first are contiguous (rows are packed tightly)
62
+ // 3. The stride for the first dimension is a multiple of kSimdPacketSize
63
+ template <typename T, typename Extents>
64
+ bool isValidBuffer(const Kokkos::mdspan<T, Extents>& buffer) {
65
+ if (buffer.empty()) {
66
+ return true; // Empty buffers are always valid
67
+ }
68
+
69
+ constexpr auto rank = Kokkos::mdspan<T, Extents>::rank();
70
+
71
+ // Check alignment of data pointer
72
+ if (reinterpret_cast<uintptr_t>(buffer.data_handle()) % kSimdAlignment != 0) {
73
+ return false;
74
+ }
75
+
76
+ // For 1D buffers, just check that the stride is compatible with SIMD
77
+ if (rank == 1) {
78
+ return buffer.stride(0) % kSimdPacketSize == 0;
79
+ }
80
+
81
+ // For multi-dimensional buffers, check contiguity of all dimensions except the first
82
+ // Start from the rightmost dimension and work backwards
83
+ index_t expected_stride = 1;
84
+ for (size_t dim = rank; dim > 1; --dim) {
85
+ size_t i = dim - 1;
86
+ if (buffer.stride(i) != expected_stride) {
87
+ return false; // Not contiguous in this dimension
88
+ }
89
+ expected_stride *= buffer.extent(i);
90
+ }
91
+
92
+ // Check that the first dimension stride is a multiple of kSimdPacketSize
93
+ // This ensures proper SIMD alignment for accessing rows
94
+ return buffer.stride(0) % kSimdPacketSize == 0;
95
+ }
96
+
97
+ // Helper function to get the row stride for accessing buffer rows properly
98
+ // This ensures we use the actual mdspan stride instead of assuming contiguity
99
+ template <typename T, typename Extents>
100
+ index_t getRowStride(const Kokkos::mdspan<T, Extents>& buffer) {
101
+ static_assert(
102
+ Kokkos::mdspan<T, Extents>::rank() >= 2, "getRowStride requires at least 2D buffer");
103
+ return buffer.stride(0);
104
+ }
105
+
106
+ // Checks if an mdspan has a standard row-major contiguous layout
107
+ // This is useful for optimization decisions where contiguous access patterns can be used
108
+ template <typename T, typename Extents>
109
+ bool isContiguous(const Kokkos::mdspan<T, Extents>& buffer) {
110
+ if (buffer.empty()) {
111
+ return true; // Empty buffers are trivially contiguous
112
+ }
113
+
114
+ constexpr auto rank = Kokkos::mdspan<T, Extents>::rank();
115
+
116
+ // Check contiguity from the rightmost dimension working backwards
117
+ index_t expected_stride = 1;
118
+ for (size_t dim = rank; dim > 0; --dim) {
119
+ size_t i = dim - 1;
120
+ if (buffer.stride(i) != expected_stride) {
121
+ return false; // Not contiguous in this dimension
122
+ }
123
+ expected_stride *= buffer.extent(i);
124
+ }
125
+
126
+ return true;
127
+ }
128
+
129
+ inline Vector3f toEnokiVec(const Eigen::Vector3f& v) {
130
+ return {v.x(), v.y(), v.z()};
131
+ }
132
+
133
+ inline Matrix3f toEnokiMat(const Eigen::Matrix3f& m) {
134
+ return Matrix3f(m(0, 0), m(0, 1), m(0, 2), m(1, 0), m(1, 1), m(1, 2), m(2, 0), m(2, 1), m(2, 2));
135
+ }
136
+
137
+ inline auto extractSingleElement(const Matrix3dP& mat, int index) {
138
+ return Matrix3d{
139
+ mat(0, 0)[index],
140
+ mat(0, 1)[index],
141
+ mat(0, 2)[index],
142
+ mat(1, 0)[index],
143
+ mat(1, 1)[index],
144
+ mat(1, 2)[index],
145
+ mat(2, 0)[index],
146
+ mat(2, 1)[index],
147
+ mat(2, 2)[index]};
148
+ }
149
+ inline auto extractSingleElement(const Matrix3fP& mat, int index) {
150
+ return Matrix3f{
151
+ mat(0, 0)[index],
152
+ mat(0, 1)[index],
153
+ mat(0, 2)[index],
154
+ mat(1, 0)[index],
155
+ mat(1, 1)[index],
156
+ mat(1, 2)[index],
157
+ mat(2, 0)[index],
158
+ mat(2, 1)[index],
159
+ mat(2, 2)[index]};
160
+ }
161
+
162
+ inline auto extractSingleElement(const Vector3dP& vec, int index) {
163
+ return Vector3d{vec.x()[index], vec.y()[index], vec.z()[index]};
164
+ }
165
+
166
+ inline auto extractSingleElement(const Vector3fP& vec, int index) {
167
+ return Vector3f{vec.x()[index], vec.y()[index], vec.z()[index]};
168
+ }
169
+
170
+ inline auto extractSingleElement(const Vector2fP& vec, int index) {
171
+ return Vector2f(vec.x()[index], vec.y()[index]);
172
+ }
173
+
174
+ inline auto extractSingleElement(const FloatP& vec, int index) {
175
+ return vec[index];
176
+ }
177
+
178
+ class SimdCamera {
179
+ public:
180
+ // Camera that operates on drjit::Vector3fP.
181
+ SimdCamera(const Camera& camera, Eigen::Matrix4f modelMatrix, Eigen::Vector2f imageOffset)
182
+ : _modelMatrix(modelMatrix),
183
+ _imageOffset(std::move(imageOffset)),
184
+ _intrinsics(camera.intrinsicsModel()),
185
+ _modelToWorld_rotation(toEnokiMat(modelMatrix.topLeftCorner<3, 3>())),
186
+ _modelToWorld_translation(toEnokiVec(modelMatrix.block<3, 1>(0, 3))),
187
+ _modelToWorld_row3(toEnokiVec(modelMatrix.block<1, 3>(3, 0))),
188
+ _modelToWorld_33(modelMatrix(3, 3)),
189
+ _normalMatrix(toEnokiMat(
190
+ (camera.eyeFromWorld() * Eigen::Transform<float, 3, Eigen::Affine>(modelMatrix))
191
+ .linear()
192
+ .inverse()
193
+ .transpose())),
194
+ _worldToEye_translation(toEnokiVec(Eigen::Vector3f(camera.eyeFromWorld().translation()))),
195
+ _worldToEye_rotation(toEnokiMat(camera.eyeFromWorld().linear().matrix())),
196
+ _fx(camera.fx()),
197
+ _fy(camera.fy()),
198
+ _imageWidth(camera.imageWidth()),
199
+ _imageHeight(camera.imageHeight()) {}
200
+
201
+ [[nodiscard]] auto fx() const {
202
+ return _fx;
203
+ }
204
+
205
+ [[nodiscard]] auto fy() const {
206
+ return _fy;
207
+ }
208
+
209
+ [[nodiscard]] auto imageWidth() const {
210
+ return _imageWidth;
211
+ }
212
+
213
+ [[nodiscard]] auto imageHeight() const {
214
+ return _imageHeight;
215
+ }
216
+
217
+ [[nodiscard]] Vector3fP worldToEye(const Vector3fP& p_world) const {
218
+ // Because we support projection in the model-to-world matrix, we can't just combine it
219
+ // with the world-to-eye matrix, so we'll keep them separate.
220
+ // Model-to-world matrix looks like this:
221
+ // [ mR mT ]
222
+ // [ m3x m33 ]
223
+ // Blockwise multiplication gives:
224
+ // [ mR mT ] [ v ] = [ mR * v + mT ]
225
+ // [ m3x m33 ] [ 1 ] [ m3x^T * v + m33]
226
+ const Vector3fP p_world_unnormalized =
227
+ _modelToWorld_rotation * p_world + _modelToWorld_translation;
228
+ const FloatP p_world_w = drjit::dot(_modelToWorld_row3, p_world) + _modelToWorld_33;
229
+ const Vector3fP p_world_normalized = p_world_unnormalized / p_world_w;
230
+
231
+ return _worldToEye_rotation * p_world_normalized + _worldToEye_translation;
232
+ }
233
+
234
+ [[nodiscard]] Vector3fP worldToEyeNormal(const Vector3fP& n_world) const {
235
+ return drjit::normalize(_normalMatrix * n_world);
236
+ }
237
+
238
+ [[nodiscard]] auto eyeToWindow(const Vector3fP& p_eye) const {
239
+ return _intrinsics->project(p_eye);
240
+ }
241
+
242
+ [[nodiscard]] auto worldToWindow(const Vector3fP& p_world) const {
243
+ return eyeToWindow(worldToEye(p_world));
244
+ }
245
+
246
+ private:
247
+ const Eigen::Matrix4f _modelMatrix;
248
+ const Eigen::Vector2f _imageOffset;
249
+ std::shared_ptr<const IntrinsicsModelT<float>> _intrinsics;
250
+
251
+ const Matrix3f _modelToWorld_rotation;
252
+ const Vector3f _modelToWorld_translation;
253
+ const Vector3f _modelToWorld_row3;
254
+ const float _modelToWorld_33;
255
+
256
+ const Matrix3f _normalMatrix;
257
+
258
+ const Vector3f _worldToEye_translation;
259
+ const Matrix3f _worldToEye_rotation;
260
+
261
+ const float _fx;
262
+ const float _fy;
263
+
264
+ const int32_t _imageWidth;
265
+ const int32_t _imageHeight;
266
+ };
267
+
268
+ } // namespace momentum::rasterizer
@@ -0,0 +1,221 @@
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 <momentum/common/exception.h>
11
+ #include <momentum/math/transform.h>
12
+
13
+ #include <drjit/array.h>
14
+ #include <drjit/array_router.h>
15
+ #include <drjit/packet.h>
16
+ #include <drjit/util.h>
17
+ #include <Eigen/Core>
18
+ #include <Eigen/Geometry>
19
+
20
+ #define DRJIT_VERSION_GE(major, minor, patch) \
21
+ ((DRJIT_VERSION_MAJOR > (major)) || \
22
+ (DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR > (minor)) || \
23
+ (DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR == (minor) && \
24
+ DRJIT_VERSION_PATCH >= (patch)))
25
+
26
+ // Utilities for writing cross-platform SIMD code.
27
+ // This currently uses the DrJit library for SIMD primitives.
28
+
29
+ namespace momentum {
30
+
31
+ inline constexpr size_t kAvxPacketSize = 8;
32
+ inline constexpr size_t kAvxAlignment = kAvxPacketSize * sizeof(float);
33
+
34
+ inline constexpr size_t kSimdPacketSize = drjit::DefaultSize;
35
+ inline constexpr size_t kSimdAlignment = kSimdPacketSize * sizeof(float);
36
+
37
+ template <typename T>
38
+ using Packet = drjit::Packet<T, kSimdPacketSize>;
39
+
40
+ using FloatP = Packet<float>;
41
+ using DoubleP = Packet<double>;
42
+ using IntP = Packet<int>;
43
+
44
+ template <typename T, int Dim>
45
+ using VectorP = drjit::Array<Packet<T>, Dim>;
46
+
47
+ template <typename T>
48
+ using Vector2P = VectorP<T, 2>;
49
+
50
+ template <typename T>
51
+ using Vector3P = VectorP<T, 3>;
52
+
53
+ using Vector2fP = Vector2P<float>;
54
+ using Vector3fP = Vector3P<float>;
55
+
56
+ using Vector2dP = Vector2P<double>;
57
+ using Vector3dP = Vector3P<double>;
58
+
59
+ /// Computes the offset required for the matrix data to meet the alignment requirement.
60
+ template <size_t Alignment>
61
+ [[nodiscard]] size_t computeOffset(const Eigen::Ref<Eigen::MatrixXf>& mat) {
62
+ constexpr size_t sizeOfScalar = sizeof(typename Eigen::MatrixXf::Scalar);
63
+ const size_t addressOffset =
64
+ Alignment / sizeOfScalar - (((size_t)mat.data() % Alignment) / sizeOfScalar);
65
+
66
+ // If the current alignment already meets the requirement, no offset is needed.
67
+ if (addressOffset == Alignment / sizeOfScalar) {
68
+ return 0;
69
+ }
70
+
71
+ return addressOffset;
72
+ }
73
+
74
+ /// Checks if the data of the matrix is aligned correctly.
75
+ template <size_t Alignment>
76
+ void checkAlignment(const Eigen::Ref<Eigen::MatrixXf>& mat, size_t offset = 0) {
77
+ MT_THROW_IF(
78
+ (uintptr_t(mat.data() + offset)) % Alignment != 0,
79
+ "Matrix ({}x{}, ptr: {}) is not aligned ({}) correctly.",
80
+ mat.rows(),
81
+ mat.cols(),
82
+ uintptr_t(mat.data()),
83
+ Alignment);
84
+ }
85
+
86
+ /// Calculates dot product of Eigen::Vector3f and 3-vector of packets.
87
+ ///
88
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
89
+ /// Eigen::Vector3f.
90
+ /// @param[in] v1 A 3D vector of Eigen.
91
+ /// @param[in] v2 A 3-vector of packets.
92
+ template <typename Derived, typename S>
93
+ FloatP dot(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
94
+ return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
95
+ }
96
+
97
+ /// Calculates dot product of Vector3P and Eigen::Vector3f.
98
+ ///
99
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
100
+ /// Eigen::Vector3f.
101
+ /// @param[in] v1 A 3-vector of packets.
102
+ /// @param[in] v2 A 3D vector of Eigen.
103
+ template <typename Derived, typename S>
104
+ FloatP dot(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
105
+ return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
106
+ }
107
+
108
+ /// Calculates summation of Eigen::Vector3f and Vector3P
109
+ ///
110
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
111
+ /// Eigen::Vector3f.
112
+ /// @param[in] v1 A 3D vector of Eigen.
113
+ /// @param[in] v2 A 3-vector of packets.
114
+ template <typename S, typename Derived>
115
+ Vector3P<S> operator+(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
116
+ return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
117
+ }
118
+
119
+ /// Calculates summation of Vector3P and Eigen::Vector3f
120
+ ///
121
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
122
+ /// Eigen::Vector3f.
123
+ /// @param[in] v1 A 3-vector of packets.
124
+ /// @param[in] v2 A 3D vector of Eigen.
125
+ template <typename S, typename Derived>
126
+ Vector3P<S> operator+(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
127
+ return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
128
+ }
129
+
130
+ /// Calculates subtraction of Eigen::Vector3f and Vector3P
131
+ ///
132
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
133
+ /// Eigen::Vector3f.
134
+ /// @param[in] v1 A 3D vector of Eigen.
135
+ /// @param[in] v2 A 3-vector of packets.
136
+ template <typename S, typename Derived>
137
+ Vector3P<S> operator-(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
138
+ return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
139
+ }
140
+
141
+ /// Calculates subtraction of Vector3P and Eigen::Vector3f
142
+ ///
143
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
144
+ /// Eigen::Vector3f.
145
+ /// @param[in] v1 A 3-vector of packets.
146
+ /// @param[in] v2 A 3D vector of Eigen.
147
+ template <typename S, typename Derived>
148
+ Vector3P<S> operator-(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
149
+ return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
150
+ }
151
+
152
+ /// Calculates multiplication of quaternion and each 3x1 vector in packet
153
+ ///
154
+ /// @param[in] q A quaternion.
155
+ /// @param[in] vec A 3-vector of packets.
156
+ template <typename S>
157
+ Vector3P<S> operator*(const Eigen::Quaternion<S>& q, const Vector3P<S>& vec) {
158
+ return q * vec;
159
+ }
160
+
161
+ /// Calculates multiplication of 3x3 matrix and each 3x1 vector in packet
162
+ ///
163
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
164
+ /// Eigen::Matrix3f.
165
+ /// @param[in] xf A 3x3 matrix.
166
+ /// @param[in] vec A 3-vector of packets.
167
+ template <typename S, typename Derived>
168
+ Vector3P<S> operator*(const Eigen::MatrixBase<Derived>& xf, const Vector3P<S>& vec) {
169
+ return Vector3P<S>{
170
+ momentum::dot(xf.row(0), vec), momentum::dot(xf.row(1), vec), momentum::dot(xf.row(2), vec)};
171
+ }
172
+
173
+ /// Calculates affine transformation on each 3x1 vector in packet
174
+ ///
175
+ /// @param[in] xf An affine transformation matrix.
176
+ /// @param[in] vec A 3-vector of packets.
177
+ template <typename S>
178
+ Vector3P<S> operator*(const Eigen::Transform<S, 3, Eigen::Affine>& xf, const Vector3P<S>& vec) {
179
+ return momentum::operator+(momentum::operator*(xf.linear(), vec), xf.translation());
180
+ }
181
+
182
+ /// Calculates transformation on each 3x1 vector in packet using momentum::Transform
183
+ ///
184
+ /// @param[in] xf A momentum transform.
185
+ /// @param[in] vec A 3-vector of packets.
186
+ template <typename S>
187
+ Vector3P<S> operator*(const TransformT<S>& xf, const Vector3P<S>& vec) {
188
+ return momentum::operator+(momentum::operator*(xf.toLinear(), vec), xf.translation);
189
+ }
190
+
191
+ /// Calculates cross product of Eigen::Vector3f and Vector3P
192
+ ///
193
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
194
+ /// Eigen::Vector3f.
195
+ /// @param[in] v1 A 3D vector of Eigen.
196
+ /// @param[in] v2 A 3-vector of packets.
197
+ template <typename S, typename Derived>
198
+ Vector3P<S> cross(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
199
+ return {
200
+ drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
201
+ drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
202
+ drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
203
+ };
204
+ }
205
+
206
+ /// Calculates cross product of Vector3P and Eigen::Vector3f
207
+ ///
208
+ /// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
209
+ /// Eigen::Vector3f.
210
+ /// @param[in] v1 A 3-vector of packets.
211
+ /// @param[in] v2 A 3D vector of Eigen.
212
+ template <typename S, typename Derived>
213
+ Vector3P<S> cross(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
214
+ return {
215
+ drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
216
+ drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
217
+ drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
218
+ };
219
+ }
220
+
221
+ } // namespace momentum