pymomentum-cpu 0.1.93.post0__cp312-cp312-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.
Files changed (517) hide show
  1. include/axel/BoundingBox.h +59 -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 +87 -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 +208 -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 +97 -0
  30. include/momentum/character/blend_shape_base.h +86 -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 +94 -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 +207 -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 +227 -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 +155 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -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 +943 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/height_error_function.h +176 -0
  75. include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
  76. include/momentum/character_solver/limit_error_function.h +57 -0
  77. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  78. include/momentum/character_solver/normal_error_function.h +73 -0
  79. include/momentum/character_solver/orientation_error_function.h +74 -0
  80. include/momentum/character_solver/plane_error_function.h +102 -0
  81. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  82. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  83. include/momentum/character_solver/position_error_function.h +75 -0
  84. include/momentum/character_solver/projection_error_function.h +93 -0
  85. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  86. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  87. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  88. include/momentum/character_solver/simd_position_error_function.h +165 -0
  89. include/momentum/character_solver/skeleton_error_function.h +151 -0
  90. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  91. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  92. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  93. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  94. include/momentum/character_solver/state_error_function.h +119 -0
  95. include/momentum/character_solver/transform_pose.h +80 -0
  96. include/momentum/character_solver/trust_region_qr.h +80 -0
  97. include/momentum/character_solver/vertex_error_function.h +155 -0
  98. include/momentum/character_solver/vertex_projection_error_function.h +117 -0
  99. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
  100. include/momentum/common/aligned.h +155 -0
  101. include/momentum/common/checks.h +27 -0
  102. include/momentum/common/exception.h +70 -0
  103. include/momentum/common/filesystem.h +20 -0
  104. include/momentum/common/fwd.h +27 -0
  105. include/momentum/common/log.h +173 -0
  106. include/momentum/common/log_channel.h +17 -0
  107. include/momentum/common/memory.h +71 -0
  108. include/momentum/common/profile.h +79 -0
  109. include/momentum/common/progress_bar.h +37 -0
  110. include/momentum/common/string.h +52 -0
  111. include/momentum/diff_ik/ceres_utility.h +73 -0
  112. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  113. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  114. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  115. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  116. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  117. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  118. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  119. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  120. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  121. include/momentum/diff_ik/fwd.h +385 -0
  122. include/momentum/diff_ik/union_error_function.h +67 -0
  123. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  124. include/momentum/gui/rerun/logger.h +102 -0
  125. include/momentum/gui/rerun/logging_redirect.h +27 -0
  126. include/momentum/io/character_io.h +98 -0
  127. include/momentum/io/common/gsl_utils.h +50 -0
  128. include/momentum/io/common/stream_utils.h +65 -0
  129. include/momentum/io/fbx/fbx_io.h +135 -0
  130. include/momentum/io/fbx/fbx_memory_stream.h +70 -0
  131. include/momentum/io/fbx/openfbx_loader.h +62 -0
  132. include/momentum/io/fbx/polygon_data.h +60 -0
  133. include/momentum/io/file_save_options.h +107 -0
  134. include/momentum/io/gltf/gltf_builder.h +141 -0
  135. include/momentum/io/gltf/gltf_io.h +149 -0
  136. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  137. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  138. include/momentum/io/gltf/utils/json_utils.h +102 -0
  139. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  140. include/momentum/io/marker/c3d_io.h +30 -0
  141. include/momentum/io/marker/conversions.h +57 -0
  142. include/momentum/io/marker/coordinate_system.h +30 -0
  143. include/momentum/io/marker/marker_io.h +56 -0
  144. include/momentum/io/marker/trc_io.h +27 -0
  145. include/momentum/io/motion/mmo_io.h +97 -0
  146. include/momentum/io/shape/blend_shape_io.h +82 -0
  147. include/momentum/io/shape/pose_shape_io.h +21 -0
  148. include/momentum/io/skeleton/locator_io.h +41 -0
  149. include/momentum/io/skeleton/mppca_io.h +26 -0
  150. include/momentum/io/skeleton/parameter_limits_io.h +38 -0
  151. include/momentum/io/skeleton/parameter_transform_io.h +80 -0
  152. include/momentum/io/skeleton/parameters_io.h +20 -0
  153. include/momentum/io/skeleton/utility.h +67 -0
  154. include/momentum/io/urdf/urdf_io.h +26 -0
  155. include/momentum/io/usd/usd_io.h +36 -0
  156. include/momentum/marker_tracking/app_utils.h +64 -0
  157. include/momentum/marker_tracking/marker_tracker.h +221 -0
  158. include/momentum/marker_tracking/process_markers.h +58 -0
  159. include/momentum/marker_tracking/tracker_utils.h +99 -0
  160. include/momentum/math/constants.h +82 -0
  161. include/momentum/math/covariance_matrix.h +84 -0
  162. include/momentum/math/fmt_eigen.h +23 -0
  163. include/momentum/math/fwd.h +132 -0
  164. include/momentum/math/generalized_loss.h +61 -0
  165. include/momentum/math/intersection.h +32 -0
  166. include/momentum/math/mesh.h +84 -0
  167. include/momentum/math/mppca.h +67 -0
  168. include/momentum/math/online_householder_qr.h +516 -0
  169. include/momentum/math/random-inl.h +404 -0
  170. include/momentum/math/random.h +310 -0
  171. include/momentum/math/simd_generalized_loss.h +40 -0
  172. include/momentum/math/transform.h +229 -0
  173. include/momentum/math/types.h +461 -0
  174. include/momentum/math/utility.h +324 -0
  175. include/momentum/rasterizer/camera.h +453 -0
  176. include/momentum/rasterizer/fwd.h +102 -0
  177. include/momentum/rasterizer/geometry.h +83 -0
  178. include/momentum/rasterizer/image.h +18 -0
  179. include/momentum/rasterizer/rasterizer.h +583 -0
  180. include/momentum/rasterizer/tensor.h +140 -0
  181. include/momentum/rasterizer/text_rasterizer.h +89 -0
  182. include/momentum/rasterizer/utility.h +268 -0
  183. include/momentum/simd/simd.h +221 -0
  184. include/momentum/solver/fwd.h +131 -0
  185. include/momentum/solver/gauss_newton_solver.h +136 -0
  186. include/momentum/solver/gradient_descent_solver.h +65 -0
  187. include/momentum/solver/solver.h +155 -0
  188. include/momentum/solver/solver_function.h +126 -0
  189. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  190. include/rerun/archetypes/annotation_context.hpp +157 -0
  191. include/rerun/archetypes/arrows2d.hpp +271 -0
  192. include/rerun/archetypes/arrows3d.hpp +257 -0
  193. include/rerun/archetypes/asset3d.hpp +262 -0
  194. include/rerun/archetypes/asset_video.hpp +275 -0
  195. include/rerun/archetypes/bar_chart.hpp +261 -0
  196. include/rerun/archetypes/boxes2d.hpp +293 -0
  197. include/rerun/archetypes/boxes3d.hpp +369 -0
  198. include/rerun/archetypes/capsules3d.hpp +333 -0
  199. include/rerun/archetypes/clear.hpp +180 -0
  200. include/rerun/archetypes/depth_image.hpp +425 -0
  201. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  202. include/rerun/archetypes/encoded_image.hpp +250 -0
  203. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  204. include/rerun/archetypes/geo_points.hpp +177 -0
  205. include/rerun/archetypes/graph_edges.hpp +152 -0
  206. include/rerun/archetypes/graph_nodes.hpp +206 -0
  207. include/rerun/archetypes/image.hpp +434 -0
  208. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  209. include/rerun/archetypes/line_strips2d.hpp +289 -0
  210. include/rerun/archetypes/line_strips3d.hpp +270 -0
  211. include/rerun/archetypes/mesh3d.hpp +387 -0
  212. include/rerun/archetypes/pinhole.hpp +385 -0
  213. include/rerun/archetypes/points2d.hpp +333 -0
  214. include/rerun/archetypes/points3d.hpp +369 -0
  215. include/rerun/archetypes/recording_properties.hpp +132 -0
  216. include/rerun/archetypes/scalar.hpp +170 -0
  217. include/rerun/archetypes/scalars.hpp +153 -0
  218. include/rerun/archetypes/segmentation_image.hpp +305 -0
  219. include/rerun/archetypes/series_line.hpp +274 -0
  220. include/rerun/archetypes/series_lines.hpp +271 -0
  221. include/rerun/archetypes/series_point.hpp +265 -0
  222. include/rerun/archetypes/series_points.hpp +251 -0
  223. include/rerun/archetypes/tensor.hpp +213 -0
  224. include/rerun/archetypes/text_document.hpp +200 -0
  225. include/rerun/archetypes/text_log.hpp +211 -0
  226. include/rerun/archetypes/transform3d.hpp +925 -0
  227. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  228. include/rerun/archetypes/view_coordinates.hpp +393 -0
  229. include/rerun/archetypes.hpp +43 -0
  230. include/rerun/arrow_utils.hpp +32 -0
  231. include/rerun/as_components.hpp +90 -0
  232. include/rerun/blueprint/archetypes/background.hpp +113 -0
  233. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  234. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  235. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  236. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  237. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  238. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  239. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  240. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  241. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  242. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  243. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  244. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  245. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  246. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  247. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  248. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  249. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  250. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  251. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  252. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  253. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  254. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  255. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  256. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  257. include/rerun/blueprint/archetypes.hpp +29 -0
  258. include/rerun/blueprint/components/active_tab.hpp +82 -0
  259. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  260. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  261. include/rerun/blueprint/components/auto_views.hpp +77 -0
  262. include/rerun/blueprint/components/background_kind.hpp +66 -0
  263. include/rerun/blueprint/components/column_share.hpp +78 -0
  264. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  265. include/rerun/blueprint/components/container_kind.hpp +65 -0
  266. include/rerun/blueprint/components/corner2d.hpp +64 -0
  267. include/rerun/blueprint/components/enabled.hpp +77 -0
  268. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  269. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  270. include/rerun/blueprint/components/force_distance.hpp +82 -0
  271. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  272. include/rerun/blueprint/components/force_strength.hpp +82 -0
  273. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  274. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  275. include/rerun/blueprint/components/included_content.hpp +86 -0
  276. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  277. include/rerun/blueprint/components/map_provider.hpp +64 -0
  278. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  279. include/rerun/blueprint/components/panel_state.hpp +61 -0
  280. include/rerun/blueprint/components/query_expression.hpp +89 -0
  281. include/rerun/blueprint/components/root_container.hpp +77 -0
  282. include/rerun/blueprint/components/row_share.hpp +78 -0
  283. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  284. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  285. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  286. include/rerun/blueprint/components/view_class.hpp +76 -0
  287. include/rerun/blueprint/components/view_fit.hpp +61 -0
  288. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  289. include/rerun/blueprint/components/view_origin.hpp +81 -0
  290. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  291. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  292. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  293. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  294. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  295. include/rerun/blueprint/components.hpp +41 -0
  296. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  297. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  298. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  299. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  300. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  301. include/rerun/blueprint/datatypes.hpp +9 -0
  302. include/rerun/c/arrow_c_data_interface.h +111 -0
  303. include/rerun/c/compiler_utils.h +10 -0
  304. include/rerun/c/rerun.h +627 -0
  305. include/rerun/c/sdk_info.h +28 -0
  306. include/rerun/collection.hpp +496 -0
  307. include/rerun/collection_adapter.hpp +43 -0
  308. include/rerun/collection_adapter_builtins.hpp +138 -0
  309. include/rerun/compiler_utils.hpp +61 -0
  310. include/rerun/component_batch.hpp +163 -0
  311. include/rerun/component_column.hpp +111 -0
  312. include/rerun/component_descriptor.hpp +142 -0
  313. include/rerun/component_type.hpp +35 -0
  314. include/rerun/components/aggregation_policy.hpp +76 -0
  315. include/rerun/components/albedo_factor.hpp +74 -0
  316. include/rerun/components/annotation_context.hpp +102 -0
  317. include/rerun/components/axis_length.hpp +74 -0
  318. include/rerun/components/blob.hpp +73 -0
  319. include/rerun/components/class_id.hpp +71 -0
  320. include/rerun/components/clear_is_recursive.hpp +75 -0
  321. include/rerun/components/color.hpp +99 -0
  322. include/rerun/components/colormap.hpp +99 -0
  323. include/rerun/components/depth_meter.hpp +84 -0
  324. include/rerun/components/draw_order.hpp +79 -0
  325. include/rerun/components/entity_path.hpp +83 -0
  326. include/rerun/components/fill_mode.hpp +72 -0
  327. include/rerun/components/fill_ratio.hpp +79 -0
  328. include/rerun/components/gamma_correction.hpp +80 -0
  329. include/rerun/components/geo_line_string.hpp +63 -0
  330. include/rerun/components/graph_edge.hpp +75 -0
  331. include/rerun/components/graph_node.hpp +79 -0
  332. include/rerun/components/graph_type.hpp +57 -0
  333. include/rerun/components/half_size2d.hpp +91 -0
  334. include/rerun/components/half_size3d.hpp +95 -0
  335. include/rerun/components/image_buffer.hpp +86 -0
  336. include/rerun/components/image_format.hpp +84 -0
  337. include/rerun/components/image_plane_distance.hpp +77 -0
  338. include/rerun/components/interactive.hpp +76 -0
  339. include/rerun/components/keypoint_id.hpp +74 -0
  340. include/rerun/components/lat_lon.hpp +89 -0
  341. include/rerun/components/length.hpp +77 -0
  342. include/rerun/components/line_strip2d.hpp +73 -0
  343. include/rerun/components/line_strip3d.hpp +73 -0
  344. include/rerun/components/magnification_filter.hpp +63 -0
  345. include/rerun/components/marker_shape.hpp +82 -0
  346. include/rerun/components/marker_size.hpp +74 -0
  347. include/rerun/components/media_type.hpp +157 -0
  348. include/rerun/components/name.hpp +83 -0
  349. include/rerun/components/opacity.hpp +77 -0
  350. include/rerun/components/pinhole_projection.hpp +94 -0
  351. include/rerun/components/plane3d.hpp +75 -0
  352. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  353. include/rerun/components/pose_rotation_quat.hpp +71 -0
  354. include/rerun/components/pose_scale3d.hpp +102 -0
  355. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  356. include/rerun/components/pose_translation3d.hpp +96 -0
  357. include/rerun/components/position2d.hpp +86 -0
  358. include/rerun/components/position3d.hpp +90 -0
  359. include/rerun/components/radius.hpp +98 -0
  360. include/rerun/components/range1d.hpp +75 -0
  361. include/rerun/components/resolution.hpp +88 -0
  362. include/rerun/components/rotation_axis_angle.hpp +72 -0
  363. include/rerun/components/rotation_quat.hpp +71 -0
  364. include/rerun/components/scalar.hpp +76 -0
  365. include/rerun/components/scale3d.hpp +102 -0
  366. include/rerun/components/series_visible.hpp +76 -0
  367. include/rerun/components/show_labels.hpp +79 -0
  368. include/rerun/components/stroke_width.hpp +74 -0
  369. include/rerun/components/tensor_data.hpp +94 -0
  370. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  371. include/rerun/components/tensor_height_dimension.hpp +71 -0
  372. include/rerun/components/tensor_width_dimension.hpp +71 -0
  373. include/rerun/components/texcoord2d.hpp +101 -0
  374. include/rerun/components/text.hpp +83 -0
  375. include/rerun/components/text_log_level.hpp +110 -0
  376. include/rerun/components/timestamp.hpp +76 -0
  377. include/rerun/components/transform_mat3x3.hpp +92 -0
  378. include/rerun/components/transform_relation.hpp +66 -0
  379. include/rerun/components/translation3d.hpp +96 -0
  380. include/rerun/components/triangle_indices.hpp +85 -0
  381. include/rerun/components/value_range.hpp +78 -0
  382. include/rerun/components/vector2d.hpp +92 -0
  383. include/rerun/components/vector3d.hpp +96 -0
  384. include/rerun/components/video_timestamp.hpp +120 -0
  385. include/rerun/components/view_coordinates.hpp +346 -0
  386. include/rerun/components/visible.hpp +74 -0
  387. include/rerun/components.hpp +77 -0
  388. include/rerun/config.hpp +52 -0
  389. include/rerun/datatypes/angle.hpp +76 -0
  390. include/rerun/datatypes/annotation_info.hpp +76 -0
  391. include/rerun/datatypes/blob.hpp +67 -0
  392. include/rerun/datatypes/bool.hpp +57 -0
  393. include/rerun/datatypes/channel_datatype.hpp +87 -0
  394. include/rerun/datatypes/class_description.hpp +92 -0
  395. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  396. include/rerun/datatypes/class_id.hpp +62 -0
  397. include/rerun/datatypes/color_model.hpp +68 -0
  398. include/rerun/datatypes/dvec2d.hpp +76 -0
  399. include/rerun/datatypes/entity_path.hpp +60 -0
  400. include/rerun/datatypes/float32.hpp +62 -0
  401. include/rerun/datatypes/float64.hpp +62 -0
  402. include/rerun/datatypes/image_format.hpp +107 -0
  403. include/rerun/datatypes/keypoint_id.hpp +63 -0
  404. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  405. include/rerun/datatypes/mat3x3.hpp +105 -0
  406. include/rerun/datatypes/mat4x4.hpp +119 -0
  407. include/rerun/datatypes/pixel_format.hpp +142 -0
  408. include/rerun/datatypes/plane3d.hpp +60 -0
  409. include/rerun/datatypes/quaternion.hpp +110 -0
  410. include/rerun/datatypes/range1d.hpp +59 -0
  411. include/rerun/datatypes/range2d.hpp +55 -0
  412. include/rerun/datatypes/rgba32.hpp +94 -0
  413. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  414. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  415. include/rerun/datatypes/tensor_data.hpp +100 -0
  416. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  417. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  418. include/rerun/datatypes/time_int.hpp +62 -0
  419. include/rerun/datatypes/time_range.hpp +55 -0
  420. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  421. include/rerun/datatypes/uint16.hpp +62 -0
  422. include/rerun/datatypes/uint32.hpp +62 -0
  423. include/rerun/datatypes/uint64.hpp +62 -0
  424. include/rerun/datatypes/utf8.hpp +76 -0
  425. include/rerun/datatypes/utf8pair.hpp +62 -0
  426. include/rerun/datatypes/uuid.hpp +60 -0
  427. include/rerun/datatypes/uvec2d.hpp +76 -0
  428. include/rerun/datatypes/uvec3d.hpp +80 -0
  429. include/rerun/datatypes/uvec4d.hpp +59 -0
  430. include/rerun/datatypes/vec2d.hpp +76 -0
  431. include/rerun/datatypes/vec3d.hpp +80 -0
  432. include/rerun/datatypes/vec4d.hpp +84 -0
  433. include/rerun/datatypes/video_timestamp.hpp +67 -0
  434. include/rerun/datatypes/view_coordinates.hpp +87 -0
  435. include/rerun/datatypes/visible_time_range.hpp +57 -0
  436. include/rerun/datatypes.hpp +51 -0
  437. include/rerun/demo_utils.hpp +75 -0
  438. include/rerun/entity_path.hpp +20 -0
  439. include/rerun/error.hpp +180 -0
  440. include/rerun/half.hpp +10 -0
  441. include/rerun/image_utils.hpp +187 -0
  442. include/rerun/indicator_component.hpp +59 -0
  443. include/rerun/loggable.hpp +54 -0
  444. include/rerun/recording_stream.hpp +960 -0
  445. include/rerun/rerun_sdk_export.hpp +25 -0
  446. include/rerun/result.hpp +86 -0
  447. include/rerun/rotation3d.hpp +33 -0
  448. include/rerun/sdk_info.hpp +20 -0
  449. include/rerun/spawn.hpp +21 -0
  450. include/rerun/spawn_options.hpp +57 -0
  451. include/rerun/string_utils.hpp +16 -0
  452. include/rerun/third_party/cxxopts.hpp +2198 -0
  453. include/rerun/time_column.hpp +288 -0
  454. include/rerun/timeline.hpp +38 -0
  455. include/rerun/type_traits.hpp +40 -0
  456. include/rerun.hpp +86 -0
  457. lib/cmake/axel/axel-config.cmake +45 -0
  458. lib/cmake/axel/axelTargets-release.cmake +19 -0
  459. lib/cmake/axel/axelTargets.cmake +108 -0
  460. lib/cmake/momentum/FindFbxSdk.cmake +115 -0
  461. lib/cmake/momentum/Findre2.cmake +52 -0
  462. lib/cmake/momentum/momentum-config.cmake +67 -0
  463. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  464. lib/cmake/momentum/momentumTargets.cmake +385 -0
  465. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  466. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  467. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  468. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  469. lib/libarrow.a +0 -0
  470. lib/libarrow_bundled_dependencies.a +0 -0
  471. lib/libaxel.a +0 -0
  472. lib/libmomentum_app_utils.a +0 -0
  473. lib/libmomentum_character.a +0 -0
  474. lib/libmomentum_character_sequence_solver.a +0 -0
  475. lib/libmomentum_character_solver.a +0 -0
  476. lib/libmomentum_common.a +0 -0
  477. lib/libmomentum_diff_ik.a +0 -0
  478. lib/libmomentum_io.a +0 -0
  479. lib/libmomentum_io_common.a +0 -0
  480. lib/libmomentum_io_fbx.a +0 -0
  481. lib/libmomentum_io_gltf.a +0 -0
  482. lib/libmomentum_io_legacy_json.a +0 -0
  483. lib/libmomentum_io_marker.a +0 -0
  484. lib/libmomentum_io_motion.a +0 -0
  485. lib/libmomentum_io_shape.a +0 -0
  486. lib/libmomentum_io_skeleton.a +0 -0
  487. lib/libmomentum_io_urdf.a +0 -0
  488. lib/libmomentum_marker_tracker.a +0 -0
  489. lib/libmomentum_math.a +0 -0
  490. lib/libmomentum_online_qr.a +0 -0
  491. lib/libmomentum_process_markers.a +0 -0
  492. lib/libmomentum_rerun.a +0 -0
  493. lib/libmomentum_simd_constraints.a +0 -0
  494. lib/libmomentum_simd_generalized_loss.a +0 -0
  495. lib/libmomentum_skeleton.a +0 -0
  496. lib/libmomentum_solver.a +0 -0
  497. lib/librerun_c__macos_arm64.a +0 -0
  498. lib/librerun_sdk.a +0 -0
  499. pymomentum/axel.cpython-312-darwin.so +0 -0
  500. pymomentum/backend/__init__.py +16 -0
  501. pymomentum/backend/skel_state_backend.py +631 -0
  502. pymomentum/backend/trs_backend.py +889 -0
  503. pymomentum/backend/utils.py +224 -0
  504. pymomentum/geometry.cpython-312-darwin.so +0 -0
  505. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  506. pymomentum/quaternion.py +740 -0
  507. pymomentum/skel_state.py +514 -0
  508. pymomentum/solver.cpython-312-darwin.so +0 -0
  509. pymomentum/solver2.cpython-312-darwin.so +0 -0
  510. pymomentum/torch/character.py +868 -0
  511. pymomentum/torch/parameter_limits.py +494 -0
  512. pymomentum/torch/utility.py +20 -0
  513. pymomentum/trs.py +535 -0
  514. pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
  515. pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
  516. pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
  517. pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,27 @@
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 <rerun.hpp>
11
+
12
+ #include <string>
13
+
14
+ namespace momentum {
15
+
16
+ /// Redirects logs from the XR_LOG framework to the Rerun logger.
17
+ ///
18
+ /// This function registers a custom log sink for the XR_LOG framework, redirecting its log messages
19
+ /// to the Rerun logger. The redirection is only performed once, and subsequent calls to this
20
+ /// function have no effect.
21
+ ///
22
+ /// @param[in] rec The recording stream to which to write the logs. You should make sure the
23
+ /// lifetime of this is longer than the loggings from momentum libraries.
24
+ /// @return Returns true if the redirection is successful or has already been done.
25
+ bool redirectLogsToRerun(const rerun::RecordingStream& rec);
26
+
27
+ } // namespace momentum
@@ -0,0 +1,98 @@
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/character/fwd.h>
11
+ #include <momentum/character/marker.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/file_save_options.h>
14
+ #include <momentum/math/fwd.h>
15
+ #include <momentum/math/types.h>
16
+
17
+ #include <string>
18
+ #include <vector>
19
+
20
+ namespace momentum {
21
+
22
+ /// Represents the supported character formats.
23
+ enum class CharacterFormat : uint8_t {
24
+ Fbx, ///< FBX file format.
25
+ Gltf, ///< glTF file format.
26
+ Usd, ///< USD file format.
27
+ Unknown ///< Unknown or unsupported file format.
28
+ };
29
+
30
+ /// High level function to load a character of any type, with a local path.
31
+ ///
32
+ /// @param[in] characterPath The path to the character file.
33
+ /// @param[in] parametersPath The optional path to the file containing additional parameters for the
34
+ /// character.
35
+ /// @param[in] locatorsPath The optional path to the file containing additional locators for the
36
+ /// character.
37
+ /// @return The loaded Character object.
38
+ ///
39
+ /// Currently, only supports .glb and .fbx. If you want to parse from a non-local path, you may need
40
+ /// to parse it using your favorite resource retriever into a buffer and use the buffer version of
41
+ /// this function.
42
+ [[nodiscard]] Character loadFullCharacter(
43
+ const std::string& characterPath,
44
+ const std::string& parametersPath = std::string(),
45
+ const std::string& locatorsPath = std::string());
46
+
47
+ /// Buffer version of loadFullCharacter function, supports .glb and .fbx file formats.
48
+ ///
49
+ /// @param[in] format The character file format.
50
+ /// @param[in] characterBuffer The buffer containing the character data.
51
+ /// @param[in] paramBuffer The optional buffer containing additional parameters for the character.
52
+ /// @param[in] locBuffer The optional buffer containing additional locators for the character.
53
+ /// @return The loaded Character object.
54
+ [[nodiscard]] Character loadFullCharacterFromBuffer(
55
+ CharacterFormat format,
56
+ std::span<const std::byte> characterBuffer,
57
+ std::span<const std::byte> paramBuffer = std::span<const std::byte>(),
58
+ std::span<const std::byte> locBuffer = std::span<const std::byte>());
59
+
60
+ /// High level function to save a character with motion and markers to any supported format.
61
+ ///
62
+ /// The format is determined by the file extension (.fbx, .glb, .gltf).
63
+ /// This is a unified interface that automatically selects between FBX and GLTF based on extension.
64
+ /// @param[in] filename The path where the character file will be saved.
65
+ /// @param[in] character The Character object to save.
66
+ /// @param[in] fps Frame rate for the animation (default: 120.0f).
67
+ /// @param[in] motion The motion represented in model parameters (numModelParams, numFrames).
68
+ /// @param[in] markerSequence Optional marker sequence data to save with the character.
69
+ /// @param[in] options Optional file save options for controlling output (default:
70
+ /// FileSaveOptions{}).
71
+ void saveCharacter(
72
+ const filesystem::path& filename,
73
+ const Character& character,
74
+ float fps = 120.f,
75
+ const MatrixXf& motion = MatrixXf(),
76
+ std::span<const std::vector<Marker>> markerSequence = {},
77
+ const FileSaveOptions& options = FileSaveOptions());
78
+
79
+ /// High level function to save a character with motion in skeleton states and markers to any
80
+ /// supported format.
81
+ ///
82
+ /// The format is determined by the file extension (.fbx, .glb, .gltf).
83
+ /// This is a unified interface that automatically selects between FBX and GLTF based on extension.
84
+ /// @param[in] filename The path where the character file will be saved.
85
+ /// @param[in] character The Character object to save.
86
+ /// @param[in] fps Frame rate for the animation.
87
+ /// @param[in] skeletonStates The motion represented in skeleton states (ie. JointStates).
88
+ /// @param[in] markerSequence Optional marker sequence data to save with the character.
89
+ /// @param[in] options Optional file save options for controlling output (default:
90
+ /// FileSaveOptions{}).
91
+ void saveCharacter(
92
+ const filesystem::path& filename,
93
+ const Character& character,
94
+ float fps,
95
+ std::span<const SkeletonState> skeletonStates,
96
+ std::span<const std::vector<Marker>> markerSequence = {},
97
+ const FileSaveOptions& options = FileSaveOptions());
98
+ } // namespace momentum
@@ -0,0 +1,50 @@
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 <gsl/gsl>
11
+
12
+ namespace momentum {
13
+
14
+ /// Casts a span of bytes to a span of a different type
15
+ ///
16
+ /// This function takes a span of bytes and returns a span of a different type, by reinterpreting
17
+ /// the bytes as the new type. This function is useful when working with serialized data or when
18
+ /// dealing with raw memory. The function assumes that the size of the new type is an exact multiple
19
+ /// of the size of the original span.
20
+ ///
21
+ /// @tparam T The type to cast the span to
22
+ /// @param bs The original span of bytes to cast
23
+ ///
24
+ /// @return A span of the new type, with the same number of elements as the original span
25
+ template <typename T>
26
+ [[nodiscard]] std::span<T> cast_span(std::span<std::byte> bs) {
27
+ auto ptr = reinterpret_cast<T*>(bs.data());
28
+ auto tsize = gsl::narrow<decltype(bs)::size_type>(sizeof(T));
29
+ return {ptr, bs.size_bytes() / tsize};
30
+ }
31
+
32
+ /// Casts a span of const bytes to a span of a different type
33
+ ///
34
+ /// This function takes a span of const bytes and returns a span of a different type, by
35
+ /// reinterpreting the bytes as the new type. This function is useful when working with serialized
36
+ /// data or when dealing with raw memory. The function assumes that the size of the new type is an
37
+ /// exact multiple of the size of the original span.
38
+ ///
39
+ /// @tparam T The type to cast the span to
40
+ /// @param bs The original span of const bytes to cast
41
+ ///
42
+ /// @return A span of the new type, with the same number of elements as the original span
43
+ template <typename T>
44
+ [[nodiscard]] std::span<const T> cast_span(std::span<const std::byte> bs) {
45
+ auto ptr = reinterpret_cast<const T*>(bs.data());
46
+ auto tsize = gsl::narrow<decltype(bs)::size_type>(sizeof(T));
47
+ return {ptr, bs.size_bytes() / tsize};
48
+ }
49
+
50
+ } // namespace momentum
@@ -0,0 +1,65 @@
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 <gsl/gsl>
11
+
12
+ #include <istream>
13
+ #include <streambuf>
14
+ #include <string>
15
+
16
+ namespace momentum {
17
+
18
+ /// Stream buffer based on a span.
19
+ /// Used to avoid copying the span when creating a std::istream:
20
+ /// spanstreambuf sbuf(str);
21
+ /// std::istream inputStream(&sbuf);
22
+ struct spanstreambuf : std::streambuf {
23
+ /// Construct a spanstreambuf with an optional buffer.
24
+ ///
25
+ /// @param buffer A std::span of const std::byte (default: empty span).
26
+ spanstreambuf(std::span<const std::byte> buffer = {});
27
+
28
+ /// Destructor.
29
+ virtual ~spanstreambuf() override;
30
+
31
+ protected:
32
+ /// Write a sequence of characters to the output buffer.
33
+ ///
34
+ /// @param s A pointer to the character sequence to be written.
35
+ /// @param n The number of characters to write.
36
+ /// @return The number of characters successfully written.
37
+ std::streamsize xsputn(const char_type* s, std::streamsize n) override;
38
+ };
39
+
40
+ /// istream that takes a span of const bytes as input.
41
+ struct ispanstream : std::istream {
42
+ /// Construct an ispanstream with a buffer.
43
+ ///
44
+ /// @param buffer A std::span of const std::byte.
45
+ explicit ispanstream(std::span<const std::byte> buffer);
46
+
47
+ /// Destructor.
48
+ virtual ~ispanstream();
49
+
50
+ private:
51
+ /// Internal spanstreambuf instance.
52
+ spanstreambuf sbuf_;
53
+ };
54
+
55
+ /// Reads a line from the input stream, handling line endings for different platforms.
56
+ ///
57
+ /// This function reads a line from the given input stream and stores it in the 'line' parameter.
58
+ /// It properly handles line endings for different platforms (e.g., LF for Unix, CRLF for Windows).
59
+ ///
60
+ /// @param[in,out] is Reference to the input stream from which the line should be read.
61
+ /// @param[in,out] line Reference to the string variable where the line will be stored.
62
+ /// @return Reference to the input stream after reading the line.
63
+ std::istream& GetLineCrossPlatform(std::istream& is, std::string& line);
64
+
65
+ } // namespace momentum
@@ -0,0 +1,135 @@
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/character/fwd.h>
11
+ #include <momentum/character/marker.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/file_save_options.h>
14
+ #include <momentum/math/types.h>
15
+
16
+ #include <span>
17
+
18
+ #include <string_view>
19
+
20
+ namespace momentum {
21
+
22
+ // KeepLocators Specifies whether Nulls in the transform hierarchy should be turned into Locators.
23
+ enum class KeepLocators { No, Yes };
24
+
25
+ // LoadBlendShapes Specifies whether blendshapes should be loaded or not
26
+ enum class LoadBlendShapes { No, Yes };
27
+
28
+ // Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
29
+ // This is different from historical momentum behavior so it's off by default.
30
+ // Permissive mode allows loading mesh-only characters (without skin weights).
31
+ Character loadFbxCharacter(
32
+ const filesystem::path& inputPath,
33
+ KeepLocators keepLocators = KeepLocators::No,
34
+ Permissive permissive = Permissive::No,
35
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
36
+ bool stripNamespaces = true);
37
+
38
+ // Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
39
+ // This is different from historical momentum behavior so it's off by default.
40
+ // Permissive mode allows loading mesh-only characters (without skin weights).
41
+ Character loadFbxCharacter(
42
+ std::span<const std::byte> inputSpan,
43
+ KeepLocators keepLocators = KeepLocators::No,
44
+ Permissive permissive = Permissive::No,
45
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
46
+ bool stripNamespaces = true);
47
+
48
+ // Permissive mode allows loading mesh-only characters (without skin weights).
49
+ std::tuple<Character, std::vector<MatrixXf>, float> loadFbxCharacterWithMotion(
50
+ const filesystem::path& inputPath,
51
+ KeepLocators keepLocators = KeepLocators::No,
52
+ Permissive permissive = Permissive::No,
53
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
54
+ bool stripNamespaces = true);
55
+
56
+ // Permissive mode allows loading mesh-only characters (without skin weights).
57
+ std::tuple<Character, std::vector<MatrixXf>, float> loadFbxCharacterWithMotion(
58
+ std::span<const std::byte> inputSpan,
59
+ KeepLocators keepLocatorss = KeepLocators::No,
60
+ Permissive permissive = Permissive::No,
61
+ LoadBlendShapes loadBlendShape = LoadBlendShapes::No,
62
+ bool stripNamespaces = true);
63
+
64
+ /// Save a character with animation to an FBX file.
65
+ /// @param filename Path to the output FBX file
66
+ /// @param character The character to save
67
+ /// @param poses Model parameters for each frame (empty for bind pose only)
68
+ /// @param identity Identity pose parameters (empty to use bind pose)
69
+ /// @param framerate Animation framerate in frames per second
70
+ /// @param markerSequence Optional marker sequence data to save with the character
71
+ /// @param options Optional file save options for controlling output (default: FileSaveOptions{})
72
+ void saveFbx(
73
+ const filesystem::path& filename,
74
+ const Character& character,
75
+ const MatrixXf& poses = MatrixXf(),
76
+ const VectorXf& identity = VectorXf(),
77
+ double framerate = 120.0,
78
+ std::span<const std::vector<Marker>> markerSequence = {},
79
+ const FileSaveOptions& options = FileSaveOptions());
80
+
81
+ /// Save a character with animation using joint parameters directly.
82
+ /// @param filename Path to the output FBX file
83
+ /// @param character The character to save
84
+ /// @param jointParams Joint parameters for each frame (empty for bind pose only)
85
+ /// @param framerate Animation framerate in frames per second
86
+ /// @param markerSequence Optional marker sequence data to save with the character
87
+ /// @param options Optional file save options for controlling output (default: FileSaveOptions{})
88
+ void saveFbxWithJointParams(
89
+ const filesystem::path& filename,
90
+ const Character& character,
91
+ const MatrixXf& jointParams = MatrixXf(),
92
+ double framerate = 120.0,
93
+ std::span<const std::vector<Marker>> markerSequence = {},
94
+ const FileSaveOptions& options = FileSaveOptions());
95
+
96
+ /// Save a character with animation using skeleton states directly.
97
+ /// @param filename Path to the output FBX file
98
+ /// @param character The character to save
99
+ /// @param skeletonStates SkeletonState for each frame (empty for bind pose only)
100
+ /// @param framerate Animation framerate in frames per second
101
+ /// @param markerSequence Optional marker sequence data to save with the character
102
+ /// @param options Optional file save options for controlling output (default: FileSaveOptions{})
103
+ void saveFbxWithSkeletonStates(
104
+ const filesystem::path& filename,
105
+ const Character& character,
106
+ std::span<const SkeletonState> skeletonStates,
107
+ double framerate = 120.0,
108
+ std::span<const std::vector<Marker>> markerSequence = {},
109
+ const FileSaveOptions& options = FileSaveOptions());
110
+
111
+ /// Save a character model (skeleton and mesh) without animation.
112
+ /// @param filename Path to the output FBX file
113
+ /// @param character The character to save
114
+ /// @param options Optional file save options for controlling output (default: FileSaveOptions{})
115
+ void saveFbxModel(
116
+ const filesystem::path& filename,
117
+ const Character& character,
118
+ const FileSaveOptions& options = FileSaveOptions());
119
+
120
+ /// Loads a MarkerSequence from an FBX file.
121
+ ///
122
+ /// This function reads motion capture marker data from an FBX file and returns
123
+ /// it as a MarkerSequence. The markers must be stored in the FBX scene hierarchy
124
+ /// under a "Markers" root node, and each marker node must have the custom property
125
+ /// "Momentum_Marker" to be recognized. The Markers root node must have the custom
126
+ /// property "Momentum_Markers_Root" to be identified.
127
+ ///
128
+ /// @param[in] filename Path to the FBX file containing marker data.
129
+ /// @param stripNamespaces Removes namespace from joints when true. True by default
130
+ /// @return A MarkerSequence object containing the marker animation data, including
131
+ /// marker positions per frame and fps. Returns an empty sequence if no
132
+ /// markers or animations are found.
133
+ MarkerSequence loadFbxMarkerSequence(const filesystem::path& filename, bool stripNamespaces = true);
134
+
135
+ } // namespace momentum
@@ -0,0 +1,70 @@
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
+ #ifdef MOMENTUM_WITH_FBX_SDK
11
+
12
+ #include <fbxsdk.h>
13
+ #include <fbxsdk/core/fbxstream.h>
14
+ #include <span>
15
+
16
+ #include <string_view>
17
+
18
+ #define FBX_VERSION_GE(major, minor, patch) \
19
+ ((FBXSDK_VERSION_MAJOR > (major)) || \
20
+ (FBXSDK_VERSION_MAJOR == (major) && FBXSDK_VERSION_MINOR > (minor)) || \
21
+ (FBXSDK_VERSION_MAJOR == (major) && FBXSDK_VERSION_MINOR == (minor) && \
22
+ FBXSDK_VERSION_POINT >= (patch)))
23
+
24
+ namespace momentum {
25
+
26
+ // Simplest FbxStream to read file from a string_view memory buffer
27
+ class FbxMemoryStream : public FbxStream {
28
+ public:
29
+ FbxMemoryStream(std::span<const std::byte> buffer, int pReaderId);
30
+ ~FbxMemoryStream() override;
31
+ EState GetState() override;
32
+ bool Open(void* pStreamData) override;
33
+ bool Close() override;
34
+ bool Flush() override;
35
+ #if FBX_VERSION_GE(2020, 3, 2)
36
+ size_t Write(const void* buffer, FbxUInt64 count) override;
37
+ size_t Read(void* buffer, FbxUInt64 count) const override;
38
+ #else
39
+ int Write(const void* buffer, int count) override;
40
+ int Read(void* buffer, int count) const override;
41
+ #endif
42
+ int GetReaderID() const override;
43
+ int GetWriterID() const override;
44
+ void Seek(const FbxInt64& pOffset, const FbxFile::ESeekPos& pSeekPos) override;
45
+ #if FBX_VERSION_GE(2020, 3, 2)
46
+ FbxInt64 GetPosition() const override;
47
+ void SetPosition(FbxInt64 pPosition) override;
48
+ #else
49
+ long GetPosition() const override;
50
+ void SetPosition(long pPosition) override;
51
+ #endif
52
+ int GetError() const override;
53
+ void ClearError() override;
54
+
55
+ private:
56
+ std::span<const std::byte> buffer_;
57
+ long length_;
58
+ #if FBX_VERSION_GE(2020, 3, 2)
59
+ mutable FbxInt64 position_{0};
60
+ #else
61
+ mutable long position_;
62
+ #endif
63
+ EState state_;
64
+ int readerId_;
65
+ mutable int errorCode_;
66
+ };
67
+
68
+ } // namespace momentum
69
+
70
+ #endif // MOMENTUM_WITH_FBX_SDK
@@ -0,0 +1,62 @@
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/character/fwd.h>
11
+ #include <momentum/character/marker.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/fbx/fbx_io.h>
14
+ #include <momentum/math/types.h>
15
+
16
+ #include <span>
17
+
18
+ namespace momentum {
19
+
20
+ // Custom property names for identifying Momentum-specific FBX nodes
21
+ constexpr const char* kMomentumMarkersRootProperty = "Momentum_Markers_Root";
22
+ constexpr const char* kMomentumMarkerProperty = "Momentum_Marker";
23
+
24
+ // Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
25
+ // This is different from historical momentum behavior so it's off by default.
26
+ // Permissive mode allows loading mesh-only characters (without skin weights).
27
+ Character loadOpenFbxCharacter(
28
+ const filesystem::path& inputPath,
29
+ KeepLocators keepLocators = KeepLocators::No,
30
+ Permissive permissive = Permissive::No,
31
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
32
+ bool stripNamespaces = true);
33
+
34
+ // Permissive mode allows loading mesh-only characters (without skin weights).
35
+ Character loadOpenFbxCharacter(
36
+ std::span<const std::byte> inputData,
37
+ KeepLocators keepLocators = KeepLocators::No,
38
+ Permissive permissive = Permissive::No,
39
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
40
+ bool stripNamespaces = true);
41
+
42
+ // Permissive mode allows loading mesh-only characters (without skin weights).
43
+ std::tuple<Character, std::vector<MatrixXf>, float> loadOpenFbxCharacterWithMotion(
44
+ const filesystem::path& inputPath,
45
+ KeepLocators keepLocators = KeepLocators::No,
46
+ Permissive permissive = Permissive::No,
47
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
48
+ bool stripNamespaces = true);
49
+
50
+ // Permissive mode allows loading mesh-only characters (without skin weights).
51
+ std::tuple<Character, std::vector<MatrixXf>, float> loadOpenFbxCharacterWithMotion(
52
+ std::span<const std::byte> inputData,
53
+ KeepLocators keepLocators = KeepLocators::No,
54
+ Permissive permissive = Permissive::No,
55
+ LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
56
+ bool stripNamespaces = true);
57
+
58
+ MarkerSequence loadOpenFbxMarkerSequence(
59
+ const filesystem::path& filename,
60
+ bool stripNamespaces = true);
61
+
62
+ } // namespace momentum
@@ -0,0 +1,60 @@
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/math/types.h>
11
+
12
+ #include <span>
13
+
14
+ #include <string>
15
+ #include <vector>
16
+
17
+ namespace momentum {
18
+
19
+ // Structure for holding arbitrary polygon data. We will read the data as-is from the
20
+ // FBX file and then triangulate at the end for momentum. Doing it this way allows us
21
+ // to split up the functionality (triangulating while you read complicates handling
22
+ // texture coordinates for example).
23
+ struct PolygonData {
24
+ // We will pack polygons in an array like this:
25
+ // The indices array will contain all the polygons indices packed back-to-back.
26
+ // 1 2 3 4 2 3 4 6 ...
27
+ // The offsets array will include an offset for the start and end of each polygon.
28
+ // 0 4 8 ...
29
+ // The advantage of doing it this way is that we have random access into the
30
+ // polygons. The disadvantage (compared to just providing an array of vertex counts)
31
+ // is that the offset array should always have one more than the number of polygons,
32
+ // which is a little confusing.
33
+ std::vector<uint32_t> indices;
34
+ std::vector<uint32_t> offsets;
35
+
36
+ // The texture coordinate indices for each face.
37
+ // Uses the same offsets array as the indices array.
38
+ // Note that this is allowed to be empty, but if not empty it
39
+ // must be the same size as the indices array.
40
+ std::vector<uint32_t> textureIndices;
41
+
42
+ PolygonData() : offsets{0} {}
43
+
44
+ // If there's a problem with the mesh, returns an error message.
45
+ // If everything is kosher, returns an empty string.
46
+ // This function is used in a few places when reading the mesh from
47
+ // disk to make sure it's valid.
48
+ [[nodiscard]] std::string errorMessage(size_t numVertices) const;
49
+
50
+ // Similar to errorMessage, but the issue is not severe enough to terminate.
51
+ [[nodiscard]] std::string warnMessage(size_t numTexVertices) const;
52
+
53
+ [[nodiscard]] size_t numPolygons() const;
54
+ };
55
+
56
+ std::vector<Eigen::Vector3i> triangulate(
57
+ std::span<const uint32_t> indices,
58
+ std::span<const uint32_t> offsets);
59
+
60
+ } // namespace momentum
@@ -0,0 +1,107 @@
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 <string_view>
11
+
12
+ namespace momentum {
13
+
14
+ // ============================================================================
15
+ // Permissive Mode
16
+ // ============================================================================
17
+
18
+ // Permissive specifies whether we want to be able to load mesh-only characters (without skin
19
+ // weights), and whether we want to bake the unhandled pose information into base skeleton.
20
+ enum class Permissive { No, Yes };
21
+
22
+ // ============================================================================
23
+ // GLTF File Format
24
+ // ============================================================================
25
+
26
+ /// File format in which the character is saved
27
+ enum class GltfFileFormat {
28
+ Auto = 0, // The file extension is used for deduction (e.g. ".gltf" --> ASCII)
29
+ Binary = 1, // Binary format (generally .glb)
30
+ Ascii = 2, // ASCII format (generally .gltf)
31
+ };
32
+
33
+ // ============================================================================
34
+ // FBX Coordinate System Options
35
+ // ============================================================================
36
+
37
+ /// Specifies which canonical axis represents up in the system (typically Y or Z).
38
+ /// Maps to fbxsdk::FbxAxisSystem::EUpVector
39
+ enum class FbxUpVector { XAxis = 1, YAxis = 2, ZAxis = 3 };
40
+
41
+ /// Vector with origin at the screen pointing toward the camera.
42
+ /// This is a subset of enum EUpVector because axis cannot be repeated.
43
+ /// We use the system of "parity" to define this vector because its value (X,Y or
44
+ /// Z axis) really depends on the up-vector.
45
+ /// Maps to fbxsdk::FbxAxisSystem::EFrontVector
46
+ enum class FbxFrontVector { ParityEven = 1, ParityOdd = 2 };
47
+
48
+ /// Specifies the third vector of the system.
49
+ /// Maps to fbxsdk::FbxAxisSystem::ECoordSystem
50
+ enum class FbxCoordSystem { RightHanded, LeftHanded };
51
+
52
+ /// A struct containing the up, front vectors and coordinate system for FBX export.
53
+ struct FbxCoordSystemInfo {
54
+ /// Default to the same orientations as FbxAxisSystem::eMayaYUp
55
+ FbxUpVector upVector = FbxUpVector::YAxis;
56
+ FbxFrontVector frontVector = FbxFrontVector::ParityOdd;
57
+ FbxCoordSystem coordSystem = FbxCoordSystem::RightHanded;
58
+ };
59
+
60
+ // ============================================================================
61
+ // Unified File Save Options
62
+ // ============================================================================
63
+
64
+ /// Unified options for saving files in both FBX and GLTF formats.
65
+ ///
66
+ /// This struct consolidates save options that were previously scattered across
67
+ /// multiple function parameters. Format-specific options (e.g., FBX coordinate
68
+ /// system, GLTF extensions) are included but only used by their respective formats.
69
+ struct FileSaveOptions {
70
+ // ---- Common Options (used by both FBX and GLTF) ----
71
+
72
+ /// Include mesh geometry in the output (default: true)
73
+ bool mesh = true;
74
+
75
+ /// Include locators in the output (default: true)
76
+ bool locators = true;
77
+
78
+ /// Include collision geometry in the output (default: true)
79
+ bool collisions = true;
80
+
81
+ /// Include blend shapes in the output (default: true)
82
+ bool blendShapes = true;
83
+
84
+ /// Permissive mode: allow saving mesh-only characters without skin weights (default: false)
85
+ Permissive permissive = Permissive::No;
86
+
87
+ // ---- FBX-Specific Options ----
88
+
89
+ /// FBX coordinate system configuration (default: Maya Y-up)
90
+ FbxCoordSystemInfo coordSystemInfo = {};
91
+
92
+ /// Optional namespace prefix for FBX node names (e.g., "ns" becomes "ns:")
93
+ /// Only used for FBX output (default: empty = no namespace)
94
+ std::string_view fbxNamespace = "";
95
+
96
+ // ---- GLTF-Specific Options ----
97
+
98
+ /// Enable GLTF extensions (default: true)
99
+ /// Only used for GLTF output
100
+ bool extensions = true;
101
+
102
+ /// GLTF file format selection (default: Auto)
103
+ /// Only used for GLTF output
104
+ GltfFileFormat gltfFileFormat = GltfFileFormat::Auto;
105
+ };
106
+
107
+ } // namespace momentum