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,141 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/character/marker.h>
11
+ #include <momentum/character/skeleton.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/file_save_options.h>
14
+ #include <momentum/io/gltf/gltf_io.h>
15
+ #include <momentum/math/mesh.h>
16
+ #include <momentum/math/types.h>
17
+
18
+ #include <fx/gltf.h>
19
+
20
+ namespace fx::gltf {
21
+ struct Document;
22
+ } // namespace fx::gltf
23
+
24
+ namespace momentum {
25
+
26
+ using MotionParameters = std::tuple<std::vector<std::string>, MatrixXf>;
27
+ using IdentityParameters = std::tuple<std::vector<std::string>, VectorXf>;
28
+
29
+ /// Helper class to build a glb scene. It supports adding multiple characters
30
+ /// and motions for each character.
31
+ /// By default, momentum extension is added to the glb nodes. This is required if you
32
+ /// want to correctly load the exported character back.
33
+ class GltfBuilder final {
34
+ public:
35
+ GltfBuilder();
36
+
37
+ ~GltfBuilder();
38
+
39
+ GltfBuilder(GltfBuilder const&) = delete;
40
+
41
+ void operator=(GltfBuilder const&) = delete;
42
+
43
+ /// Specify how marker mesh is represented in the glb file
44
+ enum class MarkerMesh : uint8_t { None, UnitCube };
45
+
46
+ /// Add a character to the scene. Each character will have a root node with the character's
47
+ /// name as the parent of the skeleton root and the character mesh.
48
+ /// positionOffset and rotationOffset can be provided as an initial offset to the character.
49
+ void addCharacter(
50
+ const Character& character,
51
+ const Vector3f& positionOffset = Vector3f::Zero(),
52
+ const Quaternionf& rotationOffset = Quaternionf::Identity(),
53
+ const FileSaveOptions& options = FileSaveOptions());
54
+
55
+ /// Add a static mesh, such as an environment or a target scan
56
+ void addMesh(const Mesh& mesh, const std::string& name, bool addColor = false);
57
+
58
+ void setFps(float fps);
59
+
60
+ /// Add a motion to the provided character. If addCharacter is not called before adding
61
+ /// the motion, the character will be automatically added with the default settings.
62
+ ///
63
+ /// @param[in] character The character to add motion for.
64
+ /// @param[in] fps Frame rate of the motion in frames per second.
65
+ /// @param[in] motion Motion parameters (parameter names and poses matrix).
66
+ /// @param[in] offsets Identity/offset parameters (joint names and offsets vector).
67
+ /// @param[in] addExtensions Whether to add momentum extensions to the document.
68
+ /// @param[in] customName Custom name for the animation (default is "default").
69
+ /// @param[in] timestamps Per-frame timestamps. Size should match motion columns.
70
+ void addMotion(
71
+ const Character& character,
72
+ float fps = 120.0f,
73
+ const MotionParameters& motion = {},
74
+ const IdentityParameters& offsets = {},
75
+ bool addExtensions = true,
76
+ const std::string& customName = "default",
77
+ std::span<const int64_t> timestamps = {});
78
+
79
+ /// Add a skeleton states to the provided character. If addCharacter is not called before adding
80
+ /// the skeleton states, the character will be automatically added with the default settings.
81
+ void addSkeletonStates(
82
+ const Character& character,
83
+ float fps,
84
+ std::span<const SkeletonState> skeletonStates,
85
+ const std::string& customName = "default");
86
+
87
+ /// Add marker data to the file
88
+ ///
89
+ /// @param[in] fps The frame rate of the motion capture data in frames per second.
90
+ /// @param[in] markerSequence A 2D vector specifying the Marker data (name/position/occlusion) for
91
+ /// all markers across all captured frames. Size: [numFrames][numMarkers]
92
+ /// @param[in] markerMesh Optional parameter specifying the MarkerMesh type (default is
93
+ /// MarkerMesh::None).
94
+ /// @param[in] animName Optional parameter specifying the animation name (default is "default").
95
+ void addMarkerSequence(
96
+ float fps,
97
+ std::span<const std::vector<momentum::Marker>> markerSequence,
98
+ MarkerMesh markerMesh = MarkerMesh::UnitCube,
99
+ const std::string& animName = "default");
100
+
101
+ // Save the file with the provided filename. If the fileFormat is 'GltfFileFormat::Auto',
102
+ // will deduct the file format by filename.
103
+ // When embedResources is true, it will set all the existing buffers to embed the data.
104
+ void save(
105
+ const filesystem::path& filename,
106
+ GltfFileFormat fileFormat = GltfFileFormat::Auto,
107
+ bool embedResources = false);
108
+
109
+ static void save(
110
+ fx::gltf::Document& document,
111
+ const filesystem::path& filename,
112
+ GltfFileFormat fileFormat = GltfFileFormat::Auto,
113
+ bool embedResources = false);
114
+
115
+ /// Set all existing buffers to embed resources.
116
+ void forceEmbedResources();
117
+
118
+ static void forceEmbedResources(fx::gltf::Document& document);
119
+
120
+ /// Allow copy the document, but do not allow modify the file
121
+ /// outside of the builder to keep metadata consistent
122
+ const fx::gltf::Document& getDocument();
123
+
124
+ size_t getNumCharacters();
125
+
126
+ size_t getCharacterRootIndex(const std::string& name);
127
+
128
+ size_t getNumJoints(const std::string& name);
129
+
130
+ size_t getNumMotions();
131
+
132
+ float getFps();
133
+
134
+ std::vector<size_t> getCharacterMotions(const std::string& characterName);
135
+
136
+ private:
137
+ struct Impl;
138
+ std::unique_ptr<Impl> impl_;
139
+ };
140
+
141
+ } // namespace momentum
@@ -0,0 +1,149 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/character/marker.h>
11
+ #include <momentum/character/types.h>
12
+ #include <momentum/common/filesystem.h>
13
+ #include <momentum/io/file_save_options.h>
14
+ #include <momentum/math/types.h>
15
+
16
+ #include <fx/gltf.h>
17
+ #include <span>
18
+
19
+ #include <tuple>
20
+ #include <vector>
21
+
22
+ namespace momentum {
23
+
24
+ Character loadGltfCharacter(const fx::gltf::Document& model);
25
+
26
+ Character loadGltfCharacter(const filesystem::path& gltfFilename);
27
+
28
+ Character loadGltfCharacter(std::span<const std::byte> byteSpan);
29
+
30
+ std::tuple<MotionParameters, IdentityParameters, float> loadMotion(
31
+ const filesystem::path& gltfFilename);
32
+
33
+ /// Load per-frame timestamps from a glTF file.
34
+ /// This function loads timestamps that were saved using GltfBuilder::addMotion
35
+ ///
36
+ /// @param[in] gltfFilename The path to the glTF file.
37
+ /// @return A vector of per-frame timestamps (usually in microsecond).
38
+ std::vector<int64_t> loadMotionTimestamps(const filesystem::path& gltfFilename);
39
+
40
+ /// Load a glTF character from a local file path.
41
+ ///
42
+ /// This function assumes the file format of the given path is glTF without checking the extension,
43
+ /// so please ensure the file is in glTF format.
44
+ ///
45
+ /// @param[in] filepath The path to the glTF character file.
46
+ /// @return A tuple containing the loaded Character object, the motion represented in model
47
+ /// parameters, the identity vector represented as joint parameters, and the fps.
48
+ std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
49
+ const filesystem::path& gltfFilename);
50
+
51
+ /// Load a glTF character from a buffer.
52
+ ///
53
+ /// @param[in] byteSpan The buffer containing the glTF character data.
54
+ /// @return A tuple containing the loaded Character object, the motion represented in model
55
+ /// parameters, the identity vector represented as joint parameters, and the fps.
56
+ std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
57
+ std::span<const std::byte> byteSpan);
58
+
59
+ /// Load a GLTF Character with motion in the form of skeleton states (transform matrices)
60
+ ///
61
+ /// Unlike the other loadCharacterWithMotion functions, this function does not require the
62
+ /// file to be saved using momentum's functionality that saves model parameters in a
63
+ /// custom GTLF extension, however the resulting skeleton states may be harder to work with.
64
+ std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
65
+ loadCharacterWithSkeletonStates(std::span<const std::byte> byteSpan);
66
+
67
+ std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
68
+ loadCharacterWithSkeletonStates(const filesystem::path& gltfFilename);
69
+
70
+ /// Maps the loaded motion onto the input character by matching joint names and parameter names.
71
+ ///
72
+ /// This function assumes the file format of the given path is glTF without checking the extension,
73
+ /// so please ensure the file is in glTF format.
74
+ ///
75
+ /// @param[in] gltfFilename The path to the glTF motion file.
76
+ /// @param[in] character The Character object to map the motion onto.
77
+ /// @return A tuple containing the motion represented in model parameters, the identity vector
78
+ /// represented as joint parameters, and the fps. The model parameters and joint parameters are
79
+ /// mapped to the input character by name matching.
80
+ std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
81
+ const filesystem::path& gltfFilename,
82
+ const Character& character);
83
+
84
+ /// Buffer version of loadMotionOnCharacter()
85
+ ///
86
+ /// @param[in] byteSpan The buffer containing the glTF motion data.
87
+ /// @param[in] character The Character object to map the motion onto.
88
+ /// @return A tuple containing the motion represented in model parameters, the identity vector
89
+ /// represented as joint parameters, and the fps. The model parameters and joint parameters are
90
+ /// mapped to the input character by name matching.
91
+ std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
92
+ std::span<const std::byte> byteSpan,
93
+ const Character& character);
94
+
95
+ /// Loads a MarkerSequence from a file.
96
+ ///
97
+ /// @param[in] filename Path to the file containing the MarkerSequence data.
98
+ /// @return A MarkerSequence object containing motion capture marker data.
99
+ MarkerSequence loadMarkerSequence(const filesystem::path& filename);
100
+
101
+ fx::gltf::Document makeCharacterDocument(
102
+ const Character& character,
103
+ float fps = 120.0f,
104
+ const MotionParameters& motion = {},
105
+ const IdentityParameters& offsets = {},
106
+ std::span<const std::vector<Marker>> markerSequence = {},
107
+ bool embedResource = true,
108
+ const FileSaveOptions& options = FileSaveOptions());
109
+
110
+ /// Saves character motion to a glb file.
111
+ ///
112
+ /// @param[in] motion The model parameters representing the motion of the character (numModelParams,
113
+ /// numFrames)
114
+ /// @param[in] offsets Offset values per joint capturing the skeleton bone lengths using translation
115
+ /// and scale offset (7*numJoints, 1)
116
+ /// @param[in] options Optional file save options for controlling output (default:
117
+ /// FileSaveOptions{}).
118
+ void saveGltfCharacter(
119
+ const filesystem::path& filename,
120
+ const Character& character,
121
+ float fps = 120.0f,
122
+ const MotionParameters& motion = {},
123
+ const IdentityParameters& offsets = {},
124
+ std::span<const std::vector<Marker>> markerSequence = {},
125
+ const FileSaveOptions& options = FileSaveOptions());
126
+
127
+ /// Saves character skeleton states to a glb file.
128
+ ///
129
+ /// @param[in] skeletonStates The skeleton states for each frame of the motion sequence (numFrames,
130
+ /// numJoints, 8)
131
+ /// @param[in] options Optional file save options for controlling output (default:
132
+ /// FileSaveOptions{}).
133
+ void saveGltfCharacter(
134
+ const filesystem::path& filename,
135
+ const Character& character,
136
+ float fps,
137
+ std::span<const SkeletonState> skeletonStates,
138
+ std::span<const std::vector<Marker>> markerSequence = {},
139
+ const FileSaveOptions& options = FileSaveOptions());
140
+
141
+ std::vector<std::byte> saveCharacterToBytes(
142
+ const Character& character,
143
+ float fps = 120.0f,
144
+ const MotionParameters& motion = {},
145
+ const IdentityParameters& offsets = {},
146
+ std::span<const std::vector<Marker>> markerSequence = {},
147
+ const FileSaveOptions& options = FileSaveOptions());
148
+
149
+ } // namespace momentum
@@ -0,0 +1,299 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include "momentum/common/exception.h"
11
+
12
+ #include <fx/gltf.h>
13
+ #include <gsl/span_ext>
14
+
15
+ namespace momentum {
16
+
17
+ static inline int32_t getComponentSize(const fx::gltf::Accessor::ComponentType& componentType) {
18
+ switch (componentType) {
19
+ case fx::gltf::Accessor::ComponentType::Byte:
20
+ case fx::gltf::Accessor::ComponentType::UnsignedByte:
21
+ return 1;
22
+ case fx::gltf::Accessor::ComponentType::Short:
23
+ case fx::gltf::Accessor::ComponentType::UnsignedShort:
24
+ return 2;
25
+ // case fx::gltf::Accessor::ComponentType::Int:
26
+ case fx::gltf::Accessor::ComponentType::UnsignedInt:
27
+ case fx::gltf::Accessor::ComponentType::Float:
28
+ return 4;
29
+ default:
30
+ return -1;
31
+ }
32
+ }
33
+
34
+ static inline int32_t getTypeSize(const fx::gltf::Accessor::Type& ty) {
35
+ switch (ty) {
36
+ case fx::gltf::Accessor::Type::Scalar:
37
+ return 1;
38
+ case fx::gltf::Accessor::Type::Vec2:
39
+ return 2;
40
+ case fx::gltf::Accessor::Type::Vec3:
41
+ return 3;
42
+ case fx::gltf::Accessor::Type::Vec4:
43
+ case fx::gltf::Accessor::Type::Mat2:
44
+ return 4;
45
+ case fx::gltf::Accessor::Type::Mat3:
46
+ return 9;
47
+ case fx::gltf::Accessor::Type::Mat4:
48
+ return 16;
49
+ default:
50
+ return -1;
51
+ }
52
+ }
53
+
54
+ template <typename T>
55
+ std::vector<T> copyAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
56
+ const auto& accessor = model.accessors[id];
57
+
58
+ const auto tsize = getTypeSize(accessor.type);
59
+ const auto csize = getComponentSize(accessor.componentType);
60
+ const auto elsize = tsize * csize;
61
+
62
+ if (elsize != sizeof(T)) {
63
+ MT_LOGW(
64
+ "[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
65
+ __func__,
66
+ sizeof(T),
67
+ csize,
68
+ tsize);
69
+ return {};
70
+ }
71
+
72
+ const auto& view = model.bufferViews[accessor.bufferView];
73
+ const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
74
+
75
+ const auto& buf = model.buffers[view.buffer];
76
+ auto bytes = std::as_bytes(std::span<const uint8_t>(buf.data));
77
+ bytes = bytes.subspan(view.byteOffset, view.byteLength);
78
+ bytes = bytes.subspan(accessor.byteOffset);
79
+
80
+ std::vector<T> r(accessor.count);
81
+ for (size_t i = 0; i < accessor.count; i++) {
82
+ std::memcpy(&r[i], &bytes[i * stride], elsize);
83
+ }
84
+
85
+ return r;
86
+ }
87
+
88
+ template <typename T>
89
+ std::vector<T> copyAlignedAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
90
+ const auto& accessor = model.accessors[id];
91
+ if (accessor.count == 0) {
92
+ MT_LOGW("Accessor count zero.");
93
+ return {};
94
+ }
95
+
96
+ const auto tsize = getTypeSize(accessor.type);
97
+ const auto csize = getComponentSize(accessor.componentType);
98
+ const auto elsize = tsize * csize;
99
+
100
+ if (elsize != sizeof(T)) {
101
+ MT_LOGW(
102
+ "[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
103
+ __func__,
104
+ sizeof(T),
105
+ csize,
106
+ tsize);
107
+ return {};
108
+ }
109
+
110
+ const auto& view = model.bufferViews[accessor.bufferView];
111
+ const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
112
+
113
+ const auto& buf = model.buffers[view.buffer];
114
+ auto bytes = std::as_bytes(std::span<const uint8_t>(buf.data));
115
+ bytes = bytes.subspan(view.byteOffset, view.byteLength);
116
+ bytes = bytes.subspan(accessor.byteOffset);
117
+
118
+ std::vector<T> r(accessor.count);
119
+ for (size_t i = 0; i < accessor.count; i++) {
120
+ std::memcpy(&r[i], &bytes[i * stride], elsize);
121
+ }
122
+
123
+ return r;
124
+ }
125
+
126
+ // template to set accessor
127
+ template <typename T>
128
+ void setAccessorType(fx::gltf::Accessor& /* accessor */) {
129
+ MT_THROW("Unsupported data type {}", typeid(T).name());
130
+ }
131
+
132
+ // create accessor buffer
133
+ template <typename T>
134
+ int32_t createAccessorBuffer(
135
+ fx::gltf::Document& model,
136
+ std::span<T> data,
137
+ const bool align = false,
138
+ const bool normalized = false) {
139
+ // gltf 2.0 allows multiple buffers, but only the first buffer will be stored in
140
+ // the binary file, all other ones need to be external files. Because of this we will
141
+ // only ever store data in the first buffer
142
+
143
+ // check if we have a buffer
144
+ if (model.buffers.empty()) {
145
+ model.buffers.resize(1);
146
+ }
147
+
148
+ // create buffer for data
149
+ const size_t bufferIdx = 0;
150
+ auto& buffer = model.buffers.front();
151
+
152
+ // copy data from input buffer to output buffer
153
+ const size_t bufferDataStart = buffer.data.size();
154
+ const auto elementSize = sizeof(T);
155
+ auto alignedElementSize = elementSize;
156
+ auto dataSize = data.size() * alignedElementSize;
157
+
158
+ // check for necessary alignment
159
+ if (align && alignedElementSize % 4 != 0) {
160
+ // element is not aligned, need to get bigger element size
161
+ alignedElementSize = ((elementSize / 4) + 1) * 4;
162
+ dataSize = data.size() * alignedElementSize;
163
+ buffer.data.resize(bufferDataStart + dataSize);
164
+ // need to go over each element one by one to copy
165
+ for (size_t e = 0; e < data.size(); e++) {
166
+ std::memcpy(&buffer.data[bufferDataStart + alignedElementSize * e], &data[e], elementSize);
167
+ }
168
+ buffer.byteLength = buffer.data.size();
169
+ } else {
170
+ // no alignment needed or already aligned, just copy data in
171
+ buffer.data.resize(bufferDataStart + dataSize);
172
+ std::memcpy(&buffer.data[bufferDataStart], data.data(), dataSize);
173
+ buffer.byteLength = buffer.data.size();
174
+ }
175
+
176
+ // create bufferview
177
+ const size_t bufferViewIdx = model.bufferViews.size();
178
+ model.bufferViews.emplace_back();
179
+ auto& bufferView = model.bufferViews.back();
180
+
181
+ bufferView.buffer = bufferIdx;
182
+ bufferView.byteLength = dataSize;
183
+ bufferView.byteOffset = bufferDataStart;
184
+ if (align && elementSize % 4 != 0) {
185
+ bufferView.byteStride = alignedElementSize;
186
+ } else {
187
+ bufferView.byteStride = 0;
188
+ }
189
+
190
+ // create accessor
191
+ const size_t accessorIdx = model.accessors.size();
192
+ model.accessors.emplace_back();
193
+ auto& accessor = model.accessors.back();
194
+
195
+ // set component type and accessor size depending on the type
196
+ setAccessorType<T>(accessor);
197
+ accessor.bufferView = bufferViewIdx;
198
+ accessor.byteOffset = 0;
199
+ accessor.count = data.size();
200
+ accessor.normalized = normalized;
201
+
202
+ return accessorIdx;
203
+ }
204
+
205
+ template <>
206
+ inline void setAccessorType<const int32_t>(fx::gltf::Accessor& accessor) {
207
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
208
+ accessor.type = fx::gltf::Accessor::Type::Scalar;
209
+ }
210
+
211
+ template <>
212
+ inline void setAccessorType<const float>(fx::gltf::Accessor& accessor) {
213
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
214
+ accessor.type = fx::gltf::Accessor::Type::Scalar;
215
+ }
216
+
217
+ template <>
218
+ inline void setAccessorType<const Vector2f>(fx::gltf::Accessor& accessor) {
219
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
220
+ accessor.type = fx::gltf::Accessor::Type::Vec2;
221
+ }
222
+
223
+ template <>
224
+ inline void setAccessorType<const Vector3f>(fx::gltf::Accessor& accessor) {
225
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
226
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
227
+ }
228
+
229
+ template <>
230
+ inline void setAccessorType<const Vector4f>(fx::gltf::Accessor& accessor) {
231
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
232
+ accessor.type = fx::gltf::Accessor::Type::Vec4;
233
+ }
234
+
235
+ template <>
236
+ inline void setAccessorType<const Vector3b>(fx::gltf::Accessor& accessor) {
237
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedByte;
238
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
239
+ }
240
+
241
+ template <>
242
+ inline void setAccessorType<const Vector3i>(fx::gltf::Accessor& accessor) {
243
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
244
+ accessor.type = fx::gltf::Accessor::Type::Vec3;
245
+ }
246
+
247
+ template <>
248
+ inline void setAccessorType<const Vector4s>(fx::gltf::Accessor& accessor) {
249
+ accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedShort;
250
+ accessor.type = fx::gltf::Accessor::Type::Vec4;
251
+ }
252
+
253
+ template <>
254
+ inline void setAccessorType<const Matrix4f>(fx::gltf::Accessor& accessor) {
255
+ accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
256
+ accessor.type = fx::gltf::Accessor::Type::Mat4;
257
+ }
258
+
259
+ // add animation
260
+ template <typename T>
261
+ int32_t createSampler(
262
+ fx::gltf::Document& model,
263
+ fx::gltf::Animation& anim,
264
+ std::span<T> data,
265
+ const std::span<float>& timestamps) {
266
+ MT_CHECK(
267
+ data.size() == timestamps.size(), "data: {}, timestmaps: {}", data.size(), timestamps.size());
268
+
269
+ // create new sampler
270
+ const int32_t index = anim.samplers.size();
271
+ anim.samplers.emplace_back();
272
+ auto& sampler = anim.samplers.back();
273
+ sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
274
+ sampler.input = createAccessorBuffer(model, timestamps);
275
+ sampler.output = createAccessorBuffer(model, data);
276
+
277
+ // return sampler index
278
+ return index;
279
+ }
280
+
281
+ template <typename T>
282
+ int32_t createSampler(
283
+ fx::gltf::Document& model,
284
+ fx::gltf::Animation& anim,
285
+ std::span<T> data,
286
+ const int32_t timestampAccessor) {
287
+ // create new sampler
288
+ const int32_t index = anim.samplers.size();
289
+ anim.samplers.emplace_back();
290
+ auto& sampler = anim.samplers.back();
291
+ sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
292
+ sampler.input = timestampAccessor;
293
+ sampler.output = createAccessorBuffer(model, data);
294
+
295
+ // return sampler index
296
+ return index;
297
+ }
298
+
299
+ } // namespace momentum
@@ -0,0 +1,60 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ #pragma once
9
+
10
+ #include <momentum/math/constants.h>
11
+ #include <momentum/math/types.h>
12
+
13
+ namespace momentum {
14
+
15
+ // Utility functions to convert gltf coordinate system to momentum coordinate system.
16
+ // #TODO: load coordinates by setting up CoordinateSystems so we don't need to worry about
17
+ // conversion.
18
+ [[nodiscard]] inline Vector3f toMomentumVec3f(const std::array<float, 3>& vec) noexcept {
19
+ return Vector3f(vec[0], vec[1], vec[2]) * toCm();
20
+ }
21
+
22
+ [[nodiscard]] inline Vector3f fromMomentumVec3f(const Vector3f& vec) noexcept {
23
+ return vec * toM();
24
+ }
25
+
26
+ [[nodiscard]] inline Quaternionf toMomentumQuaternionf(
27
+ const std::array<float, 4>& gltfQuat) noexcept {
28
+ return {gltfQuat[3], gltfQuat[0], gltfQuat[1], gltfQuat[2]};
29
+ }
30
+
31
+ [[nodiscard]] inline std::array<float, 4> fromMomentumQuaternionf(
32
+ const Quaternionf& quat) noexcept {
33
+ return {quat.x(), quat.y(), quat.z(), quat.w()};
34
+ }
35
+
36
+ inline void toMomentumVec3f(std::vector<Vector3f>& vec) {
37
+ if (vec.empty()) {
38
+ return;
39
+ }
40
+
41
+ Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toCm();
42
+ }
43
+
44
+ inline void fromMomentumVec3f(std::vector<Vector3f>& vec) {
45
+ if (vec.empty()) {
46
+ return;
47
+ }
48
+
49
+ Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toM();
50
+ }
51
+
52
+ inline void fromMomentumVec3f(VectorXf& vec) {
53
+ if (vec.size() == 0) {
54
+ return;
55
+ }
56
+
57
+ vec *= toM();
58
+ }
59
+
60
+ } // namespace momentum