pymomentum-cpu 0.1.77.post26__cp312-cp312-macosx_15_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 +128 -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 +126 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -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 +29 -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 +54 -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-312-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-312-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-312-darwin.so +0 -0
  504. pymomentum/solver2.cpython-312-darwin.so +0 -0
  505. pymomentum/torch/character.py +809 -0
  506. pymomentum/torch/parameter_limits.py +494 -0
  507. pymomentum/torch/utility.py +20 -0
  508. pymomentum/trs.py +535 -0
  509. pymomentum_cpu-0.1.77.post26.dist-info/METADATA +208 -0
  510. pymomentum_cpu-0.1.77.post26.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.77.post26.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.77.post26.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,148 @@
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/marker.h>
11
+ #include <momentum/character/types.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/gltf/gltf_file_format.h>
14
+ #include <momentum/math/types.h>
15
+
16
+ #include <fx/gltf.h>
17
+ #include <gsl/span>
18
+
19
+ #include <tuple>
20
+ #include <vector>
21
+
22
+ namespace momentum {
23
+
24
+ struct GltfOptions {
25
+ bool extensions = true;
26
+ bool collisions = true;
27
+ bool locators = true;
28
+ bool mesh = true;
29
+ bool blendShapes = true;
30
+ };
31
+
32
+ Character loadGltfCharacter(const fx::gltf::Document& model);
33
+
34
+ Character loadGltfCharacter(const filesystem::path& gltfFilename);
35
+
36
+ Character loadGltfCharacter(gsl::span<const std::byte> byteSpan);
37
+
38
+ std::tuple<MotionParameters, IdentityParameters, float> loadMotion(
39
+ const filesystem::path& gltfFilename);
40
+
41
+ /// Load a glTF character from a local file path.
42
+ ///
43
+ /// This function assumes the file format of the given path is glTF without checking the extension,
44
+ /// so please ensure the file is in glTF format.
45
+ ///
46
+ /// @param[in] filepath The path to the glTF character file.
47
+ /// @return A tuple containing the loaded Character object, the motion represented in model
48
+ /// parameters, the identity vector represented as joint parameters, and the fps.
49
+ std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
50
+ const filesystem::path& gltfFilename);
51
+
52
+ /// Load a glTF character from a buffer.
53
+ ///
54
+ /// @param[in] byteSpan The buffer containing the glTF character data.
55
+ /// @return A tuple containing the loaded Character object, the motion represented in model
56
+ /// parameters, the identity vector represented as joint parameters, and the fps.
57
+ std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
58
+ gsl::span<const std::byte> byteSpan);
59
+
60
+ /// Load a GLTF Character with motion in the form of skeleton states (transform matrices)
61
+ ///
62
+ /// Unlike the other loadCharacterWithMotion functions, this function does not require the
63
+ /// file to be saved using momentum's functionality that saves model parameters in a
64
+ /// custom GTLF extension, however the resulting skeleton states may be harder to work with.
65
+ std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
66
+ loadCharacterWithSkeletonStates(gsl::span<const std::byte> byteSpan);
67
+
68
+ std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
69
+ loadCharacterWithSkeletonStates(const filesystem::path& gltfFilename);
70
+
71
+ /// Maps the loaded motion onto the input character by matching joint names and parameter names.
72
+ ///
73
+ /// This function assumes the file format of the given path is glTF without checking the extension,
74
+ /// so please ensure the file is in glTF format.
75
+ ///
76
+ /// @param[in] gltfFilename The path to the glTF motion file.
77
+ /// @param[in] character The Character object to map the motion onto.
78
+ /// @return A tuple containing the motion represented in model parameters, the identity vector
79
+ /// represented as joint parameters, and the fps. The model parameters and joint parameters are
80
+ /// mapped to the input character by name matching.
81
+ std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
82
+ const filesystem::path& gltfFilename,
83
+ const Character& character);
84
+
85
+ /// Buffer version of loadMotionOnCharacter()
86
+ ///
87
+ /// @param[in] byteSpan The buffer containing the glTF motion data.
88
+ /// @param[in] character The Character object to map the motion onto.
89
+ /// @return A tuple containing the motion represented in model parameters, the identity vector
90
+ /// represented as joint parameters, and the fps. The model parameters and joint parameters are
91
+ /// mapped to the input character by name matching.
92
+ std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
93
+ gsl::span<const std::byte> byteSpan,
94
+ const Character& character);
95
+
96
+ /// Loads a MarkerSequence from a file.
97
+ ///
98
+ /// @param[in] filename Path to the file containing the MarkerSequence data.
99
+ /// @return A MarkerSequence object containing motion capture marker data.
100
+ MarkerSequence loadMarkerSequence(const filesystem::path& filename);
101
+
102
+ fx::gltf::Document makeCharacterDocument(
103
+ const Character& character,
104
+ float fps = 120.0f,
105
+ const MotionParameters& motion = {},
106
+ const IdentityParameters& offsets = {},
107
+ const std::vector<std::vector<Marker>>& markerSequence = {},
108
+ bool embedResource = true,
109
+ const GltfOptions& options = GltfOptions());
110
+
111
+ /// Saves character motion to a glb file.
112
+ ///
113
+ /// @param[in] motion The model parameters representing the motion of the character (numModelParams,
114
+ /// numFrames)
115
+ /// @param[in] offsets Offset values per joint capturing the skeleton bone lengths using translation
116
+ /// and scale offset (7*numJoints, 1)
117
+ void saveCharacter(
118
+ const filesystem::path& filename,
119
+ const Character& Character,
120
+ float fps = 120.0f,
121
+ const MotionParameters& motion = {},
122
+ const IdentityParameters& offsets = {},
123
+ const std::vector<std::vector<Marker>>& markerSequence = {},
124
+ GltfFileFormat fileFormat = GltfFileFormat::Extension,
125
+ const GltfOptions& options = GltfOptions());
126
+
127
+ /// Saves character skeleton states to a glb file.
128
+ ///
129
+ /// @param[in] skeletonStates The skeleton states for each frame of the motion sequence (numFrames,
130
+ /// numJoints, 8)
131
+ void saveCharacter(
132
+ const filesystem::path& filename,
133
+ const Character& Character,
134
+ float fps,
135
+ gsl::span<const SkeletonState> skeletonStates,
136
+ const std::vector<std::vector<Marker>>& markerSequence = {},
137
+ GltfFileFormat fileFormat = GltfFileFormat::Extension,
138
+ const GltfOptions& options = GltfOptions());
139
+
140
+ std::vector<std::byte> saveCharacterToBytes(
141
+ const Character& character,
142
+ float fps = 120.0f,
143
+ const MotionParameters& motion = {},
144
+ const IdentityParameters& offsets = {},
145
+ const std::vector<std::vector<Marker>>& markerSequence = {},
146
+ const GltfOptions& options = GltfOptions());
147
+
148
+ } // namespace momentum
@@ -0,0 +1,299 @@
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
+
12
+ #include <fx/gltf.h>
13
+ #include <gsl/span_ext>
14
+
15
+ namespace momentum {
16
+
17
+ static inline int32_t getComponentSize(const fx::gltf::Accessor::ComponentType& componentType) {
18
+ switch (componentType) {
19
+ case fx::gltf::Accessor::ComponentType::Byte:
20
+ case fx::gltf::Accessor::ComponentType::UnsignedByte:
21
+ return 1;
22
+ case fx::gltf::Accessor::ComponentType::Short:
23
+ case fx::gltf::Accessor::ComponentType::UnsignedShort:
24
+ return 2;
25
+ // case fx::gltf::Accessor::ComponentType::Int:
26
+ case fx::gltf::Accessor::ComponentType::UnsignedInt:
27
+ case fx::gltf::Accessor::ComponentType::Float:
28
+ return 4;
29
+ default:
30
+ return -1;
31
+ }
32
+ }
33
+
34
+ static inline int32_t getTypeSize(const fx::gltf::Accessor::Type& ty) {
35
+ switch (ty) {
36
+ case fx::gltf::Accessor::Type::Scalar:
37
+ return 1;
38
+ case fx::gltf::Accessor::Type::Vec2:
39
+ return 2;
40
+ case fx::gltf::Accessor::Type::Vec3:
41
+ return 3;
42
+ case fx::gltf::Accessor::Type::Vec4:
43
+ case fx::gltf::Accessor::Type::Mat2:
44
+ return 4;
45
+ case fx::gltf::Accessor::Type::Mat3:
46
+ return 9;
47
+ case fx::gltf::Accessor::Type::Mat4:
48
+ return 16;
49
+ default:
50
+ return -1;
51
+ }
52
+ }
53
+
54
+ template <typename T>
55
+ std::vector<T> copyAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
56
+ const auto& accessor = model.accessors[id];
57
+
58
+ const auto tsize = getTypeSize(accessor.type);
59
+ const auto csize = getComponentSize(accessor.componentType);
60
+ const auto elsize = tsize * csize;
61
+
62
+ if (elsize != sizeof(T)) {
63
+ MT_LOGW(
64
+ "[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
65
+ __func__,
66
+ sizeof(T),
67
+ csize,
68
+ tsize);
69
+ return {};
70
+ }
71
+
72
+ const auto& view = model.bufferViews[accessor.bufferView];
73
+ const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
74
+
75
+ const auto& buf = model.buffers[view.buffer];
76
+ auto bytes = gsl::as_bytes(gsl::make_span(buf.data));
77
+ bytes = bytes.subspan(view.byteOffset, view.byteLength);
78
+ bytes = bytes.subspan(accessor.byteOffset);
79
+
80
+ std::vector<T> r(accessor.count);
81
+ for (size_t i = 0; i < accessor.count; i++) {
82
+ std::memcpy(&r[i], &bytes[i * stride], elsize);
83
+ }
84
+
85
+ return r;
86
+ }
87
+
88
+ template <typename T>
89
+ std::vector<T> copyAlignedAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
90
+ const auto& accessor = model.accessors[id];
91
+ if (accessor.count == 0) {
92
+ MT_LOGW("Accessor count zero.");
93
+ return {};
94
+ }
95
+
96
+ const auto tsize = getTypeSize(accessor.type);
97
+ const auto csize = getComponentSize(accessor.componentType);
98
+ const auto elsize = tsize * csize;
99
+
100
+ if (elsize != sizeof(T)) {
101
+ MT_LOGW(
102
+ "[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
103
+ __func__,
104
+ sizeof(T),
105
+ csize,
106
+ tsize);
107
+ return {};
108
+ }
109
+
110
+ const auto& view = model.bufferViews[accessor.bufferView];
111
+ const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
112
+
113
+ const auto& buf = model.buffers[view.buffer];
114
+ auto bytes = gsl::as_bytes(gsl::make_span(buf.data));
115
+ bytes = bytes.subspan(view.byteOffset, view.byteLength);
116
+ bytes = bytes.subspan(accessor.byteOffset);
117
+
118
+ std::vector<T> r(accessor.count);
119
+ for (size_t i = 0; i < accessor.count; i++) {
120
+ std::memcpy(&r[i], &bytes[i * stride], elsize);
121
+ }
122
+
123
+ return r;
124
+ }
125
+
126
+ // template to set accessor
127
+ template <typename T>
128
+ void setAccessorType(fx::gltf::Accessor& /* accessor */) {
129
+ MT_THROW("Unsupported data type {}", typeid(T).name());
130
+ }
131
+
132
+ // create accessor buffer
133
+ template <typename T>
134
+ int32_t createAccessorBuffer(
135
+ fx::gltf::Document& model,
136
+ gsl::span<T> data,
137
+ const bool align = false,
138
+ const bool normalized = false) {
139
+ // gltf 2.0 allows multiple buffers, but only the first buffer will be stored in
140
+ // the binary file, all other ones need to be external files. Because of this we will
141
+ // only ever store data in the first buffer
142
+
143
+ // check if we have a buffer
144
+ if (model.buffers.empty()) {
145
+ model.buffers.resize(1);
146
+ }
147
+
148
+ // create buffer for data
149
+ const size_t bufferIdx = 0;
150
+ auto& buffer = model.buffers.front();
151
+
152
+ // copy data from input buffer to output buffer
153
+ const size_t bufferDataStart = buffer.data.size();
154
+ const auto elementSize = sizeof(T);
155
+ auto alignedElementSize = elementSize;
156
+ auto dataSize = data.size() * alignedElementSize;
157
+
158
+ // check for necessary alignment
159
+ if (align && alignedElementSize % 4 != 0) {
160
+ // element is not aligned, need to get bigger element size
161
+ alignedElementSize = ((elementSize / 4) + 1) * 4;
162
+ dataSize = data.size() * alignedElementSize;
163
+ buffer.data.resize(bufferDataStart + dataSize);
164
+ // need to go over each element one by one to copy
165
+ for (size_t e = 0; e < data.size(); e++) {
166
+ std::memcpy(&buffer.data[bufferDataStart + alignedElementSize * e], &data[e], elementSize);
167
+ }
168
+ buffer.byteLength = buffer.data.size();
169
+ } else {
170
+ // no alignment needed or already aligned, just copy data in
171
+ buffer.data.resize(bufferDataStart + dataSize);
172
+ std::memcpy(&buffer.data[bufferDataStart], data.data(), dataSize);
173
+ buffer.byteLength = buffer.data.size();
174
+ }
175
+
176
+ // create bufferview
177
+ const size_t bufferViewIdx = model.bufferViews.size();
178
+ model.bufferViews.emplace_back();
179
+ auto& bufferView = model.bufferViews.back();
180
+
181
+ bufferView.buffer = bufferIdx;
182
+ bufferView.byteLength = dataSize;
183
+ bufferView.byteOffset = bufferDataStart;
184
+ if (align && elementSize % 4 != 0) {
185
+ bufferView.byteStride = alignedElementSize;
186
+ } else {
187
+ bufferView.byteStride = 0;
188
+ }
189
+
190
+ // create accessor
191
+ const size_t accessorIdx = model.accessors.size();
192
+ model.accessors.emplace_back();
193
+ auto& accessor = model.accessors.back();
194
+
195
+ // set component type and accessor size depending on the type
196
+ setAccessorType<T>(accessor);
197
+ accessor.bufferView = bufferViewIdx;
198
+ accessor.byteOffset = 0;
199
+ accessor.count = data.size();
200
+ accessor.normalized = normalized;
201
+
202
+ return accessorIdx;
203
+ }
204
+
205
+ template <>
206
+ inline void setAccessorType<const int32_t>(fx::gltf::Accessor& accessor) {
207
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
208
+ accessor.type = fx::gltf::Accessor::Type::Scalar;
209
+ }
210
+
211
+ template <>
212
+ inline void setAccessorType<const float>(fx::gltf::Accessor& accessor) {
213
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
214
+ accessor.type = fx::gltf::Accessor::Type::Scalar;
215
+ }
216
+
217
+ template <>
218
+ inline void setAccessorType<const Vector2f>(fx::gltf::Accessor& accessor) {
219
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
220
+ accessor.type = fx::gltf::Accessor::Type::Vec2;
221
+ }
222
+
223
+ template <>
224
+ inline void setAccessorType<const Vector3f>(fx::gltf::Accessor& accessor) {
225
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
226
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
227
+ }
228
+
229
+ template <>
230
+ inline void setAccessorType<const Vector4f>(fx::gltf::Accessor& accessor) {
231
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
232
+ accessor.type = fx::gltf::Accessor::Type::Vec4;
233
+ }
234
+
235
+ template <>
236
+ inline void setAccessorType<const Vector3b>(fx::gltf::Accessor& accessor) {
237
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedByte;
238
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
239
+ }
240
+
241
+ template <>
242
+ inline void setAccessorType<const Vector3i>(fx::gltf::Accessor& accessor) {
243
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
244
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
245
+ }
246
+
247
+ template <>
248
+ inline void setAccessorType<const Vector4s>(fx::gltf::Accessor& accessor) {
249
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedShort;
250
+ accessor.type = fx::gltf::Accessor::Type::Vec4;
251
+ }
252
+
253
+ template <>
254
+ inline void setAccessorType<const Matrix4f>(fx::gltf::Accessor& accessor) {
255
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
256
+ accessor.type = fx::gltf::Accessor::Type::Mat4;
257
+ }
258
+
259
+ // add animation
260
+ template <typename T>
261
+ int32_t createSampler(
262
+ fx::gltf::Document& model,
263
+ fx::gltf::Animation& anim,
264
+ gsl::span<T> data,
265
+ const gsl::span<float>& timestamps) {
266
+ MT_CHECK(
267
+ data.size() == timestamps.size(), "data: {}, timestmaps: {}", data.size(), timestamps.size());
268
+
269
+ // create new sampler
270
+ const int32_t index = anim.samplers.size();
271
+ anim.samplers.emplace_back();
272
+ auto& sampler = anim.samplers.back();
273
+ sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
274
+ sampler.input = createAccessorBuffer(model, timestamps);
275
+ sampler.output = createAccessorBuffer(model, data);
276
+
277
+ // return sampler index
278
+ return index;
279
+ }
280
+
281
+ template <typename T>
282
+ int32_t createSampler(
283
+ fx::gltf::Document& model,
284
+ fx::gltf::Animation& anim,
285
+ gsl::span<T> data,
286
+ const int32_t timestampAccessor) {
287
+ // create new sampler
288
+ const int32_t index = anim.samplers.size();
289
+ anim.samplers.emplace_back();
290
+ auto& sampler = anim.samplers.back();
291
+ sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
292
+ sampler.input = timestampAccessor;
293
+ sampler.output = createAccessorBuffer(model, data);
294
+
295
+ // return sampler index
296
+ return index;
297
+ }
298
+
299
+ } // 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/constants.h>
11
+ #include <momentum/math/types.h>
12
+
13
+ namespace momentum {
14
+
15
+ // Utility functions to convert gltf coordinate system to momentum coordinate system.
16
+ // #TODO: load coordinates by setting up CoordinateSystems so we don't need to worry about
17
+ // conversion.
18
+ [[nodiscard]] inline Vector3f toMomentumVec3f(const std::array<float, 3>& vec) noexcept {
19
+ return Vector3f(vec[0], vec[1], vec[2]) * toCm();
20
+ }
21
+
22
+ [[nodiscard]] inline Vector3f fromMomentumVec3f(const Vector3f& vec) noexcept {
23
+ return vec * toM();
24
+ }
25
+
26
+ [[nodiscard]] inline Quaternionf toMomentumQuaternionf(
27
+ const std::array<float, 4>& gltfQuat) noexcept {
28
+ return {gltfQuat[3], gltfQuat[0], gltfQuat[1], gltfQuat[2]};
29
+ }
30
+
31
+ [[nodiscard]] inline std::array<float, 4> fromMomentumQuaternionf(
32
+ const Quaternionf& quat) noexcept {
33
+ return {quat.x(), quat.y(), quat.z(), quat.w()};
34
+ }
35
+
36
+ inline void toMomentumVec3f(std::vector<Vector3f>& vec) {
37
+ if (vec.empty()) {
38
+ return;
39
+ }
40
+
41
+ Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toCm();
42
+ }
43
+
44
+ inline void fromMomentumVec3f(std::vector<Vector3f>& vec) {
45
+ if (vec.empty()) {
46
+ return;
47
+ }
48
+
49
+ Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toM();
50
+ }
51
+
52
+ inline void fromMomentumVec3f(VectorXf& vec) {
53
+ if (vec.size() == 0) {
54
+ return;
55
+ }
56
+
57
+ vec *= toM();
58
+ }
59
+
60
+ } // namespace momentum
@@ -0,0 +1,102 @@
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/parameter_limits.h>
11
+ #include <momentum/character/parameter_transform.h>
12
+
13
+ #include <nlohmann/json.hpp>
14
+ #include <Eigen/Core>
15
+
16
+ namespace momentum {
17
+
18
+ // Converts Eigen matrix or vector types to nlohmann::json
19
+ //
20
+ // Note: We intentionally avoid defining nlohmann::adl_serializers for type conversion between Eigen
21
+ // types and nlohmann::json to prevent multiple definitions of the same type in different projects
22
+ // that are compiled in a single translation unit. Instead, we recommend using explicit conversion
23
+ // between the types using the toJson() and fromJson() functions provided in this header.
24
+ template <typename Derived>
25
+ void toJson(const Eigen::MatrixBase<Derived>& mat, nlohmann::json& j) {
26
+ // always save new format that's numpy compatible
27
+ // this works for both dynamic and statically sized matrices
28
+ j = nlohmann::json::array();
29
+ for (int col_i = 0; col_i < mat.cols(); ++col_i) {
30
+ nlohmann::json jcol = nlohmann::json::array();
31
+ for (int row_i = 0; row_i < mat.rows(); ++row_i) {
32
+ jcol.push_back(mat(row_i, col_i));
33
+ }
34
+ j.push_back(jcol);
35
+ }
36
+ }
37
+
38
+ // Converts nlohmann::json to Eigen matrix or vector types
39
+ template <typename T>
40
+ T fromJson(const nlohmann::json& j) {
41
+ T result;
42
+
43
+ // partially dynamic matrix
44
+ if constexpr (T::RowsAtCompileTime == Eigen::Dynamic || T::ColsAtCompileTime == Eigen::Dynamic) {
45
+ // dynamic size matrix
46
+ // reads dimensions from the json
47
+ const auto numCols = j.size();
48
+ if (numCols > 0) {
49
+ const auto numRows = j.at(0).size();
50
+ result.resize(numRows, numCols);
51
+
52
+ for (int col_i = 0; col_i < numCols; ++col_i) {
53
+ std::vector<typename T::Scalar> coef = j[col_i];
54
+ std::copy(coef.begin(), coef.end(), result.col(col_i).begin());
55
+ }
56
+ }
57
+ }
58
+ // fixed size matrix or vector
59
+ else {
60
+ const int Rows = T::RowsAtCompileTime;
61
+ const int Cols = T::ColsAtCompileTime;
62
+
63
+ // vector stored as array
64
+ if (Rows == 1 && Cols != -1 && j.size() == Cols &&
65
+ j[0].type() != nlohmann::json::value_t::array) {
66
+ std::vector<typename T::Scalar> coef = j;
67
+ std::copy(coef.begin(), coef.end(), result.row(0).begin());
68
+ } else if (
69
+ Cols == 1 && Rows != -1 && j.size() == Rows &&
70
+ j[0].type() != nlohmann::json::value_t::array) {
71
+ std::vector<typename T::Scalar> coef = j;
72
+ std::copy(coef.begin(), coef.end(), result.col(0).begin());
73
+ }
74
+ // fixed size matrix
75
+ else {
76
+ const auto numCols = j.size();
77
+ if (numCols > 0) {
78
+ for (int col_i = 0; col_i < Cols; ++col_i) {
79
+ std::vector<typename T::Scalar> coef = j[col_i];
80
+ std::copy(coef.begin(), coef.end(), result.col(col_i).begin());
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ return result;
87
+ }
88
+
89
+ // to json conversion functions
90
+ void parameterLimitsToJson(const Character& character, nlohmann::json& j);
91
+ void parameterSetsToJson(const Character& character, nlohmann::json& j);
92
+ void poseConstraintsToJson(const Character& character, nlohmann::json& j);
93
+ void parameterTransformToJson(const Character& character, nlohmann::json& j);
94
+ void mppcaToJson(const Character& character, nlohmann::json& j);
95
+
96
+ // from json conversion functions
97
+ ParameterLimits parameterLimitsFromJson(const Character& character, const nlohmann::json& j);
98
+ ParameterSets parameterSetsFromJson(const Character& character, const nlohmann::json& j);
99
+ PoseConstraints poseConstraintsFromJson(const Character& character, const nlohmann::json& j);
100
+ ParameterTransform parameterTransformFromJson(const Character& character, const nlohmann::json& j);
101
+
102
+ } // 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
+ #include <momentum/character/collision_geometry.h>
11
+ #include <momentum/character/fwd.h>
12
+ #include <momentum/character/locator.h>
13
+ #include <momentum/math/fwd.h>
14
+
15
+ #include <nlohmann/json.hpp>
16
+ #include <gsl/span>
17
+ #include <string>
18
+
19
+ namespace momentum {
20
+
21
+ /// Loads a Character from a legacy JSON format that was previously used by older Python libraries
22
+ /// (and some other tools).
23
+ ///
24
+ /// The legacy JSON format contains:
25
+ /// - "skeleton": FBX skeleton structure with joints, hierarchy, and transforms
26
+ /// - "skinnedmodel": Mesh data with skinning weights
27
+ /// - "collision": Optional collision geometry (tapered capsules)
28
+ ///
29
+ /// @param[in] jsonPath Path to the legacy JSON file
30
+ /// @return The loaded Character object
31
+ /// @throws std::runtime_error if the file cannot be loaded or parsed
32
+ [[nodiscard]] Character loadCharacterFromLegacyJson(const std::string& jsonPath);
33
+
34
+ /// Loads a Character from a legacy JSON buffer.
35
+ ///
36
+ /// @param[in] jsonBuffer Buffer containing the legacy JSON data
37
+ /// @return The loaded Character object
38
+ /// @throws std::runtime_error if the buffer cannot be parsed
39
+ [[nodiscard]] Character loadCharacterFromLegacyJsonBuffer(gsl::span<const std::byte> jsonBuffer);
40
+
41
+ /// Loads a Character from a legacy JSON string.
42
+ ///
43
+ /// @param[in] jsonString String containing the legacy JSON data
44
+ /// @return The loaded Character object
45
+ /// @throws std::runtime_error if the string cannot be parsed
46
+ [[nodiscard]] Character loadCharacterFromLegacyJsonString(const std::string& jsonString);
47
+
48
+ /// Saves a Character to legacy JSON format.
49
+ ///
50
+ /// This function converts a momentum::Character back to the legacy JSON format
51
+ /// for compatibility with existing tools and workflows.
52
+ ///
53
+ /// @param[in] character The Character to save
54
+ /// @param[in] jsonPath Path where to save the legacy JSON file
55
+ /// @throws std::runtime_error if the file cannot be written
56
+ void saveCharacterToLegacyJson(const Character& character, const std::string& jsonPath);
57
+
58
+ /// Converts a Character to legacy JSON string.
59
+ ///
60
+ /// @param[in] character The Character to convert
61
+ /// @return String containing the legacy JSON representation
62
+ [[nodiscard]] std::string characterToLegacyJsonString(const Character& character);
63
+
64
+ /// Converts a Character to legacy JSON object.
65
+ ///
66
+ /// @param[in] character The Character to convert
67
+ /// @return nlohmann::json object containing the legacy JSON representation
68
+ [[nodiscard]] nlohmann::json characterToLegacyJson(const Character& character);
69
+
70
+ } // namespace momentum