pymomentum-cpu 0.1.93.post0__cp312-cp312-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. include/axel/BoundingBox.h +59 -0
  2. include/axel/Bvh.h +708 -0
  3. include/axel/BvhBase.h +75 -0
  4. include/axel/BvhCommon.h +43 -0
  5. include/axel/BvhEmbree.h +87 -0
  6. include/axel/BvhFactory.h +34 -0
  7. include/axel/Checks.h +21 -0
  8. include/axel/DualContouring.h +79 -0
  9. include/axel/KdTree.h +208 -0
  10. include/axel/Log.h +22 -0
  11. include/axel/MeshToSdf.h +123 -0
  12. include/axel/Profile.h +64 -0
  13. include/axel/Ray.h +45 -0
  14. include/axel/SignedDistanceField.h +248 -0
  15. include/axel/SimdKdTree.h +515 -0
  16. include/axel/TriBvh.h +157 -0
  17. include/axel/TriBvhEmbree.h +57 -0
  18. include/axel/common/Constants.h +27 -0
  19. include/axel/common/Types.h +21 -0
  20. include/axel/common/VectorizationTypes.h +58 -0
  21. include/axel/math/BoundingBoxUtils.h +54 -0
  22. include/axel/math/ContinuousCollisionDetection.h +48 -0
  23. include/axel/math/CoplanarityCheck.h +30 -0
  24. include/axel/math/EdgeEdgeDistance.h +31 -0
  25. include/axel/math/MeshHoleFilling.h +117 -0
  26. include/axel/math/PointTriangleProjection.h +34 -0
  27. include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
  28. include/axel/math/RayTriangleIntersection.h +36 -0
  29. include/momentum/character/blend_shape.h +97 -0
  30. include/momentum/character/blend_shape_base.h +86 -0
  31. include/momentum/character/blend_shape_skinning.h +96 -0
  32. include/momentum/character/character.h +272 -0
  33. include/momentum/character/character_state.h +108 -0
  34. include/momentum/character/character_utility.h +128 -0
  35. include/momentum/character/collision_geometry.h +80 -0
  36. include/momentum/character/collision_geometry_state.h +130 -0
  37. include/momentum/character/fwd.h +262 -0
  38. include/momentum/character/inverse_parameter_transform.h +58 -0
  39. include/momentum/character/joint.h +82 -0
  40. include/momentum/character/joint_state.h +241 -0
  41. include/momentum/character/linear_skinning.h +139 -0
  42. include/momentum/character/locator.h +94 -0
  43. include/momentum/character/locator_state.h +43 -0
  44. include/momentum/character/marker.h +48 -0
  45. include/momentum/character/mesh_state.h +71 -0
  46. include/momentum/character/parameter_limits.h +144 -0
  47. include/momentum/character/parameter_transform.h +207 -0
  48. include/momentum/character/pose_shape.h +65 -0
  49. include/momentum/character/skeleton.h +85 -0
  50. include/momentum/character/skeleton_state.h +227 -0
  51. include/momentum/character/skeleton_utility.h +38 -0
  52. include/momentum/character/skin_weights.h +67 -0
  53. include/momentum/character/skinned_locator.h +80 -0
  54. include/momentum/character/types.h +202 -0
  55. include/momentum/character_sequence_solver/fwd.h +200 -0
  56. include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
  57. include/momentum/character_sequence_solver/multipose_solver.h +65 -0
  58. include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
  59. include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
  60. include/momentum/character_sequence_solver/sequence_solver.h +155 -0
  61. include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
  62. include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -0
  63. include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
  64. include/momentum/character_solver/aim_error_function.h +112 -0
  65. include/momentum/character_solver/collision_error_function.h +92 -0
  66. include/momentum/character_solver/collision_error_function_stateless.h +75 -0
  67. include/momentum/character_solver/constraint_error_function-inl.h +324 -0
  68. include/momentum/character_solver/constraint_error_function.h +248 -0
  69. include/momentum/character_solver/distance_error_function.h +77 -0
  70. include/momentum/character_solver/error_function_utils.h +60 -0
  71. include/momentum/character_solver/fixed_axis_error_function.h +139 -0
  72. include/momentum/character_solver/fwd.h +943 -0
  73. include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
  74. include/momentum/character_solver/height_error_function.h +176 -0
  75. include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
  76. include/momentum/character_solver/limit_error_function.h +57 -0
  77. include/momentum/character_solver/model_parameters_error_function.h +64 -0
  78. include/momentum/character_solver/normal_error_function.h +73 -0
  79. include/momentum/character_solver/orientation_error_function.h +74 -0
  80. include/momentum/character_solver/plane_error_function.h +102 -0
  81. include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
  82. include/momentum/character_solver/pose_prior_error_function.h +80 -0
  83. include/momentum/character_solver/position_error_function.h +75 -0
  84. include/momentum/character_solver/projection_error_function.h +93 -0
  85. include/momentum/character_solver/simd_collision_error_function.h +99 -0
  86. include/momentum/character_solver/simd_normal_error_function.h +157 -0
  87. include/momentum/character_solver/simd_plane_error_function.h +164 -0
  88. include/momentum/character_solver/simd_position_error_function.h +165 -0
  89. include/momentum/character_solver/skeleton_error_function.h +151 -0
  90. include/momentum/character_solver/skeleton_solver_function.h +94 -0
  91. include/momentum/character_solver/skinned_locator_error_function.h +166 -0
  92. include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
  93. include/momentum/character_solver/skinning_weight_iterator.h +80 -0
  94. include/momentum/character_solver/state_error_function.h +119 -0
  95. include/momentum/character_solver/transform_pose.h +80 -0
  96. include/momentum/character_solver/trust_region_qr.h +80 -0
  97. include/momentum/character_solver/vertex_error_function.h +155 -0
  98. include/momentum/character_solver/vertex_projection_error_function.h +117 -0
  99. include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
  100. include/momentum/common/aligned.h +155 -0
  101. include/momentum/common/checks.h +27 -0
  102. include/momentum/common/exception.h +70 -0
  103. include/momentum/common/filesystem.h +20 -0
  104. include/momentum/common/fwd.h +27 -0
  105. include/momentum/common/log.h +173 -0
  106. include/momentum/common/log_channel.h +17 -0
  107. include/momentum/common/memory.h +71 -0
  108. include/momentum/common/profile.h +79 -0
  109. include/momentum/common/progress_bar.h +37 -0
  110. include/momentum/common/string.h +52 -0
  111. include/momentum/diff_ik/ceres_utility.h +73 -0
  112. include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
  113. include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
  114. include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
  115. include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
  116. include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
  117. include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
  118. include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
  119. include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
  120. include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
  121. include/momentum/diff_ik/fwd.h +385 -0
  122. include/momentum/diff_ik/union_error_function.h +67 -0
  123. include/momentum/gui/rerun/eigen_adapters.h +70 -0
  124. include/momentum/gui/rerun/logger.h +102 -0
  125. include/momentum/gui/rerun/logging_redirect.h +27 -0
  126. include/momentum/io/character_io.h +98 -0
  127. include/momentum/io/common/gsl_utils.h +50 -0
  128. include/momentum/io/common/stream_utils.h +65 -0
  129. include/momentum/io/fbx/fbx_io.h +135 -0
  130. include/momentum/io/fbx/fbx_memory_stream.h +70 -0
  131. include/momentum/io/fbx/openfbx_loader.h +62 -0
  132. include/momentum/io/fbx/polygon_data.h +60 -0
  133. include/momentum/io/file_save_options.h +107 -0
  134. include/momentum/io/gltf/gltf_builder.h +141 -0
  135. include/momentum/io/gltf/gltf_io.h +149 -0
  136. include/momentum/io/gltf/utils/accessor_utils.h +299 -0
  137. include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
  138. include/momentum/io/gltf/utils/json_utils.h +102 -0
  139. include/momentum/io/legacy_json/legacy_json_io.h +70 -0
  140. include/momentum/io/marker/c3d_io.h +30 -0
  141. include/momentum/io/marker/conversions.h +57 -0
  142. include/momentum/io/marker/coordinate_system.h +30 -0
  143. include/momentum/io/marker/marker_io.h +56 -0
  144. include/momentum/io/marker/trc_io.h +27 -0
  145. include/momentum/io/motion/mmo_io.h +97 -0
  146. include/momentum/io/shape/blend_shape_io.h +82 -0
  147. include/momentum/io/shape/pose_shape_io.h +21 -0
  148. include/momentum/io/skeleton/locator_io.h +41 -0
  149. include/momentum/io/skeleton/mppca_io.h +26 -0
  150. include/momentum/io/skeleton/parameter_limits_io.h +38 -0
  151. include/momentum/io/skeleton/parameter_transform_io.h +80 -0
  152. include/momentum/io/skeleton/parameters_io.h +20 -0
  153. include/momentum/io/skeleton/utility.h +67 -0
  154. include/momentum/io/urdf/urdf_io.h +26 -0
  155. include/momentum/io/usd/usd_io.h +36 -0
  156. include/momentum/marker_tracking/app_utils.h +64 -0
  157. include/momentum/marker_tracking/marker_tracker.h +221 -0
  158. include/momentum/marker_tracking/process_markers.h +58 -0
  159. include/momentum/marker_tracking/tracker_utils.h +99 -0
  160. include/momentum/math/constants.h +82 -0
  161. include/momentum/math/covariance_matrix.h +84 -0
  162. include/momentum/math/fmt_eigen.h +23 -0
  163. include/momentum/math/fwd.h +132 -0
  164. include/momentum/math/generalized_loss.h +61 -0
  165. include/momentum/math/intersection.h +32 -0
  166. include/momentum/math/mesh.h +84 -0
  167. include/momentum/math/mppca.h +67 -0
  168. include/momentum/math/online_householder_qr.h +516 -0
  169. include/momentum/math/random-inl.h +404 -0
  170. include/momentum/math/random.h +310 -0
  171. include/momentum/math/simd_generalized_loss.h +40 -0
  172. include/momentum/math/transform.h +229 -0
  173. include/momentum/math/types.h +461 -0
  174. include/momentum/math/utility.h +324 -0
  175. include/momentum/rasterizer/camera.h +453 -0
  176. include/momentum/rasterizer/fwd.h +102 -0
  177. include/momentum/rasterizer/geometry.h +83 -0
  178. include/momentum/rasterizer/image.h +18 -0
  179. include/momentum/rasterizer/rasterizer.h +583 -0
  180. include/momentum/rasterizer/tensor.h +140 -0
  181. include/momentum/rasterizer/text_rasterizer.h +89 -0
  182. include/momentum/rasterizer/utility.h +268 -0
  183. include/momentum/simd/simd.h +221 -0
  184. include/momentum/solver/fwd.h +131 -0
  185. include/momentum/solver/gauss_newton_solver.h +136 -0
  186. include/momentum/solver/gradient_descent_solver.h +65 -0
  187. include/momentum/solver/solver.h +155 -0
  188. include/momentum/solver/solver_function.h +126 -0
  189. include/momentum/solver/subset_gauss_newton_solver.h +109 -0
  190. include/rerun/archetypes/annotation_context.hpp +157 -0
  191. include/rerun/archetypes/arrows2d.hpp +271 -0
  192. include/rerun/archetypes/arrows3d.hpp +257 -0
  193. include/rerun/archetypes/asset3d.hpp +262 -0
  194. include/rerun/archetypes/asset_video.hpp +275 -0
  195. include/rerun/archetypes/bar_chart.hpp +261 -0
  196. include/rerun/archetypes/boxes2d.hpp +293 -0
  197. include/rerun/archetypes/boxes3d.hpp +369 -0
  198. include/rerun/archetypes/capsules3d.hpp +333 -0
  199. include/rerun/archetypes/clear.hpp +180 -0
  200. include/rerun/archetypes/depth_image.hpp +425 -0
  201. include/rerun/archetypes/ellipsoids3d.hpp +384 -0
  202. include/rerun/archetypes/encoded_image.hpp +250 -0
  203. include/rerun/archetypes/geo_line_strings.hpp +166 -0
  204. include/rerun/archetypes/geo_points.hpp +177 -0
  205. include/rerun/archetypes/graph_edges.hpp +152 -0
  206. include/rerun/archetypes/graph_nodes.hpp +206 -0
  207. include/rerun/archetypes/image.hpp +434 -0
  208. include/rerun/archetypes/instance_poses3d.hpp +221 -0
  209. include/rerun/archetypes/line_strips2d.hpp +289 -0
  210. include/rerun/archetypes/line_strips3d.hpp +270 -0
  211. include/rerun/archetypes/mesh3d.hpp +387 -0
  212. include/rerun/archetypes/pinhole.hpp +385 -0
  213. include/rerun/archetypes/points2d.hpp +333 -0
  214. include/rerun/archetypes/points3d.hpp +369 -0
  215. include/rerun/archetypes/recording_properties.hpp +132 -0
  216. include/rerun/archetypes/scalar.hpp +170 -0
  217. include/rerun/archetypes/scalars.hpp +153 -0
  218. include/rerun/archetypes/segmentation_image.hpp +305 -0
  219. include/rerun/archetypes/series_line.hpp +274 -0
  220. include/rerun/archetypes/series_lines.hpp +271 -0
  221. include/rerun/archetypes/series_point.hpp +265 -0
  222. include/rerun/archetypes/series_points.hpp +251 -0
  223. include/rerun/archetypes/tensor.hpp +213 -0
  224. include/rerun/archetypes/text_document.hpp +200 -0
  225. include/rerun/archetypes/text_log.hpp +211 -0
  226. include/rerun/archetypes/transform3d.hpp +925 -0
  227. include/rerun/archetypes/video_frame_reference.hpp +295 -0
  228. include/rerun/archetypes/view_coordinates.hpp +393 -0
  229. include/rerun/archetypes.hpp +43 -0
  230. include/rerun/arrow_utils.hpp +32 -0
  231. include/rerun/as_components.hpp +90 -0
  232. include/rerun/blueprint/archetypes/background.hpp +113 -0
  233. include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
  234. include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
  235. include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
  236. include/rerun/blueprint/archetypes/force_center.hpp +115 -0
  237. include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
  238. include/rerun/blueprint/archetypes/force_link.hpp +136 -0
  239. include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
  240. include/rerun/blueprint/archetypes/force_position.hpp +132 -0
  241. include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
  242. include/rerun/blueprint/archetypes/map_background.hpp +104 -0
  243. include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
  244. include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
  245. include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
  246. include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
  247. include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
  248. include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
  249. include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
  250. include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
  251. include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
  252. include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
  253. include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
  254. include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
  255. include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
  256. include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
  257. include/rerun/blueprint/archetypes.hpp +29 -0
  258. include/rerun/blueprint/components/active_tab.hpp +82 -0
  259. include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
  260. include/rerun/blueprint/components/auto_layout.hpp +77 -0
  261. include/rerun/blueprint/components/auto_views.hpp +77 -0
  262. include/rerun/blueprint/components/background_kind.hpp +66 -0
  263. include/rerun/blueprint/components/column_share.hpp +78 -0
  264. include/rerun/blueprint/components/component_column_selector.hpp +81 -0
  265. include/rerun/blueprint/components/container_kind.hpp +65 -0
  266. include/rerun/blueprint/components/corner2d.hpp +64 -0
  267. include/rerun/blueprint/components/enabled.hpp +77 -0
  268. include/rerun/blueprint/components/filter_by_range.hpp +74 -0
  269. include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
  270. include/rerun/blueprint/components/force_distance.hpp +82 -0
  271. include/rerun/blueprint/components/force_iterations.hpp +82 -0
  272. include/rerun/blueprint/components/force_strength.hpp +82 -0
  273. include/rerun/blueprint/components/grid_columns.hpp +78 -0
  274. include/rerun/blueprint/components/grid_spacing.hpp +78 -0
  275. include/rerun/blueprint/components/included_content.hpp +86 -0
  276. include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
  277. include/rerun/blueprint/components/map_provider.hpp +64 -0
  278. include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
  279. include/rerun/blueprint/components/panel_state.hpp +61 -0
  280. include/rerun/blueprint/components/query_expression.hpp +89 -0
  281. include/rerun/blueprint/components/root_container.hpp +77 -0
  282. include/rerun/blueprint/components/row_share.hpp +78 -0
  283. include/rerun/blueprint/components/selected_columns.hpp +76 -0
  284. include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
  285. include/rerun/blueprint/components/timeline_name.hpp +76 -0
  286. include/rerun/blueprint/components/view_class.hpp +76 -0
  287. include/rerun/blueprint/components/view_fit.hpp +61 -0
  288. include/rerun/blueprint/components/view_maximized.hpp +79 -0
  289. include/rerun/blueprint/components/view_origin.hpp +81 -0
  290. include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
  291. include/rerun/blueprint/components/visible_time_range.hpp +77 -0
  292. include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
  293. include/rerun/blueprint/components/visualizer_override.hpp +86 -0
  294. include/rerun/blueprint/components/zoom_level.hpp +78 -0
  295. include/rerun/blueprint/components.hpp +41 -0
  296. include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
  297. include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
  298. include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
  299. include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
  300. include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
  301. include/rerun/blueprint/datatypes.hpp +9 -0
  302. include/rerun/c/arrow_c_data_interface.h +111 -0
  303. include/rerun/c/compiler_utils.h +10 -0
  304. include/rerun/c/rerun.h +627 -0
  305. include/rerun/c/sdk_info.h +28 -0
  306. include/rerun/collection.hpp +496 -0
  307. include/rerun/collection_adapter.hpp +43 -0
  308. include/rerun/collection_adapter_builtins.hpp +138 -0
  309. include/rerun/compiler_utils.hpp +61 -0
  310. include/rerun/component_batch.hpp +163 -0
  311. include/rerun/component_column.hpp +111 -0
  312. include/rerun/component_descriptor.hpp +142 -0
  313. include/rerun/component_type.hpp +35 -0
  314. include/rerun/components/aggregation_policy.hpp +76 -0
  315. include/rerun/components/albedo_factor.hpp +74 -0
  316. include/rerun/components/annotation_context.hpp +102 -0
  317. include/rerun/components/axis_length.hpp +74 -0
  318. include/rerun/components/blob.hpp +73 -0
  319. include/rerun/components/class_id.hpp +71 -0
  320. include/rerun/components/clear_is_recursive.hpp +75 -0
  321. include/rerun/components/color.hpp +99 -0
  322. include/rerun/components/colormap.hpp +99 -0
  323. include/rerun/components/depth_meter.hpp +84 -0
  324. include/rerun/components/draw_order.hpp +79 -0
  325. include/rerun/components/entity_path.hpp +83 -0
  326. include/rerun/components/fill_mode.hpp +72 -0
  327. include/rerun/components/fill_ratio.hpp +79 -0
  328. include/rerun/components/gamma_correction.hpp +80 -0
  329. include/rerun/components/geo_line_string.hpp +63 -0
  330. include/rerun/components/graph_edge.hpp +75 -0
  331. include/rerun/components/graph_node.hpp +79 -0
  332. include/rerun/components/graph_type.hpp +57 -0
  333. include/rerun/components/half_size2d.hpp +91 -0
  334. include/rerun/components/half_size3d.hpp +95 -0
  335. include/rerun/components/image_buffer.hpp +86 -0
  336. include/rerun/components/image_format.hpp +84 -0
  337. include/rerun/components/image_plane_distance.hpp +77 -0
  338. include/rerun/components/interactive.hpp +76 -0
  339. include/rerun/components/keypoint_id.hpp +74 -0
  340. include/rerun/components/lat_lon.hpp +89 -0
  341. include/rerun/components/length.hpp +77 -0
  342. include/rerun/components/line_strip2d.hpp +73 -0
  343. include/rerun/components/line_strip3d.hpp +73 -0
  344. include/rerun/components/magnification_filter.hpp +63 -0
  345. include/rerun/components/marker_shape.hpp +82 -0
  346. include/rerun/components/marker_size.hpp +74 -0
  347. include/rerun/components/media_type.hpp +157 -0
  348. include/rerun/components/name.hpp +83 -0
  349. include/rerun/components/opacity.hpp +77 -0
  350. include/rerun/components/pinhole_projection.hpp +94 -0
  351. include/rerun/components/plane3d.hpp +75 -0
  352. include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
  353. include/rerun/components/pose_rotation_quat.hpp +71 -0
  354. include/rerun/components/pose_scale3d.hpp +102 -0
  355. include/rerun/components/pose_transform_mat3x3.hpp +87 -0
  356. include/rerun/components/pose_translation3d.hpp +96 -0
  357. include/rerun/components/position2d.hpp +86 -0
  358. include/rerun/components/position3d.hpp +90 -0
  359. include/rerun/components/radius.hpp +98 -0
  360. include/rerun/components/range1d.hpp +75 -0
  361. include/rerun/components/resolution.hpp +88 -0
  362. include/rerun/components/rotation_axis_angle.hpp +72 -0
  363. include/rerun/components/rotation_quat.hpp +71 -0
  364. include/rerun/components/scalar.hpp +76 -0
  365. include/rerun/components/scale3d.hpp +102 -0
  366. include/rerun/components/series_visible.hpp +76 -0
  367. include/rerun/components/show_labels.hpp +79 -0
  368. include/rerun/components/stroke_width.hpp +74 -0
  369. include/rerun/components/tensor_data.hpp +94 -0
  370. include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
  371. include/rerun/components/tensor_height_dimension.hpp +71 -0
  372. include/rerun/components/tensor_width_dimension.hpp +71 -0
  373. include/rerun/components/texcoord2d.hpp +101 -0
  374. include/rerun/components/text.hpp +83 -0
  375. include/rerun/components/text_log_level.hpp +110 -0
  376. include/rerun/components/timestamp.hpp +76 -0
  377. include/rerun/components/transform_mat3x3.hpp +92 -0
  378. include/rerun/components/transform_relation.hpp +66 -0
  379. include/rerun/components/translation3d.hpp +96 -0
  380. include/rerun/components/triangle_indices.hpp +85 -0
  381. include/rerun/components/value_range.hpp +78 -0
  382. include/rerun/components/vector2d.hpp +92 -0
  383. include/rerun/components/vector3d.hpp +96 -0
  384. include/rerun/components/video_timestamp.hpp +120 -0
  385. include/rerun/components/view_coordinates.hpp +346 -0
  386. include/rerun/components/visible.hpp +74 -0
  387. include/rerun/components.hpp +77 -0
  388. include/rerun/config.hpp +52 -0
  389. include/rerun/datatypes/angle.hpp +76 -0
  390. include/rerun/datatypes/annotation_info.hpp +76 -0
  391. include/rerun/datatypes/blob.hpp +67 -0
  392. include/rerun/datatypes/bool.hpp +57 -0
  393. include/rerun/datatypes/channel_datatype.hpp +87 -0
  394. include/rerun/datatypes/class_description.hpp +92 -0
  395. include/rerun/datatypes/class_description_map_elem.hpp +69 -0
  396. include/rerun/datatypes/class_id.hpp +62 -0
  397. include/rerun/datatypes/color_model.hpp +68 -0
  398. include/rerun/datatypes/dvec2d.hpp +76 -0
  399. include/rerun/datatypes/entity_path.hpp +60 -0
  400. include/rerun/datatypes/float32.hpp +62 -0
  401. include/rerun/datatypes/float64.hpp +62 -0
  402. include/rerun/datatypes/image_format.hpp +107 -0
  403. include/rerun/datatypes/keypoint_id.hpp +63 -0
  404. include/rerun/datatypes/keypoint_pair.hpp +65 -0
  405. include/rerun/datatypes/mat3x3.hpp +105 -0
  406. include/rerun/datatypes/mat4x4.hpp +119 -0
  407. include/rerun/datatypes/pixel_format.hpp +142 -0
  408. include/rerun/datatypes/plane3d.hpp +60 -0
  409. include/rerun/datatypes/quaternion.hpp +110 -0
  410. include/rerun/datatypes/range1d.hpp +59 -0
  411. include/rerun/datatypes/range2d.hpp +55 -0
  412. include/rerun/datatypes/rgba32.hpp +94 -0
  413. include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
  414. include/rerun/datatypes/tensor_buffer.hpp +529 -0
  415. include/rerun/datatypes/tensor_data.hpp +100 -0
  416. include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
  417. include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
  418. include/rerun/datatypes/time_int.hpp +62 -0
  419. include/rerun/datatypes/time_range.hpp +55 -0
  420. include/rerun/datatypes/time_range_boundary.hpp +175 -0
  421. include/rerun/datatypes/uint16.hpp +62 -0
  422. include/rerun/datatypes/uint32.hpp +62 -0
  423. include/rerun/datatypes/uint64.hpp +62 -0
  424. include/rerun/datatypes/utf8.hpp +76 -0
  425. include/rerun/datatypes/utf8pair.hpp +62 -0
  426. include/rerun/datatypes/uuid.hpp +60 -0
  427. include/rerun/datatypes/uvec2d.hpp +76 -0
  428. include/rerun/datatypes/uvec3d.hpp +80 -0
  429. include/rerun/datatypes/uvec4d.hpp +59 -0
  430. include/rerun/datatypes/vec2d.hpp +76 -0
  431. include/rerun/datatypes/vec3d.hpp +80 -0
  432. include/rerun/datatypes/vec4d.hpp +84 -0
  433. include/rerun/datatypes/video_timestamp.hpp +67 -0
  434. include/rerun/datatypes/view_coordinates.hpp +87 -0
  435. include/rerun/datatypes/visible_time_range.hpp +57 -0
  436. include/rerun/datatypes.hpp +51 -0
  437. include/rerun/demo_utils.hpp +75 -0
  438. include/rerun/entity_path.hpp +20 -0
  439. include/rerun/error.hpp +180 -0
  440. include/rerun/half.hpp +10 -0
  441. include/rerun/image_utils.hpp +187 -0
  442. include/rerun/indicator_component.hpp +59 -0
  443. include/rerun/loggable.hpp +54 -0
  444. include/rerun/recording_stream.hpp +960 -0
  445. include/rerun/rerun_sdk_export.hpp +25 -0
  446. include/rerun/result.hpp +86 -0
  447. include/rerun/rotation3d.hpp +33 -0
  448. include/rerun/sdk_info.hpp +20 -0
  449. include/rerun/spawn.hpp +21 -0
  450. include/rerun/spawn_options.hpp +57 -0
  451. include/rerun/string_utils.hpp +16 -0
  452. include/rerun/third_party/cxxopts.hpp +2198 -0
  453. include/rerun/time_column.hpp +288 -0
  454. include/rerun/timeline.hpp +38 -0
  455. include/rerun/type_traits.hpp +40 -0
  456. include/rerun.hpp +86 -0
  457. lib/cmake/axel/axel-config.cmake +45 -0
  458. lib/cmake/axel/axelTargets-release.cmake +19 -0
  459. lib/cmake/axel/axelTargets.cmake +108 -0
  460. lib/cmake/momentum/FindFbxSdk.cmake +115 -0
  461. lib/cmake/momentum/Findre2.cmake +52 -0
  462. lib/cmake/momentum/momentum-config.cmake +67 -0
  463. lib/cmake/momentum/momentumTargets-release.cmake +259 -0
  464. lib/cmake/momentum/momentumTargets.cmake +385 -0
  465. lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
  466. lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
  467. lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
  468. lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
  469. lib/libarrow.a +0 -0
  470. lib/libarrow_bundled_dependencies.a +0 -0
  471. lib/libaxel.a +0 -0
  472. lib/libmomentum_app_utils.a +0 -0
  473. lib/libmomentum_character.a +0 -0
  474. lib/libmomentum_character_sequence_solver.a +0 -0
  475. lib/libmomentum_character_solver.a +0 -0
  476. lib/libmomentum_common.a +0 -0
  477. lib/libmomentum_diff_ik.a +0 -0
  478. lib/libmomentum_io.a +0 -0
  479. lib/libmomentum_io_common.a +0 -0
  480. lib/libmomentum_io_fbx.a +0 -0
  481. lib/libmomentum_io_gltf.a +0 -0
  482. lib/libmomentum_io_legacy_json.a +0 -0
  483. lib/libmomentum_io_marker.a +0 -0
  484. lib/libmomentum_io_motion.a +0 -0
  485. lib/libmomentum_io_shape.a +0 -0
  486. lib/libmomentum_io_skeleton.a +0 -0
  487. lib/libmomentum_io_urdf.a +0 -0
  488. lib/libmomentum_marker_tracker.a +0 -0
  489. lib/libmomentum_math.a +0 -0
  490. lib/libmomentum_online_qr.a +0 -0
  491. lib/libmomentum_process_markers.a +0 -0
  492. lib/libmomentum_rerun.a +0 -0
  493. lib/libmomentum_simd_constraints.a +0 -0
  494. lib/libmomentum_simd_generalized_loss.a +0 -0
  495. lib/libmomentum_skeleton.a +0 -0
  496. lib/libmomentum_solver.a +0 -0
  497. lib/librerun_c__macos_arm64.a +0 -0
  498. lib/librerun_sdk.a +0 -0
  499. pymomentum/axel.cpython-312-darwin.so +0 -0
  500. pymomentum/backend/__init__.py +16 -0
  501. pymomentum/backend/skel_state_backend.py +631 -0
  502. pymomentum/backend/trs_backend.py +889 -0
  503. pymomentum/backend/utils.py +224 -0
  504. pymomentum/geometry.cpython-312-darwin.so +0 -0
  505. pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
  506. pymomentum/quaternion.py +740 -0
  507. pymomentum/skel_state.py +514 -0
  508. pymomentum/solver.cpython-312-darwin.so +0 -0
  509. pymomentum/solver2.cpython-312-darwin.so +0 -0
  510. pymomentum/torch/character.py +868 -0
  511. pymomentum/torch/parameter_limits.py +494 -0
  512. pymomentum/torch/utility.py +20 -0
  513. pymomentum/trs.py +535 -0
  514. pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
  515. pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
  516. pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
  517. pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,139 @@
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/fwd.h>
13
+ #include <momentum/math/types.h>
14
+
15
+ namespace momentum {
16
+
17
+ /// @file linear_skinning.h
18
+ /// Functions for linear blend skinning (Skeletal Subspace Deformation)
19
+ ///
20
+ /// Linear blend skinning (LBS), also known as Skeletal Subspace Deformation (SSD),
21
+ /// is a technique used in character animation to deform a mesh based on an underlying
22
+ /// skeleton. Each vertex in the mesh is influenced by one or more joints, with weights
23
+ /// determining how much influence each joint has on the vertex's final position.
24
+ ///
25
+ /// This file provides functions to:
26
+ /// - Apply forward skinning (transform vertices from bind pose to animated pose)
27
+ /// - Apply inverse skinning (transform vertices from animated pose back to bind pose)
28
+ /// - Compute inverse skinning transformations for specific vertices
29
+ ///
30
+ /// Key concepts:
31
+ /// - Bind pose: The reference pose of the character, where skin weights are defined
32
+ /// - Skin weights: Per-vertex weights defining how much influence each joint has
33
+ /// - Joint transformations: Current transformations of the skeleton's joints
34
+ /// - Forward skinning: Applying joint transformations to deform the mesh
35
+ /// - Inverse skinning: Reversing the deformation to return to bind pose
36
+
37
+ /// Applies forward SSD (linear blend skinning) to points, returning new points
38
+ ///
39
+ /// This overload transforms individual points and returns a new vector of transformed points.
40
+ /// Use this when you need to transform arbitrary points without modifying a mesh.
41
+ ///
42
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
43
+ /// @param skin Skin weights defining influence of each joint on vertices
44
+ /// @param points Input points to transform
45
+ /// @param state Current skeleton state containing joint transformations
46
+ /// @return Vector of transformed points
47
+ template <typename T>
48
+ std::vector<Vector3<T>> applySSD(
49
+ const TransformationListT<T>& inverseBindPose,
50
+ const SkinWeights& skin,
51
+ typename DeduceSpanType<const Vector3<T>>::type points,
52
+ const SkeletonStateT<T>& state);
53
+
54
+ /// Applies forward SSD to a mesh using skeleton state, modifying output mesh
55
+ ///
56
+ /// This overload transforms both vertices and normals of the mesh, writing results to outputMesh.
57
+ /// Use this when working with complete meshes and full skeleton state.
58
+ ///
59
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
60
+ /// @param skin Skin weights defining influence of each joint on vertices
61
+ /// @param mesh Input mesh to transform
62
+ /// @param state Current skeleton state containing joint transformations
63
+ /// @param outputMesh Output mesh to store the transformed result
64
+ template <typename T>
65
+ void applySSD(
66
+ const TransformationListT<T>& inverseBindPose,
67
+ const SkinWeights& skin,
68
+ const MeshT<T>& mesh,
69
+ const SkeletonStateT<T>& state,
70
+ MeshT<T>& outputMesh);
71
+
72
+ /// Applies forward SSD to a mesh using raw joint state list, modifying output mesh
73
+ ///
74
+ /// This overload accepts a JointStateList directly instead of a full SkeletonState.
75
+ /// Use this when you have joint transformations but not a complete skeleton state.
76
+ ///
77
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
78
+ /// @param skin Skin weights defining influence of each joint on vertices
79
+ /// @param mesh Input mesh to transform
80
+ /// @param state List of joint states containing transformations
81
+ /// @param outputMesh Output mesh to store the transformed result
82
+ template <typename T>
83
+ void applySSD(
84
+ const TransformationListT<T>& inverseBindPose,
85
+ const SkinWeights& skin,
86
+ const MeshT<T>& mesh,
87
+ const JointStateListT<T>& state,
88
+ MeshT<T>& outputMesh);
89
+
90
+ /// Computes the inverse SSD transformation for a specific vertex
91
+ ///
92
+ /// Returns a transformation matrix that converts from skinned space back to bind pose space.
93
+ /// This is useful for operations that need to work in the original bind pose space.
94
+ ///
95
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
96
+ /// @param skin Skin weights defining influence of each joint on vertices
97
+ /// @param state Current skeleton state containing joint transformations
98
+ /// @param index Index of the vertex to compute inverse transformation for
99
+ /// @return Inverse transformation matrix for the specified vertex
100
+ Affine3f getInverseSSDTransformation(
101
+ const TransformationList& inverseBindPose,
102
+ const SkinWeights& skin,
103
+ const SkeletonState& state,
104
+ size_t index);
105
+
106
+ /// Applies inverse SSD to points, returning new points in bind pose space
107
+ ///
108
+ /// This overload transforms points from skinned space back to bind pose space,
109
+ /// returning a new vector of transformed points.
110
+ ///
111
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
112
+ /// @param skin Skin weights defining influence of each joint on vertices
113
+ /// @param points Input points to transform (in skinned space)
114
+ /// @param state Current skeleton state containing joint transformations
115
+ /// @return Vector of transformed points in bind pose space
116
+ std::vector<Vector3f> applyInverseSSD(
117
+ const TransformationList& inverseBindPose,
118
+ const SkinWeights& skin,
119
+ std::span<const Vector3f> points,
120
+ const SkeletonState& state);
121
+
122
+ /// Applies inverse SSD to points, storing results in a mesh
123
+ ///
124
+ /// This overload transforms points from skinned space back to bind pose space,
125
+ /// writing the results directly to the provided mesh's vertices.
126
+ ///
127
+ /// @param inverseBindPose Inverse bind pose transformations for each joint
128
+ /// @param skin Skin weights defining influence of each joint on vertices
129
+ /// @param points Input points to transform (in skinned space)
130
+ /// @param state Current skeleton state containing joint transformations
131
+ /// @param mesh Output mesh to store the transformed vertices
132
+ void applyInverseSSD(
133
+ const TransformationList& inverseBindPose,
134
+ const SkinWeights& skin,
135
+ std::span<const Vector3f> points,
136
+ const SkeletonState& state,
137
+ Mesh& mesh);
138
+
139
+ } // namespace momentum
@@ -0,0 +1,94 @@
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/types.h>
11
+ #include <momentum/math/utility.h>
12
+
13
+ namespace momentum {
14
+
15
+ /// Represents a point attached to a joint in a skeleton.
16
+ ///
17
+ /// Locators can be used for various purposes such as tracking specific points
18
+ /// on a character, defining constraints, or serving as targets for inverse kinematics.
19
+ struct Locator {
20
+ /// Name identifier for the locator
21
+ std::string name;
22
+
23
+ /// Index of the parent joint in the skeleton
24
+ size_t parent;
25
+
26
+ /// Position relative to the parent joint's coordinate system
27
+ Vector3f offset;
28
+
29
+ /// Specifies which axes (x,y,z) are locked (1) or free (0)
30
+ Vector3i locked;
31
+
32
+ /// Influence weight of this locator when used in constraints
33
+ float weight;
34
+
35
+ /// Reference position for limit constraints, typically equal to offset when loaded
36
+ Vector3f limitOrigin;
37
+
38
+ /// Controls how strongly the locator should maintain its original position
39
+ /// Higher values create stronger constraints, zero means completely free
40
+ Vector3f limitWeight;
41
+
42
+ /// Indicates whether the locator is attached to the skin of a person (e.g. as in mocap tracking),
43
+ /// used to determine whether the locator can safely be converted to a skinned locator.
44
+ bool attachedToSkin = false;
45
+
46
+ /// Offset from the skin surface, used when trying to solve for body shape using locators.
47
+ float skinOffset = 0.0f;
48
+
49
+ /// Creates a locator with the specified properties
50
+ ///
51
+ /// @param name Identifier for the locator
52
+ /// @param parent Index of the parent joint
53
+ /// @param offset Position relative to the parent joint
54
+ /// @param locked Axes that are locked (1) or free (0)
55
+ /// @param weight Influence weight in constraints
56
+ /// @param limitOrigin Reference position for limit constraints
57
+ /// @param limitWeight Strength of position maintenance constraints
58
+ Locator(
59
+ const std::string& name = "uninitialized",
60
+ const size_t parent = kInvalidIndex,
61
+ const Vector3f& offset = Vector3f::Zero(),
62
+ const Vector3i& locked = Vector3i::Zero(),
63
+ const float weight = 1.0f,
64
+ const Vector3f& limitOrigin = Vector3f::Zero(),
65
+ const Vector3f& limitWeight = Vector3f::Zero(),
66
+ bool attachedToSkin = false,
67
+ float skinOffset = 0.0f)
68
+ : name(name),
69
+ parent(parent),
70
+ offset(offset),
71
+ locked(locked),
72
+ weight(weight),
73
+ limitOrigin(limitOrigin),
74
+ limitWeight(limitWeight),
75
+ attachedToSkin(attachedToSkin),
76
+ skinOffset(skinOffset) {}
77
+
78
+ /// Compares two locators for equality, using approximate comparison for floating-point values
79
+ ///
80
+ /// @param locator The locator to compare with
81
+ /// @return True if all properties are equal (or approximately equal for floating-point values)
82
+ inline bool operator==(const Locator& locator) const {
83
+ return (
84
+ (name == locator.name) && (parent == locator.parent) && offset.isApprox(locator.offset) &&
85
+ locked.isApprox(locator.locked) && isApprox(weight, locator.weight) &&
86
+ limitOrigin.isApprox(locator.limitOrigin) && limitWeight.isApprox(locator.limitWeight) &&
87
+ attachedToSkin == locator.attachedToSkin && isApprox(skinOffset, locator.skinOffset));
88
+ }
89
+ };
90
+
91
+ /// A collection of locators attached to a skeleton
92
+ using LocatorList = std::vector<Locator>;
93
+
94
+ } // namespace momentum
@@ -0,0 +1,43 @@
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/locator.h>
12
+ #include <momentum/character/types.h>
13
+
14
+ namespace momentum {
15
+
16
+ /// Tracks the current world positions of locators in a skeleton.
17
+ ///
18
+ /// This class maintains the transformed positions of locators based on the current
19
+ /// state of the skeleton they're attached to.
20
+ struct LocatorState {
21
+ /// World-space positions of all locators, updated when the skeleton moves
22
+ std::vector<Vector3f> position;
23
+
24
+ public:
25
+ /// Creates an empty locator state with no positions
26
+ LocatorState() noexcept = default;
27
+
28
+ /// Creates a locator state and immediately updates positions based on the given skeleton state
29
+ ///
30
+ /// @param skeletonState Current pose of the skeleton
31
+ /// @param referenceLocators List of locators to track
32
+ LocatorState(const SkeletonState& skeletonState, const LocatorList& referenceLocators) noexcept {
33
+ update(skeletonState, referenceLocators);
34
+ }
35
+
36
+ /// Updates the world positions of all locators based on the current skeleton pose
37
+ ///
38
+ /// @param skeletonState Current pose of the skeleton
39
+ /// @param referenceLocators List of locators to update positions for
40
+ void update(const SkeletonState& skeletonState, const LocatorList& referenceLocators) noexcept;
41
+ };
42
+
43
+ } // namespace momentum
@@ -0,0 +1,48 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/math/types.h>
11
+
12
+ #include <string>
13
+ #include <vector>
14
+
15
+ namespace momentum {
16
+
17
+ /// Marker represents a motion capture marker that defines an active marker during motion capture.
18
+ struct Marker {
19
+ /// The name of the marker, default is "Undefined"
20
+ std::string name = "Undefined";
21
+
22
+ /// The 3D position of the marker as a Vector3d object, where the unit is assumed to be in
23
+ /// centimeters.
24
+ Vector3d pos = {0.0, 0.0, 0.0};
25
+
26
+ /// The occlusion status of the marker, true if occluded, false otherwise
27
+ bool occluded = true;
28
+ };
29
+
30
+ /// MarkerSequence stores all the frames from a single capture sequence for one subject (motion
31
+ /// capture actor).
32
+ ///
33
+ /// Each frame is a std::vector<Marker> containing the position and occlusion status of
34
+ /// all the markers placed on the subject.
35
+ /// The size of the std::vector<Marker> must be consistent for all frames.
36
+ struct MarkerSequence {
37
+ /// Name of the actor sequence (typically a unique subject name or ID)
38
+ std::string name;
39
+
40
+ /// A 2D vector that specifies the Marker (name/position/occlusion) for all markers
41
+ /// throughout all captured frames. Size: [numFrames][numMarkers]
42
+ std::vector<std::vector<Marker>> frames;
43
+
44
+ /// The frame rate of the motion capture sequence in frames per second (default is 30.0)
45
+ float fps = 30.0f;
46
+ };
47
+
48
+ } // namespace momentum
@@ -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