pymomentum-cpu 0.1.84.post0__cp313-cp313-macosx_14_0_arm64.whl

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

Potentially problematic release.


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

Files changed (512) hide show
  1. include/axel/BoundingBox.h +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 +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 +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 +144 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +924 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/limit_error_function.h +57 -0
  75. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  76. include/momentum/character_solver/normal_error_function.h +73 -0
  77. include/momentum/character_solver/orientation_error_function.h +74 -0
  78. include/momentum/character_solver/plane_error_function.h +102 -0
  79. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  80. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  81. include/momentum/character_solver/position_error_function.h +75 -0
  82. include/momentum/character_solver/projection_error_function.h +93 -0
  83. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  84. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  85. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  86. include/momentum/character_solver/simd_position_error_function.h +165 -0
  87. include/momentum/character_solver/skeleton_error_function.h +151 -0
  88. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  89. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  90. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  91. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  92. include/momentum/character_solver/state_error_function.h +94 -0
  93. include/momentum/character_solver/transform_pose.h +80 -0
  94. include/momentum/character_solver/trust_region_qr.h +80 -0
  95. include/momentum/character_solver/vertex_error_function.h +155 -0
  96. include/momentum/character_solver/vertex_projection_error_function.h +117 -0
  97. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
  98. include/momentum/common/aligned.h +155 -0
  99. include/momentum/common/checks.h +27 -0
  100. include/momentum/common/exception.h +70 -0
  101. include/momentum/common/filesystem.h +20 -0
  102. include/momentum/common/fwd.h +27 -0
  103. include/momentum/common/log.h +173 -0
  104. include/momentum/common/log_channel.h +17 -0
  105. include/momentum/common/memory.h +71 -0
  106. include/momentum/common/profile.h +79 -0
  107. include/momentum/common/progress_bar.h +37 -0
  108. include/momentum/common/string.h +52 -0
  109. include/momentum/diff_ik/ceres_utility.h +73 -0
  110. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  111. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  112. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  113. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  114. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  115. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  116. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  117. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  118. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  119. include/momentum/diff_ik/fwd.h +385 -0
  120. include/momentum/diff_ik/union_error_function.h +67 -0
  121. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  122. include/momentum/gui/rerun/logger.h +102 -0
  123. include/momentum/gui/rerun/logging_redirect.h +27 -0
  124. include/momentum/io/character_io.h +56 -0
  125. include/momentum/io/common/gsl_utils.h +50 -0
  126. include/momentum/io/common/stream_utils.h +65 -0
  127. include/momentum/io/fbx/fbx_io.h +161 -0
  128. include/momentum/io/fbx/fbx_memory_stream.h +66 -0
  129. include/momentum/io/fbx/openfbx_loader.h +62 -0
  130. include/momentum/io/fbx/polygon_data.h +60 -0
  131. include/momentum/io/gltf/gltf_builder.h +132 -0
  132. include/momentum/io/gltf/gltf_file_format.h +19 -0
  133. include/momentum/io/gltf/gltf_io.h +148 -0
  134. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  135. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  136. include/momentum/io/gltf/utils/json_utils.h +102 -0
  137. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  138. include/momentum/io/marker/c3d_io.h +30 -0
  139. include/momentum/io/marker/conversions.h +57 -0
  140. include/momentum/io/marker/coordinate_system.h +30 -0
  141. include/momentum/io/marker/marker_io.h +56 -0
  142. include/momentum/io/marker/trc_io.h +27 -0
  143. include/momentum/io/motion/mmo_io.h +97 -0
  144. include/momentum/io/shape/blend_shape_io.h +70 -0
  145. include/momentum/io/shape/pose_shape_io.h +21 -0
  146. include/momentum/io/skeleton/locator_io.h +41 -0
  147. include/momentum/io/skeleton/mppca_io.h +26 -0
  148. include/momentum/io/skeleton/parameter_limits_io.h +25 -0
  149. include/momentum/io/skeleton/parameter_transform_io.h +41 -0
  150. include/momentum/io/skeleton/parameters_io.h +20 -0
  151. include/momentum/io/urdf/urdf_io.h +26 -0
  152. include/momentum/io/usd/usd_io.h +36 -0
  153. include/momentum/marker_tracking/app_utils.h +62 -0
  154. include/momentum/marker_tracking/marker_tracker.h +213 -0
  155. include/momentum/marker_tracking/process_markers.h +58 -0
  156. include/momentum/marker_tracking/tracker_utils.h +90 -0
  157. include/momentum/math/constants.h +82 -0
  158. include/momentum/math/covariance_matrix.h +84 -0
  159. include/momentum/math/fmt_eigen.h +23 -0
  160. include/momentum/math/fwd.h +132 -0
  161. include/momentum/math/generalized_loss.h +61 -0
  162. include/momentum/math/intersection.h +32 -0
  163. include/momentum/math/mesh.h +84 -0
  164. include/momentum/math/mppca.h +67 -0
  165. include/momentum/math/online_householder_qr.h +516 -0
  166. include/momentum/math/random-inl.h +404 -0
  167. include/momentum/math/random.h +310 -0
  168. include/momentum/math/simd_generalized_loss.h +40 -0
  169. include/momentum/math/transform.h +229 -0
  170. include/momentum/math/types.h +461 -0
  171. include/momentum/math/utility.h +282 -0
  172. include/momentum/rasterizer/camera.h +453 -0
  173. include/momentum/rasterizer/fwd.h +102 -0
  174. include/momentum/rasterizer/geometry.h +83 -0
  175. include/momentum/rasterizer/image.h +18 -0
  176. include/momentum/rasterizer/rasterizer.h +583 -0
  177. include/momentum/rasterizer/tensor.h +140 -0
  178. include/momentum/rasterizer/utility.h +268 -0
  179. include/momentum/simd/simd.h +221 -0
  180. include/momentum/solver/fwd.h +131 -0
  181. include/momentum/solver/gauss_newton_solver.h +136 -0
  182. include/momentum/solver/gradient_descent_solver.h +65 -0
  183. include/momentum/solver/solver.h +155 -0
  184. include/momentum/solver/solver_function.h +126 -0
  185. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  186. include/rerun/archetypes/annotation_context.hpp +157 -0
  187. include/rerun/archetypes/arrows2d.hpp +271 -0
  188. include/rerun/archetypes/arrows3d.hpp +257 -0
  189. include/rerun/archetypes/asset3d.hpp +262 -0
  190. include/rerun/archetypes/asset_video.hpp +275 -0
  191. include/rerun/archetypes/bar_chart.hpp +261 -0
  192. include/rerun/archetypes/boxes2d.hpp +293 -0
  193. include/rerun/archetypes/boxes3d.hpp +369 -0
  194. include/rerun/archetypes/capsules3d.hpp +333 -0
  195. include/rerun/archetypes/clear.hpp +180 -0
  196. include/rerun/archetypes/depth_image.hpp +425 -0
  197. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  198. include/rerun/archetypes/encoded_image.hpp +250 -0
  199. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  200. include/rerun/archetypes/geo_points.hpp +177 -0
  201. include/rerun/archetypes/graph_edges.hpp +152 -0
  202. include/rerun/archetypes/graph_nodes.hpp +206 -0
  203. include/rerun/archetypes/image.hpp +434 -0
  204. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  205. include/rerun/archetypes/line_strips2d.hpp +289 -0
  206. include/rerun/archetypes/line_strips3d.hpp +270 -0
  207. include/rerun/archetypes/mesh3d.hpp +387 -0
  208. include/rerun/archetypes/pinhole.hpp +385 -0
  209. include/rerun/archetypes/points2d.hpp +333 -0
  210. include/rerun/archetypes/points3d.hpp +369 -0
  211. include/rerun/archetypes/recording_properties.hpp +132 -0
  212. include/rerun/archetypes/scalar.hpp +170 -0
  213. include/rerun/archetypes/scalars.hpp +153 -0
  214. include/rerun/archetypes/segmentation_image.hpp +305 -0
  215. include/rerun/archetypes/series_line.hpp +274 -0
  216. include/rerun/archetypes/series_lines.hpp +271 -0
  217. include/rerun/archetypes/series_point.hpp +265 -0
  218. include/rerun/archetypes/series_points.hpp +251 -0
  219. include/rerun/archetypes/tensor.hpp +213 -0
  220. include/rerun/archetypes/text_document.hpp +200 -0
  221. include/rerun/archetypes/text_log.hpp +211 -0
  222. include/rerun/archetypes/transform3d.hpp +925 -0
  223. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  224. include/rerun/archetypes/view_coordinates.hpp +393 -0
  225. include/rerun/archetypes.hpp +43 -0
  226. include/rerun/arrow_utils.hpp +32 -0
  227. include/rerun/as_components.hpp +90 -0
  228. include/rerun/blueprint/archetypes/background.hpp +113 -0
  229. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  230. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  231. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  232. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  233. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  234. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  235. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  236. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  237. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  238. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  239. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  240. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  241. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  242. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  243. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  244. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  245. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  246. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  247. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  248. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  249. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  250. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  251. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  252. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  253. include/rerun/blueprint/archetypes.hpp +29 -0
  254. include/rerun/blueprint/components/active_tab.hpp +82 -0
  255. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  256. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  257. include/rerun/blueprint/components/auto_views.hpp +77 -0
  258. include/rerun/blueprint/components/background_kind.hpp +66 -0
  259. include/rerun/blueprint/components/column_share.hpp +78 -0
  260. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  261. include/rerun/blueprint/components/container_kind.hpp +65 -0
  262. include/rerun/blueprint/components/corner2d.hpp +64 -0
  263. include/rerun/blueprint/components/enabled.hpp +77 -0
  264. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  265. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  266. include/rerun/blueprint/components/force_distance.hpp +82 -0
  267. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  268. include/rerun/blueprint/components/force_strength.hpp +82 -0
  269. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  270. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  271. include/rerun/blueprint/components/included_content.hpp +86 -0
  272. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  273. include/rerun/blueprint/components/map_provider.hpp +64 -0
  274. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  275. include/rerun/blueprint/components/panel_state.hpp +61 -0
  276. include/rerun/blueprint/components/query_expression.hpp +89 -0
  277. include/rerun/blueprint/components/root_container.hpp +77 -0
  278. include/rerun/blueprint/components/row_share.hpp +78 -0
  279. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  280. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  281. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  282. include/rerun/blueprint/components/view_class.hpp +76 -0
  283. include/rerun/blueprint/components/view_fit.hpp +61 -0
  284. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  285. include/rerun/blueprint/components/view_origin.hpp +81 -0
  286. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  287. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  288. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  289. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  290. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  291. include/rerun/blueprint/components.hpp +41 -0
  292. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  293. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  294. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  295. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  296. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  297. include/rerun/blueprint/datatypes.hpp +9 -0
  298. include/rerun/c/arrow_c_data_interface.h +111 -0
  299. include/rerun/c/compiler_utils.h +10 -0
  300. include/rerun/c/rerun.h +627 -0
  301. include/rerun/c/sdk_info.h +28 -0
  302. include/rerun/collection.hpp +496 -0
  303. include/rerun/collection_adapter.hpp +43 -0
  304. include/rerun/collection_adapter_builtins.hpp +138 -0
  305. include/rerun/compiler_utils.hpp +61 -0
  306. include/rerun/component_batch.hpp +163 -0
  307. include/rerun/component_column.hpp +111 -0
  308. include/rerun/component_descriptor.hpp +142 -0
  309. include/rerun/component_type.hpp +35 -0
  310. include/rerun/components/aggregation_policy.hpp +76 -0
  311. include/rerun/components/albedo_factor.hpp +74 -0
  312. include/rerun/components/annotation_context.hpp +102 -0
  313. include/rerun/components/axis_length.hpp +74 -0
  314. include/rerun/components/blob.hpp +73 -0
  315. include/rerun/components/class_id.hpp +71 -0
  316. include/rerun/components/clear_is_recursive.hpp +75 -0
  317. include/rerun/components/color.hpp +99 -0
  318. include/rerun/components/colormap.hpp +99 -0
  319. include/rerun/components/depth_meter.hpp +84 -0
  320. include/rerun/components/draw_order.hpp +79 -0
  321. include/rerun/components/entity_path.hpp +83 -0
  322. include/rerun/components/fill_mode.hpp +72 -0
  323. include/rerun/components/fill_ratio.hpp +79 -0
  324. include/rerun/components/gamma_correction.hpp +80 -0
  325. include/rerun/components/geo_line_string.hpp +63 -0
  326. include/rerun/components/graph_edge.hpp +75 -0
  327. include/rerun/components/graph_node.hpp +79 -0
  328. include/rerun/components/graph_type.hpp +57 -0
  329. include/rerun/components/half_size2d.hpp +91 -0
  330. include/rerun/components/half_size3d.hpp +95 -0
  331. include/rerun/components/image_buffer.hpp +86 -0
  332. include/rerun/components/image_format.hpp +84 -0
  333. include/rerun/components/image_plane_distance.hpp +77 -0
  334. include/rerun/components/interactive.hpp +76 -0
  335. include/rerun/components/keypoint_id.hpp +74 -0
  336. include/rerun/components/lat_lon.hpp +89 -0
  337. include/rerun/components/length.hpp +77 -0
  338. include/rerun/components/line_strip2d.hpp +73 -0
  339. include/rerun/components/line_strip3d.hpp +73 -0
  340. include/rerun/components/magnification_filter.hpp +63 -0
  341. include/rerun/components/marker_shape.hpp +82 -0
  342. include/rerun/components/marker_size.hpp +74 -0
  343. include/rerun/components/media_type.hpp +157 -0
  344. include/rerun/components/name.hpp +83 -0
  345. include/rerun/components/opacity.hpp +77 -0
  346. include/rerun/components/pinhole_projection.hpp +94 -0
  347. include/rerun/components/plane3d.hpp +75 -0
  348. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  349. include/rerun/components/pose_rotation_quat.hpp +71 -0
  350. include/rerun/components/pose_scale3d.hpp +102 -0
  351. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  352. include/rerun/components/pose_translation3d.hpp +96 -0
  353. include/rerun/components/position2d.hpp +86 -0
  354. include/rerun/components/position3d.hpp +90 -0
  355. include/rerun/components/radius.hpp +98 -0
  356. include/rerun/components/range1d.hpp +75 -0
  357. include/rerun/components/resolution.hpp +88 -0
  358. include/rerun/components/rotation_axis_angle.hpp +72 -0
  359. include/rerun/components/rotation_quat.hpp +71 -0
  360. include/rerun/components/scalar.hpp +76 -0
  361. include/rerun/components/scale3d.hpp +102 -0
  362. include/rerun/components/series_visible.hpp +76 -0
  363. include/rerun/components/show_labels.hpp +79 -0
  364. include/rerun/components/stroke_width.hpp +74 -0
  365. include/rerun/components/tensor_data.hpp +94 -0
  366. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  367. include/rerun/components/tensor_height_dimension.hpp +71 -0
  368. include/rerun/components/tensor_width_dimension.hpp +71 -0
  369. include/rerun/components/texcoord2d.hpp +101 -0
  370. include/rerun/components/text.hpp +83 -0
  371. include/rerun/components/text_log_level.hpp +110 -0
  372. include/rerun/components/timestamp.hpp +76 -0
  373. include/rerun/components/transform_mat3x3.hpp +92 -0
  374. include/rerun/components/transform_relation.hpp +66 -0
  375. include/rerun/components/translation3d.hpp +96 -0
  376. include/rerun/components/triangle_indices.hpp +85 -0
  377. include/rerun/components/value_range.hpp +78 -0
  378. include/rerun/components/vector2d.hpp +92 -0
  379. include/rerun/components/vector3d.hpp +96 -0
  380. include/rerun/components/video_timestamp.hpp +120 -0
  381. include/rerun/components/view_coordinates.hpp +346 -0
  382. include/rerun/components/visible.hpp +74 -0
  383. include/rerun/components.hpp +77 -0
  384. include/rerun/config.hpp +52 -0
  385. include/rerun/datatypes/angle.hpp +76 -0
  386. include/rerun/datatypes/annotation_info.hpp +76 -0
  387. include/rerun/datatypes/blob.hpp +67 -0
  388. include/rerun/datatypes/bool.hpp +57 -0
  389. include/rerun/datatypes/channel_datatype.hpp +87 -0
  390. include/rerun/datatypes/class_description.hpp +92 -0
  391. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  392. include/rerun/datatypes/class_id.hpp +62 -0
  393. include/rerun/datatypes/color_model.hpp +68 -0
  394. include/rerun/datatypes/dvec2d.hpp +76 -0
  395. include/rerun/datatypes/entity_path.hpp +60 -0
  396. include/rerun/datatypes/float32.hpp +62 -0
  397. include/rerun/datatypes/float64.hpp +62 -0
  398. include/rerun/datatypes/image_format.hpp +107 -0
  399. include/rerun/datatypes/keypoint_id.hpp +63 -0
  400. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  401. include/rerun/datatypes/mat3x3.hpp +105 -0
  402. include/rerun/datatypes/mat4x4.hpp +119 -0
  403. include/rerun/datatypes/pixel_format.hpp +142 -0
  404. include/rerun/datatypes/plane3d.hpp +60 -0
  405. include/rerun/datatypes/quaternion.hpp +110 -0
  406. include/rerun/datatypes/range1d.hpp +59 -0
  407. include/rerun/datatypes/range2d.hpp +55 -0
  408. include/rerun/datatypes/rgba32.hpp +94 -0
  409. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  410. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  411. include/rerun/datatypes/tensor_data.hpp +100 -0
  412. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  413. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  414. include/rerun/datatypes/time_int.hpp +62 -0
  415. include/rerun/datatypes/time_range.hpp +55 -0
  416. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  417. include/rerun/datatypes/uint16.hpp +62 -0
  418. include/rerun/datatypes/uint32.hpp +62 -0
  419. include/rerun/datatypes/uint64.hpp +62 -0
  420. include/rerun/datatypes/utf8.hpp +76 -0
  421. include/rerun/datatypes/utf8pair.hpp +62 -0
  422. include/rerun/datatypes/uuid.hpp +60 -0
  423. include/rerun/datatypes/uvec2d.hpp +76 -0
  424. include/rerun/datatypes/uvec3d.hpp +80 -0
  425. include/rerun/datatypes/uvec4d.hpp +59 -0
  426. include/rerun/datatypes/vec2d.hpp +76 -0
  427. include/rerun/datatypes/vec3d.hpp +80 -0
  428. include/rerun/datatypes/vec4d.hpp +84 -0
  429. include/rerun/datatypes/video_timestamp.hpp +67 -0
  430. include/rerun/datatypes/view_coordinates.hpp +87 -0
  431. include/rerun/datatypes/visible_time_range.hpp +57 -0
  432. include/rerun/datatypes.hpp +51 -0
  433. include/rerun/demo_utils.hpp +75 -0
  434. include/rerun/entity_path.hpp +20 -0
  435. include/rerun/error.hpp +180 -0
  436. include/rerun/half.hpp +10 -0
  437. include/rerun/image_utils.hpp +187 -0
  438. include/rerun/indicator_component.hpp +59 -0
  439. include/rerun/loggable.hpp +54 -0
  440. include/rerun/recording_stream.hpp +960 -0
  441. include/rerun/rerun_sdk_export.hpp +25 -0
  442. include/rerun/result.hpp +86 -0
  443. include/rerun/rotation3d.hpp +33 -0
  444. include/rerun/sdk_info.hpp +20 -0
  445. include/rerun/spawn.hpp +21 -0
  446. include/rerun/spawn_options.hpp +57 -0
  447. include/rerun/string_utils.hpp +16 -0
  448. include/rerun/third_party/cxxopts.hpp +2198 -0
  449. include/rerun/time_column.hpp +288 -0
  450. include/rerun/timeline.hpp +38 -0
  451. include/rerun/type_traits.hpp +40 -0
  452. include/rerun.hpp +86 -0
  453. lib/cmake/axel/axel-config.cmake +45 -0
  454. lib/cmake/axel/axelTargets-release.cmake +19 -0
  455. lib/cmake/axel/axelTargets.cmake +108 -0
  456. lib/cmake/momentum/Findre2.cmake +52 -0
  457. lib/cmake/momentum/momentum-config.cmake +67 -0
  458. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  459. lib/cmake/momentum/momentumTargets.cmake +377 -0
  460. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  461. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  462. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  463. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  464. lib/libarrow.a +0 -0
  465. lib/libarrow_bundled_dependencies.a +0 -0
  466. lib/libaxel.a +0 -0
  467. lib/libmomentum_app_utils.a +0 -0
  468. lib/libmomentum_character.a +0 -0
  469. lib/libmomentum_character_sequence_solver.a +0 -0
  470. lib/libmomentum_character_solver.a +0 -0
  471. lib/libmomentum_common.a +0 -0
  472. lib/libmomentum_diff_ik.a +0 -0
  473. lib/libmomentum_io.a +0 -0
  474. lib/libmomentum_io_common.a +0 -0
  475. lib/libmomentum_io_fbx.a +0 -0
  476. lib/libmomentum_io_gltf.a +0 -0
  477. lib/libmomentum_io_legacy_json.a +0 -0
  478. lib/libmomentum_io_marker.a +0 -0
  479. lib/libmomentum_io_motion.a +0 -0
  480. lib/libmomentum_io_shape.a +0 -0
  481. lib/libmomentum_io_skeleton.a +0 -0
  482. lib/libmomentum_io_urdf.a +0 -0
  483. lib/libmomentum_marker_tracker.a +0 -0
  484. lib/libmomentum_math.a +0 -0
  485. lib/libmomentum_online_qr.a +0 -0
  486. lib/libmomentum_process_markers.a +0 -0
  487. lib/libmomentum_rerun.a +0 -0
  488. lib/libmomentum_simd_constraints.a +0 -0
  489. lib/libmomentum_simd_generalized_loss.a +0 -0
  490. lib/libmomentum_skeleton.a +0 -0
  491. lib/libmomentum_solver.a +0 -0
  492. lib/librerun_c__macos_arm64.a +0 -0
  493. lib/librerun_sdk.a +0 -0
  494. pymomentum/axel.cpython-313-darwin.so +0 -0
  495. pymomentum/backend/__init__.py +16 -0
  496. pymomentum/backend/skel_state_backend.py +631 -0
  497. pymomentum/backend/trs_backend.py +889 -0
  498. pymomentum/backend/utils.py +224 -0
  499. pymomentum/geometry.cpython-313-darwin.so +0 -0
  500. pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
  501. pymomentum/quaternion.py +740 -0
  502. pymomentum/skel_state.py +514 -0
  503. pymomentum/solver.cpython-313-darwin.so +0 -0
  504. pymomentum/solver2.cpython-313-darwin.so +0 -0
  505. pymomentum/torch/character.py +863 -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.84.post0.dist-info/METADATA +126 -0
  510. pymomentum_cpu-0.1.84.post0.dist-info/RECORD +512 -0
  511. pymomentum_cpu-0.1.84.post0.dist-info/WHEEL +5 -0
  512. pymomentum_cpu-0.1.84.post0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,71 @@
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/types.h>
12
+ #include <momentum/math/mesh.h>
13
+ #include <momentum/math/types.h>
14
+
15
+ namespace momentum {
16
+
17
+ /// Represents the complete state of a model's mesh
18
+ ///
19
+ /// Stores the mesh in its various states throughout the deformation pipeline:
20
+ /// - neutralMesh: Base mesh before any deformations
21
+ /// - restMesh: Mesh after blend shapes/expressions are applied
22
+ /// - posedMesh: Final mesh after skinning is applied
23
+ template <typename T>
24
+ struct MeshStateT {
25
+ std::unique_ptr<MeshT<T>>
26
+ neutralMesh_; // Rest mesh without facial expression basis,
27
+ // used to restore the neutral shape after facial expressions are applied.
28
+ // Not used with there is a shape basis.
29
+ std::unique_ptr<MeshT<T>> restMesh_; // The rest positions of the mesh after shape basis
30
+ // (and potentially facial expression) has been applied
31
+ std::unique_ptr<MeshT<T>>
32
+ posedMesh_; // The posed mesh after the skeleton transforms have been applied.
33
+
34
+ /// Creates an empty mesh state
35
+ MeshStateT() noexcept = default;
36
+ MeshStateT(
37
+ const ModelParametersT<T>& parameters,
38
+ const SkeletonStateT<T>& state,
39
+ const Character& character) noexcept;
40
+ ~MeshStateT() noexcept;
41
+
42
+ /// Copy constructor
43
+ MeshStateT(const MeshStateT& other);
44
+
45
+ /// Copy assignment operator
46
+ MeshStateT& operator=(const MeshStateT& other);
47
+
48
+ /// Move constructor
49
+ MeshStateT(MeshStateT&& other) noexcept = default;
50
+
51
+ /// Move assignment operator
52
+ MeshStateT& operator=(MeshStateT&& other) noexcept = default;
53
+
54
+ /// Updates the mesh state based on model parameters and skeleton state
55
+ ///
56
+ /// This applies the full deformation pipeline:
57
+ /// 1. Apply blend shapes to create rest mesh
58
+ /// 2. Apply face expression blend shapes
59
+ /// 3. Update normals
60
+ /// 4. Apply skinning to create posed mesh
61
+ ///
62
+ /// @param parameters Model parameters containing blend weights
63
+ /// @param state Current skeleton state for skinning
64
+ /// @param character Character containing mesh, blend shapes, and skinning data
65
+ void update(
66
+ const ModelParametersT<T>& parameters,
67
+ const SkeletonStateT<T>& state,
68
+ const Character& character);
69
+ };
70
+
71
+ } // namespace momentum
@@ -0,0 +1,144 @@
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/types.h>
12
+ #include <momentum/common/memory.h>
13
+ #include <momentum/math/utility.h>
14
+
15
+ #include <array>
16
+ #include <cstring>
17
+
18
+ namespace momentum {
19
+
20
+ enum LimitType {
21
+ MinMax,
22
+ MinMaxJoint,
23
+ MinMaxJointPassive,
24
+ Linear,
25
+ LinearJoint,
26
+ Ellipsoid,
27
+ HalfPlane,
28
+
29
+ // Keep this as the last entry to track the number of enum values
30
+ LimitTypeCount
31
+ };
32
+
33
+ [[nodiscard]] std::string_view toString(LimitType type);
34
+
35
+ struct LimitMinMax {
36
+ size_t parameterIndex;
37
+ Vector2f limits; ///< [min, max]
38
+ };
39
+
40
+ struct LimitMinMaxJoint {
41
+ size_t jointIndex;
42
+ size_t jointParameter; ///< One of [tx, ty, tz, rx, ry, rz, sc]
43
+ Vector2f limits; ///< [min, max]
44
+ };
45
+
46
+ /// Linear relationship between parameters: p_0 = s * p_1 - o
47
+ struct LimitLinear {
48
+ size_t referenceIndex; ///< p_0
49
+ size_t targetIndex; ///< p_1
50
+ float scale; ///< s
51
+ float offset; ///< o
52
+
53
+ /// Range where limit applies (in target parameter values)
54
+ ///
55
+ /// For piecewise linear limits without double-counting
56
+ float rangeMin; ///< Inclusive
57
+ float rangeMax; ///< Non-inclusive
58
+ };
59
+
60
+ struct LimitLinearJoint {
61
+ size_t referenceJointIndex;
62
+ size_t referenceJointParameter;
63
+ size_t targetJointIndex;
64
+ size_t targetJointParameter;
65
+ float scale;
66
+ float offset;
67
+
68
+ /// Range where limit applies (in target parameter values)
69
+ ///
70
+ /// For piecewise linear limits without double-counting
71
+ float rangeMin; ///< Inclusive
72
+ float rangeMax; ///< Non-inclusive
73
+ };
74
+
75
+ struct LimitEllipsoid {
76
+ alignas(32) Affine3f ellipsoid;
77
+ alignas(32) Affine3f ellipsoidInv;
78
+ alignas(32) Vector3f offset;
79
+ size_t ellipsoidParent;
80
+ size_t parent;
81
+ };
82
+
83
+ /// Constraint: (p1, p2) · (normal) - offset >= 0
84
+ struct LimitHalfPlane {
85
+ size_t param1;
86
+ size_t param2;
87
+ Vector2f normal;
88
+ float offset;
89
+ };
90
+
91
+ union LimitData {
92
+ LimitMinMax minMax;
93
+ LimitMinMaxJoint minMaxJoint;
94
+ LimitLinear linear;
95
+ LimitLinearJoint linearJoint;
96
+ LimitEllipsoid ellipsoid;
97
+ LimitHalfPlane halfPlane;
98
+ std::array<unsigned char, 512> rawData; ///< For memory operations
99
+
100
+ /// Initializes all data to zero
101
+ LimitData();
102
+
103
+ /// Raw memory copy (compiler can't determine which member's constructor to call)
104
+ LimitData(const LimitData& rhs);
105
+
106
+ LimitData& operator=(const LimitData& rhs);
107
+
108
+ /// Compares raw memory
109
+ bool operator==(const LimitData& limitData) const;
110
+ };
111
+
112
+ struct ParameterLimit {
113
+ LimitData data;
114
+ LimitType type = LimitType::MinMax;
115
+ float weight = 1.0f;
116
+
117
+ inline bool operator==(const ParameterLimit& parameterLimit) const {
118
+ return (
119
+ (data == parameterLimit.data) && (type == parameterLimit.type) &&
120
+ isApprox(weight, parameterLimit.weight));
121
+ }
122
+ };
123
+
124
+ using ParameterLimits = std::vector<ParameterLimit>;
125
+
126
+ /// Only processes MinMaxJointPassive limits, clamping parameters to their ranges
127
+ JointParameters applyPassiveJointParameterLimits(
128
+ const ParameterLimits& limits,
129
+ const JointParameters& jointParams);
130
+
131
+ /// Creates MinMax limits from a pose constraint
132
+ ParameterLimits getPoseConstraintParameterLimits(
133
+ const std::string& name,
134
+ const ParameterTransform& pt,
135
+ float weight = 1.0f);
136
+
137
+ /// If rangeMin and rangeMax are both 0, the limit applies to all values
138
+ bool isInRange(const LimitLinear& limit, float value);
139
+
140
+ /// If rangeMin and rangeMax are both 0, the limit applies to all values
141
+ bool isInRange(const LimitLinearJoint& limit, float value);
142
+
143
+ MOMENTUM_DEFINE_POINTERS(ParameterLimits)
144
+ } // namespace momentum
@@ -0,0 +1,250 @@
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/types.h>
12
+ #include <momentum/math/utility.h>
13
+
14
+ #include <span>
15
+
16
+ #include <string>
17
+ #include <unordered_map>
18
+
19
+ namespace momentum {
20
+
21
+ struct PoseConstraint {
22
+ /// A vector of tuple of type: (model parameter index, parameter value).
23
+ /// The model parameter index must be in [0, numModelParameters.size()).
24
+ /// The value of the model parameters specified here are kept constant (= parameter value) during
25
+ /// optimization. The ordering of elements in the vector doesn't matter (making it an unordered
26
+ /// map would be more semantically correct) since it stores an index to the model parameters
27
+ std::vector<std::pair<size_t, float>> parameterIdValue;
28
+
29
+ inline bool operator==(const PoseConstraint& poseConstraint) const {
30
+ // Compare the parameterIdValue as sets
31
+ std::map<size_t, float> paramIdToValue1;
32
+ std::copy(
33
+ parameterIdValue.begin(),
34
+ parameterIdValue.end(),
35
+ std::inserter(paramIdToValue1, paramIdToValue1.begin()));
36
+
37
+ std::map<size_t, float> paramIdToValue2;
38
+ std::copy(
39
+ poseConstraint.parameterIdValue.begin(),
40
+ poseConstraint.parameterIdValue.end(),
41
+ std::inserter(paramIdToValue2, paramIdToValue2.begin()));
42
+
43
+ if (paramIdToValue1.size() != paramIdToValue2.size()) {
44
+ return false;
45
+ }
46
+
47
+ auto pred = [](const auto& l, const auto& r) {
48
+ return ((l.first == r.first) && isApprox(l.second, r.second));
49
+ };
50
+ return std::equal(
51
+ paramIdToValue1.begin(), paramIdToValue1.end(), paramIdToValue2.begin(), pred);
52
+ }
53
+ };
54
+
55
+ using ParameterSets = std::unordered_map<std::string, ParameterSet>;
56
+ using PoseConstraints = std::unordered_map<std::string, PoseConstraint>;
57
+
58
+ /// A parameter transform is an abstraction of the joint parameters that maps a model_parameter
59
+ /// vector to a joint_parameter vector. It allows mapping a single model_parameter to multiple
60
+ /// joints, and a single joint being influenced by multiple model_parameters joint parameters are
61
+ /// calculated from parameters in the following way : <joint_parameters> = <transform> *
62
+ /// <model_parameters> + <offsets>
63
+ template <typename T>
64
+ struct ParameterTransformT {
65
+ /// The list of model parameter names.
66
+ std::vector<std::string> name;
67
+
68
+ /// The sparse mapping matrix that maps model parameters to joint parameters.
69
+ SparseRowMatrix<T> transform;
70
+
71
+ /// @deprecated Constant offset factor for each joint.
72
+ Eigen::VectorX<T> offsets;
73
+
74
+ /// The list of joint *parameters* that are actually active and influenced from the transform.
75
+ VectorX<bool> activeJointParams;
76
+
77
+ /// Convenience grouping of model parameters.
78
+ ParameterSets parameterSets;
79
+
80
+ /// A set of predefined poses.
81
+ PoseConstraints poseConstraints;
82
+
83
+ /// The indices of the parameters that influence blend shapes; blendShapeParameters(0) is the
84
+ /// parameter that controls the 0th blend shape, etc.
85
+ VectorXi blendShapeParameters;
86
+
87
+ /// The indices of the parameters that influence face expressions; faceExpressionParameters(0) is
88
+ /// the parameter that controls the 0th face expression parameter, etc.
89
+ VectorXi faceExpressionParameters;
90
+
91
+ /// Parameters that control the rest-space positions of the skinned locators.
92
+ /// This array will be either empty or have the same size as the number of
93
+ /// skinned locators. Each entry maps from a skinned locator index to the
94
+ /// first of the three (x,y,z) parameters that control its position. Skinned
95
+ /// locators that aren't controlled by the paramete transform will have
96
+ /// skinnedLocatorParameters[i] = -1.
97
+ VectorXi skinnedLocatorParameters;
98
+
99
+ /// Return a ParameterTransform object with no model parameters. The model can still perform FK
100
+ /// with JointParameters, but it does not have any degrees of freedom for IK.
101
+ [[nodiscard]] static ParameterTransformT<T> empty(size_t nJointParameters);
102
+
103
+ /// Return a ParameterTransform object where the model parameters are identical to the joint
104
+ /// parameters.
105
+ [[nodiscard]] static ParameterTransformT<T> identity(std::span<const std::string> jointNames);
106
+
107
+ /// Compute activeJointParams based on the transform and the input ParameterSet.
108
+ [[nodiscard]] VectorX<bool> computeActiveJointParams(const ParameterSet& ps = allParams()) const;
109
+
110
+ /// Return the index of a model parameter from its name.
111
+ [[nodiscard]] size_t getParameterIdByName(const std::string& nm) const;
112
+
113
+ /// Map model parameters to joint parameters using a linear transformation.
114
+ [[nodiscard]] JointParametersT<T> apply(const ModelParametersT<T>& parameters) const;
115
+
116
+ /// Map model parameters to joint parameters using a linear transformation.
117
+ [[nodiscard]] JointParametersT<T> apply(const CharacterParametersT<T>& parameters) const;
118
+
119
+ /// Return rest pose joint parameters.
120
+ [[nodiscard]] JointParametersT<T> zero() const;
121
+
122
+ /// Return bind pose joint parameters (same as the rest pose here).
123
+ [[nodiscard]] JointParametersT<T> bindPose() const;
124
+
125
+ /// Get a list of scaling parameters (with prefix "scale_").
126
+ [[nodiscard]] ParameterSet getScalingParameters() const;
127
+
128
+ /// Get a list of root parameters (with prefix "root_")
129
+ [[nodiscard]] ParameterSet getRigidParameters() const;
130
+
131
+ /// Return all parameters used for posing the body (excludes scaling parameters, blend shape
132
+ /// parameters, or any parameters used for physics).
133
+ [[nodiscard]] ParameterSet getPoseParameters() const;
134
+
135
+ /// Get a list of blend shape parameters.
136
+ [[nodiscard]] ParameterSet getBlendShapeParameters() const;
137
+
138
+ /// Get a list of face expression parameters.
139
+ [[nodiscard]] ParameterSet getFaceExpressionParameters() const;
140
+
141
+ /// Get a list of skinned locator parameters
142
+ [[nodiscard]] ParameterSet getSkinnedLocatorParameters() const;
143
+
144
+ /// Get a parameter set, if allowMissing is set then it will return an empty parameter set if no
145
+ /// such parameterset is found in the file.
146
+ [[nodiscard]] ParameterSet getParameterSet(
147
+ const std::string& parameterSetName,
148
+ bool allowMissing = false) const;
149
+
150
+ template <typename T2>
151
+ [[nodiscard]] ParameterTransformT<T2> cast() const;
152
+
153
+ /// Create a simplified transform given the enabled parameters.
154
+ [[nodiscard]] ParameterTransformT<T> simplify(const ParameterSet& enabledParameters) const;
155
+
156
+ /// Dimension of all model parameters, including pose, scaling, marker joints, and blendshape
157
+ /// parameters for id and expressions.
158
+ [[nodiscard]] Eigen::Index numAllModelParameters() const {
159
+ return transform.cols();
160
+ }
161
+
162
+ /// Dimension of the output jointParameters vector.
163
+ [[nodiscard]] Eigen::Index numJointParameters() const {
164
+ return transform.rows();
165
+ }
166
+
167
+ /// Dimension of identity blendshape parameters.
168
+ [[nodiscard]] Eigen::Index numBlendShapeParameters() const;
169
+
170
+ /// Dimension of facial expression parameters.
171
+ [[nodiscard]] Eigen::Index numFaceExpressionParameters() const;
172
+
173
+ /// Dimension of facial expression parameters.
174
+ [[nodiscard]] Eigen::Index numSkinnedLocatorParameters() const;
175
+
176
+ /// Dimension of skeletal model parameters, including pose parameters,
177
+ /// scaling parameters, locator joint parameters etc. basically everything
178
+ /// but blendshapes (ids and expressions).
179
+ [[nodiscard]] Eigen::Index numSkeletonParameters() const {
180
+ return numAllModelParameters() - numBlendShapeParameters() - numFaceExpressionParameters() -
181
+ numSkinnedLocatorParameters();
182
+ }
183
+
184
+ [[nodiscard]] inline bool isApprox(const ParameterTransformT<T>& parameterTransform) const {
185
+ // special handling of zero sparse matrix
186
+ bool isTransformEqual = false;
187
+ if (transform.cols() > 0 && transform.rows() > 0 && parameterTransform.transform.cols() > 0 &&
188
+ parameterTransform.transform.rows() > 0) {
189
+ isTransformEqual = transform.isApprox(parameterTransform.transform);
190
+ } else {
191
+ isTransformEqual = (transform.cols() == parameterTransform.transform.cols()) &&
192
+ (transform.rows() == parameterTransform.transform.rows());
193
+ }
194
+ if (!isTransformEqual) {
195
+ return false;
196
+ }
197
+
198
+ return (
199
+ (name == parameterTransform.name) &&
200
+ activeJointParams.isApprox(parameterTransform.activeJointParams) &&
201
+ (parameterSets == parameterTransform.parameterSets) &&
202
+ (poseConstraints == parameterTransform.poseConstraints) &&
203
+ (blendShapeParameters == parameterTransform.blendShapeParameters));
204
+ }
205
+ };
206
+
207
+ using ParameterTransform = ParameterTransformT<float>;
208
+ using ParameterTransformd = ParameterTransformT<double>;
209
+
210
+ /// Return a parameter mapping that only includes the listed parameters.
211
+ template <typename T>
212
+ [[nodiscard]] std::tuple<ParameterTransformT<T>, ParameterLimits> subsetParameterTransform(
213
+ const ParameterTransformT<T>& paramTransform,
214
+ const ParameterLimits& paramLimitsOld,
215
+ const ParameterSet& paramSet);
216
+
217
+ /// Construct a new parameter transform where the joints have been mapped to a
218
+ /// new skeleton. Joints that are mapped to kInvalidIndex will be simply skipped.
219
+ /// Note that this does _not_ delete any parameters so it's possible if you remove
220
+ /// enough joints to have "orphan" parameters still kicking around; to avoid this
221
+ /// consider also applying an appropriate subsetParameterTransform() operation.
222
+ template <typename T>
223
+ [[nodiscard]] ParameterTransformT<T> mapParameterTransformJoints(
224
+ const ParameterTransformT<T>& parameterTransform,
225
+ size_t numTargetJoints,
226
+ const std::vector<size_t>& jointMapping);
227
+
228
+ [[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addBlendShapeParameters(
229
+ ParameterTransform paramTransform,
230
+ ParameterLimits paramLimits,
231
+ Eigen::Index nBlendShapes);
232
+
233
+ [[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addFaceExpressionParameters(
234
+ ParameterTransform paramTransform,
235
+ ParameterLimits paramLimits,
236
+ Eigen::Index nFaceExpressionBlendShapes);
237
+
238
+ /// Add a set of parameters that control the rest-space positions of the skinned locators.
239
+ /// This function will add 3 parameters for each locator, one for each of the x, y, and z
240
+ /// components of the locator position. The parameters are added to the end of the
241
+ /// parameter transform. The parameter transform is returned along with the updated
242
+ /// list of parameter limits. Note that you pass in the locator names rather than the
243
+ /// actual SkinnedLocator objects because this avoids a circular dependency.
244
+ [[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addSkinnedLocatorParameters(
245
+ ParameterTransform paramTransform,
246
+ ParameterLimits paramLimits,
247
+ const std::vector<bool>& activeLocators,
248
+ const std::vector<std::string>& locatorNames = {});
249
+
250
+ } // 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 <momentum/character/fwd.h>
11
+ #include <momentum/math/types.h>
12
+
13
+ namespace momentum {
14
+
15
+ /// Computes shape deformations based on joint rotations.
16
+ ///
17
+ /// PoseShape implements a linear blend shape system where shape deformations
18
+ /// are driven by joint rotations. This is useful for modeling effects like
19
+ /// muscle bulging or skin sliding that occur during animation.
20
+ struct PoseShape {
21
+ /// Index of the joint used as reference for computing relative rotations.
22
+ size_t baseJoint;
23
+
24
+ /// Base rotation used as reference for computing rotation differences.
25
+ ///
26
+ /// The effective rotation used for deformation is baseRot * joint.rotation().inverse()
27
+ Quaternionf baseRot;
28
+
29
+ /// Indices of joints whose rotations drive the shape deformation.
30
+ std::vector<size_t> jointMap;
31
+
32
+ /// Base shape vertices stored as a flat vector [x1,y1,z1,x2,y2,z2,...].
33
+ ///
34
+ /// The size must be a multiple of 3 (3 coordinates per vertex).
35
+ VectorXf baseShape;
36
+
37
+ /// Shape deformation vectors for each quaternion component of each joint.
38
+ ///
39
+ /// Matrix dimensions are [baseShape.size() × (jointMap.size() * 4)].
40
+ /// Each column corresponds to a quaternion component (x,y,z,w) of a joint.
41
+ MatrixXf shapeVectors;
42
+
43
+ /// Computes the deformed shape based on the current skeleton state.
44
+ ///
45
+ /// @param state Current state of the skeleton containing joint rotations
46
+ /// @return Vector of 3D vertex positions representing the deformed shape
47
+ /// @throws If baseShape.size() != shapeVectors.rows()
48
+ [[nodiscard]] std::vector<Vector3f> compute(const SkeletonState& state) const;
49
+
50
+ /// Checks if this PoseShape is approximately equal to another.
51
+ ///
52
+ /// Two PoseShape objects are considered approximately equal if all their
53
+ /// corresponding members are approximately equal.
54
+ ///
55
+ /// @param poseShape The PoseShape to compare with
56
+ /// @return True if the PoseShape objects are approximately equal
57
+ [[nodiscard]] inline bool isApprox(const PoseShape& poseShape) const {
58
+ return (
59
+ (baseJoint == poseShape.baseJoint) && baseRot.isApprox(poseShape.baseRot) &&
60
+ (jointMap == poseShape.jointMap) && baseShape.isApprox(poseShape.baseShape) &&
61
+ shapeVectors.isApprox(poseShape.shapeVectors));
62
+ }
63
+ };
64
+
65
+ } // namespace momentum
@@ -0,0 +1,85 @@
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/joint.h>
11
+ #include <momentum/character/parameter_transform.h>
12
+ #include <momentum/character/types.h>
13
+ #include <momentum/common/exception.h>
14
+
15
+ #include <string>
16
+ #include <string_view>
17
+
18
+ namespace momentum {
19
+
20
+ /// The skeletal structure of a momentum Character.
21
+ template <typename T>
22
+ struct SkeletonT {
23
+ /// The list of joints in this skeleton.
24
+ JointList joints;
25
+
26
+ /// Default constructor
27
+ SkeletonT() = default;
28
+
29
+ /// Constructor that validates joint hierarchy.
30
+ /// Ensures parent indices are valid (parent < child index or kInvalidIndex).
31
+ explicit SkeletonT(JointList joints);
32
+
33
+ /// Copy constructor
34
+ SkeletonT(const SkeletonT& other) = default;
35
+
36
+ /// Move constructor
37
+ SkeletonT(SkeletonT&& other) noexcept = default;
38
+
39
+ /// Copy assignment operator
40
+ SkeletonT& operator=(const SkeletonT& other) = default;
41
+
42
+ /// Move assignment operator
43
+ SkeletonT& operator=(SkeletonT&& other) noexcept = default;
44
+
45
+ /// Returns the index of a joint with the given name, or kInvalidIndex if not found.
46
+ [[nodiscard]] size_t getJointIdByName(std::string_view name) const;
47
+
48
+ /// Returns a vector containing all joint names in the skeleton.
49
+ [[nodiscard]] std::vector<std::string> getJointNames() const;
50
+
51
+ /// Returns indices of child joints for the specified joint.
52
+ ///
53
+ /// @param jointId Index of the joint to find children for
54
+ /// @param recursive If true, returns all descendants; if false, only direct children
55
+ /// @throws std::out_of_range if jointId is invalid
56
+ [[nodiscard]] std::vector<size_t> getChildrenJoints(size_t jointId, bool recursive = true) const;
57
+
58
+ /// Determines if one joint is an ancestor of another in the hierarchy.
59
+ ///
60
+ /// Returns true if ancestorJointId is an ancestor of jointId.
61
+ /// A joint is considered to be its own ancestor (isAncestor(id, id) returns true).
62
+ [[nodiscard]] bool isAncestor(size_t jointId, size_t ancestorJointId) const;
63
+
64
+ /// Finds the closest common ancestor of two joints in the hierarchy.
65
+ ///
66
+ /// Returns the index of the joint that is the lowest common ancestor
67
+ /// in the hierarchy for the two specified joints.
68
+ [[nodiscard]] size_t commonAncestor(size_t joint1, size_t joint2) const;
69
+
70
+ /// Converts the skeleton to use a different scalar type.
71
+ ///
72
+ /// Returns a copy of this skeleton with all numeric values converted to type U.
73
+ template <typename U>
74
+ [[nodiscard]] SkeletonT<U> cast() const {
75
+ if constexpr (std::is_same_v<T, U>) {
76
+ return *this;
77
+ } else {
78
+ SkeletonT<U> newSkeleton;
79
+ newSkeleton.joints = ::momentum::cast<U>(joints);
80
+ return newSkeleton;
81
+ }
82
+ }
83
+ };
84
+
85
+ } // namespace momentum