pymomentum-cpu 0.1.82.post0__cp313-cp313-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymomentum-cpu might be problematic. Click here for more details.
- include/axel/BoundingBox.h +58 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +86 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +199 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +91 -0
- include/momentum/character/blend_shape_base.h +70 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +82 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +250 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +181 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +144 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +924 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +94 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +56 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +109 -0
- include/momentum/io/fbx/fbx_memory_stream.h +66 -0
- include/momentum/io/fbx/openfbx_loader.h +49 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/gltf/gltf_builder.h +132 -0
- include/momentum/io/gltf/gltf_file_format.h +19 -0
- include/momentum/io/gltf/gltf_io.h +148 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +70 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +25 -0
- include/momentum/io/skeleton/parameter_transform_io.h +41 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +62 -0
- include/momentum/marker_tracking/marker_tracker.h +213 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +90 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +251 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +377 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-313-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +614 -0
- pymomentum/backend/trs_backend.py +871 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-313-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-313-darwin.so +0 -0
- pymomentum/solver2.cpython-313-darwin.so +0 -0
- pymomentum/torch/character.py +856 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.82.post0.dist-info/METADATA +121 -0
- pymomentum_cpu-0.1.82.post0.dist-info/RECORD +512 -0
- pymomentum_cpu-0.1.82.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.82.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/character.h>
|
|
11
|
+
#include <momentum/character/marker.h>
|
|
12
|
+
#include <momentum/marker_tracking/marker_tracker.h>
|
|
13
|
+
|
|
14
|
+
#include <CLI/CLI.hpp>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
struct IOOptions {
|
|
19
|
+
std::string inputFile;
|
|
20
|
+
std::string outputFile;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
struct ModelOptions {
|
|
24
|
+
std::string model;
|
|
25
|
+
std::string parameters;
|
|
26
|
+
std::string locators;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
void addIOOptions(CLI::App& app, std::shared_ptr<IOOptions> ioOptions);
|
|
30
|
+
void addModelOptions(CLI::App& app, std::shared_ptr<ModelOptions> modelOptions);
|
|
31
|
+
void addCalibrationOptions(CLI::App& app, std::shared_ptr<CalibrationConfig> config);
|
|
32
|
+
void addTrackingOptions(CLI::App& app, std::shared_ptr<TrackingConfig> config);
|
|
33
|
+
void addRefineOptions(CLI::App& app, std::shared_ptr<RefineConfig> config);
|
|
34
|
+
|
|
35
|
+
std::tuple<momentum::Character, momentum::ModelParameters> loadCalibratedModel(
|
|
36
|
+
const std::string& modelFile);
|
|
37
|
+
|
|
38
|
+
std::tuple<momentum::Character, momentum::ModelParameters> loadCharacterWithIdentity(
|
|
39
|
+
const ModelOptions& modelFiles);
|
|
40
|
+
|
|
41
|
+
/// Save the given character and motion to a GLB or FBX file.
|
|
42
|
+
///
|
|
43
|
+
/// @param[in] outFile The GLB/FBX file to save to
|
|
44
|
+
/// @param[in] character The GLB/FBX file to save to
|
|
45
|
+
/// @param[in] identity The identity parameters used for the character
|
|
46
|
+
/// @param[in] finalMotion The motion save to the file. (Note: this may be modified to remove
|
|
47
|
+
/// scaling parameters if saveScaleToMotion is false)
|
|
48
|
+
/// @param[in] markerData Marker data to save to the file
|
|
49
|
+
/// @param[in] fps Framerate of the motion
|
|
50
|
+
/// @param[in] saveMarkerMesh (optional) Whether to save a visible cube mesh for the markers
|
|
51
|
+
/// @param[in] saveScaleToMotion (optional) Whether to save the scale parameters to the motion or
|
|
52
|
+
/// identity parameter vectors (saving to motion is preferred)
|
|
53
|
+
void saveMotion(
|
|
54
|
+
const std::string& outFile,
|
|
55
|
+
const momentum::Character& character,
|
|
56
|
+
const momentum::ModelParameters& identity,
|
|
57
|
+
Eigen::MatrixXf& finalMotion,
|
|
58
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
59
|
+
double fps,
|
|
60
|
+
bool saveMarkerMesh = true);
|
|
61
|
+
|
|
62
|
+
} // namespace momentum
|
|
@@ -0,0 +1,213 @@
|
|
|
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/character.h>
|
|
11
|
+
#include <momentum/character/marker.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
/// Common configuration for a tracking problem
|
|
16
|
+
struct BaseConfig {
|
|
17
|
+
/// Minimum percentage of visible markers in a frame to consider for tracking. We will skip frames
|
|
18
|
+
/// with too few visible markers as they may be better filled in through a smoothing pass.
|
|
19
|
+
float minVisPercent = 0.f;
|
|
20
|
+
/// Parameter to control what loss function to use. Refer to comments in GeneralizedLoss class for
|
|
21
|
+
/// details. Use a smaller alpha when data is noisy; otherwise L2 is good.
|
|
22
|
+
float lossAlpha = 2.0;
|
|
23
|
+
/// Max number of solver iterations to run.
|
|
24
|
+
size_t maxIter = 30;
|
|
25
|
+
/// Regularization parameter (lambda) for Levenberg-Marquardt solver.
|
|
26
|
+
float regularization = 0.05f;
|
|
27
|
+
/// True to print and save debug information.
|
|
28
|
+
bool debug = false;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/// Configuration for running body and/or locator calibration
|
|
32
|
+
struct CalibrationConfig : public BaseConfig {
|
|
33
|
+
/// Number of frames used in calibration. It will be a uniform sample from the input.
|
|
34
|
+
size_t calibFrames = 100;
|
|
35
|
+
/// Number of iterations to run the main calibration loop. It could be larger if calibrating for
|
|
36
|
+
/// locators only.
|
|
37
|
+
size_t majorIter = 3;
|
|
38
|
+
/// True to only solve for a global body scale without changing individual bone length.
|
|
39
|
+
bool globalScaleOnly = false;
|
|
40
|
+
/// True to calibrate only the locators and not the body.
|
|
41
|
+
bool locatorsOnly = false;
|
|
42
|
+
/// Sample uniformly or do a greedy importance sampling
|
|
43
|
+
size_t greedySampling = 0;
|
|
44
|
+
/// True to lock the floor constraints to the floor in the first frame
|
|
45
|
+
bool enforceFloorInFirstFrame = false;
|
|
46
|
+
/// Name of a pose constraint set to use for the first frame
|
|
47
|
+
std::string firstFramePoseConstraintSet;
|
|
48
|
+
/// Calibrate the character's shape
|
|
49
|
+
bool calibShape = false;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
/// Configuration for pose tracking given a calibrated body and locators
|
|
53
|
+
struct TrackingConfig : public BaseConfig {
|
|
54
|
+
/// The weight for the smoothness error function.
|
|
55
|
+
float smoothing = 0;
|
|
56
|
+
/// The weight for the collision error function.
|
|
57
|
+
float collisionErrorWeight = 0.0;
|
|
58
|
+
/// Smoothing weights per model parameter. The size of this vector should be equal to number of
|
|
59
|
+
/// model parameters and this overrides the value specific in smoothing
|
|
60
|
+
Eigen::VectorXf smoothingWeights{};
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/// Configuration for refining an already tracked motion, eg. add smoothing and/or collision
|
|
64
|
+
/// handling; improve residuals with extra dofs etc.
|
|
65
|
+
struct RefineConfig : public TrackingConfig {
|
|
66
|
+
/// Minimize changes to calibration parameters when in calibration mode, by regularizing towards
|
|
67
|
+
/// the input value with this regularizer weight.
|
|
68
|
+
float regularizer = 0.0;
|
|
69
|
+
/// Calibrate identity parameters when refining the motion.
|
|
70
|
+
bool calibId = false;
|
|
71
|
+
/// Calibrate locators when refining the motion.
|
|
72
|
+
bool calibLocators = false;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
/// Use multiple frames to solve for global parameters such as body proportions and/or marker
|
|
76
|
+
/// offsets together with the motion. It can also be used to smooth out a motion with or without
|
|
77
|
+
/// solving for global parameters, for example to fill gaps when there are missing markers.
|
|
78
|
+
///
|
|
79
|
+
/// @param[in] markerData Marker data.
|
|
80
|
+
/// @param[in] character Character definition.
|
|
81
|
+
/// @param[in] globalParams Bitset to indicate global parameters to solve for; could be all zeros
|
|
82
|
+
/// for post-process a motion.
|
|
83
|
+
/// @param[in] initialMotion Initial values of all parameters. It should be the same length as
|
|
84
|
+
/// markerData, but only frames used in solving are used. Values in unused frames do not matter.
|
|
85
|
+
/// Number of parameters should be the same as defined in character.
|
|
86
|
+
/// @param[in] config Solving options.
|
|
87
|
+
/// @param[in] frameStride Frame stride to select solver frames (ie. uniform sample).
|
|
88
|
+
/// @param[in] enforceFloorInFirstFrame Flag to enforce the floor contact constraints in first frame
|
|
89
|
+
/// @param[in] firstFramePoseConstraintSet Name of a pose constraint set to use for the first frame
|
|
90
|
+
///
|
|
91
|
+
/// @return The solved motion. It has the same length as markerData. It repeats the same solved pose
|
|
92
|
+
/// within a frame stride.
|
|
93
|
+
Eigen::MatrixXf trackSequence(
|
|
94
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
95
|
+
const momentum::Character& character,
|
|
96
|
+
const momentum::ParameterSet& globalParams,
|
|
97
|
+
const Eigen::MatrixXf& initialMotion,
|
|
98
|
+
const TrackingConfig& config,
|
|
99
|
+
float regularizer = 0.0,
|
|
100
|
+
size_t frameStride = 1,
|
|
101
|
+
bool enforceFloorInFirstFrame = false,
|
|
102
|
+
const std::string& firstFramePoseConstraintSet = "");
|
|
103
|
+
|
|
104
|
+
/// Use multiple frames to solve for global parameters such as body proportions and/or marker
|
|
105
|
+
/// offsets together with the motion.
|
|
106
|
+
///
|
|
107
|
+
/// @param[in] markerData Marker data.
|
|
108
|
+
/// @param[in] character Character definition.
|
|
109
|
+
/// @param[in] globalParams Bitset to indicate global parameters to solve for; could be all zeros
|
|
110
|
+
/// for post-process a motion.
|
|
111
|
+
/// @param[in] initialMotion Initial values of all parameters. It should be the same length as
|
|
112
|
+
/// markerData, but only frames used in solving are used. Values in unused frames do not matter.
|
|
113
|
+
/// Number of parameters should be the same as defined in character.
|
|
114
|
+
/// @param[in] config Solving options.
|
|
115
|
+
/// @param[in] frames List of frames to solve for.
|
|
116
|
+
/// @param[in] enforceFloorInFirstFrame Flag to enforce the floor contact constraints in first frame
|
|
117
|
+
/// @param[in] firstFramePoseConstraintSet Name of a pose constraint set to use for the first frame
|
|
118
|
+
///
|
|
119
|
+
/// @return The solved motion. It has the same length as markerData. It repeats the same solved pose
|
|
120
|
+
/// within a frame stride.
|
|
121
|
+
Eigen::MatrixXf trackSequence(
|
|
122
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
123
|
+
const momentum::Character& character,
|
|
124
|
+
const momentum::ParameterSet& globalParams,
|
|
125
|
+
const Eigen::MatrixXf& initialMotion,
|
|
126
|
+
const TrackingConfig& config,
|
|
127
|
+
const std::vector<size_t>& frames,
|
|
128
|
+
float regularizer = 0.0,
|
|
129
|
+
bool enforceFloorInFirstFrame = false,
|
|
130
|
+
const std::string& firstFramePoseConstraintSet = "");
|
|
131
|
+
|
|
132
|
+
/// Track poses per-frame given a calibrated character.
|
|
133
|
+
///
|
|
134
|
+
/// @param[in] markerData Input marker data.
|
|
135
|
+
/// @param[in] character Character definition.
|
|
136
|
+
/// @param[in] globalParams Calibrated identity info; could be repurposed to pass in an initial pose
|
|
137
|
+
/// too.
|
|
138
|
+
/// @param[in] config Solving options.
|
|
139
|
+
/// @param[in] frameStride Frame stride to select solver frames (ie. uniform sample).
|
|
140
|
+
///
|
|
141
|
+
/// @return The solved motion. It has the same length as markerData. It repeats the same solved pose
|
|
142
|
+
/// within a frame stride.
|
|
143
|
+
Eigen::MatrixXf trackPosesPerframe(
|
|
144
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
145
|
+
const momentum::Character& character,
|
|
146
|
+
const momentum::ModelParameters& globalParams,
|
|
147
|
+
const TrackingConfig& config,
|
|
148
|
+
size_t frameStride = 1);
|
|
149
|
+
|
|
150
|
+
/// Track poses for given frames.
|
|
151
|
+
///
|
|
152
|
+
/// @param[in] markerData Input marker data.
|
|
153
|
+
/// @param[in] character Character definition.
|
|
154
|
+
/// @param[in] globalParams Calibrated identity info; could be repurposed to pass in an initial pose
|
|
155
|
+
/// too.
|
|
156
|
+
/// @param[in] config Solving options.
|
|
157
|
+
/// @param[in] frameIndices Frame indices of the frames to be solved.
|
|
158
|
+
///
|
|
159
|
+
/// @return The solved motion. It has the same length as markerData. It repeats the same solved pose
|
|
160
|
+
/// within a frame stride.
|
|
161
|
+
Eigen::MatrixXf trackPosesForFrames(
|
|
162
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
163
|
+
const momentum::Character& character,
|
|
164
|
+
const Eigen::MatrixXf& initialMotion,
|
|
165
|
+
const TrackingConfig& config,
|
|
166
|
+
const std::vector<size_t>& frameIndices);
|
|
167
|
+
|
|
168
|
+
/// Calibrate body proportions and locator offsets of a character from input marker data.
|
|
169
|
+
///
|
|
170
|
+
/// @param[in] markerData Input marker data.
|
|
171
|
+
/// @param[in] config Solving options.
|
|
172
|
+
/// @param[in,out] character Character definition. It provides input locators offsets which will get
|
|
173
|
+
/// updated in return.
|
|
174
|
+
/// @param[in,out] identity Initial identity parameters that get updated in return. It could also
|
|
175
|
+
/// hold the pose of the first frame for better initialization for tracking later.
|
|
176
|
+
void calibrateModel(
|
|
177
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
178
|
+
const CalibrationConfig& config,
|
|
179
|
+
momentum::Character& character,
|
|
180
|
+
momentum::ModelParameters& identity);
|
|
181
|
+
|
|
182
|
+
/// Calibrate locator offsets of a character from input identity and marker data.
|
|
183
|
+
///
|
|
184
|
+
/// @param[in] markerData Input marker data.
|
|
185
|
+
/// @param[in] config Solving options.
|
|
186
|
+
/// @param[in] identity Identity parameters of the input character.
|
|
187
|
+
/// @param[in,out] character Character definition. It provides input locators offsets which will get
|
|
188
|
+
/// updated in return. We overwrite the locators in the input character so we don't have to
|
|
189
|
+
/// duplicate the character object inside the function.
|
|
190
|
+
void calibrateLocators(
|
|
191
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
192
|
+
const CalibrationConfig& config,
|
|
193
|
+
const momentum::ModelParameters& identity,
|
|
194
|
+
momentum::Character& character);
|
|
195
|
+
|
|
196
|
+
Eigen::MatrixXf refineMotion(
|
|
197
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
198
|
+
const Eigen::MatrixXf& motion,
|
|
199
|
+
const RefineConfig& config,
|
|
200
|
+
momentum::Character& character);
|
|
201
|
+
|
|
202
|
+
/// Get the error of the locator motion vs the markers
|
|
203
|
+
///
|
|
204
|
+
/// @param[in] markerData Input marker data.
|
|
205
|
+
/// @param[in] motion Motion to compare against.
|
|
206
|
+
/// @param[in] character Character definition
|
|
207
|
+
/// @return average per frame error and max marker error
|
|
208
|
+
std::pair<float, float> getLocatorError(
|
|
209
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
210
|
+
const Eigen::MatrixXf& motion,
|
|
211
|
+
momentum::Character& character);
|
|
212
|
+
|
|
213
|
+
} // namespace momentum
|
|
@@ -0,0 +1,58 @@
|
|
|
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/marker_tracking/app_utils.h>
|
|
12
|
+
#include <momentum/marker_tracking/marker_tracker.h>
|
|
13
|
+
|
|
14
|
+
#include <string>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
/// Processes marker data for a character model.
|
|
19
|
+
///
|
|
20
|
+
/// It can calibrate the model and locators based on the calibrationConfig, and track the motion of
|
|
21
|
+
/// the markers.
|
|
22
|
+
///
|
|
23
|
+
/// @param[in,out] character The input character definition with locators. It also holds the output
|
|
24
|
+
/// locators if locators are to be calibrated from the calibrationConfig.
|
|
25
|
+
/// @param[in,out] identity The input identity used for tracking. It also holds the solved identify
|
|
26
|
+
/// if identity is to be calibrated from the calibrationConfig.
|
|
27
|
+
/// @param[in] markerData The per-frame position targets to be tracked.
|
|
28
|
+
/// @param[in] trackingConfig The config for per-frame tracking after the correct identity and
|
|
29
|
+
/// locators are solved for (or from input).
|
|
30
|
+
/// @param[in] calibrationConfig The config for running calibration if calibrate is set to true.
|
|
31
|
+
/// @param[in] calibrate True to run calibration according to calibrationConfig.
|
|
32
|
+
/// @param[in] firstFrame The first frame to start solving. We pass in the first frame instead of
|
|
33
|
+
/// triming markerData to avoid data copy.
|
|
34
|
+
/// @param[in] maxFrames The maximum number of frames to process starting from firstFrame.
|
|
35
|
+
/// @returns The final motion matrix after tracking.
|
|
36
|
+
Eigen::MatrixXf processMarkers(
|
|
37
|
+
momentum::Character& character,
|
|
38
|
+
momentum::ModelParameters& identity,
|
|
39
|
+
const std::vector<std::vector<momentum::Marker>>& markerData,
|
|
40
|
+
const TrackingConfig& trackingConfig,
|
|
41
|
+
const CalibrationConfig& calibrationConfig,
|
|
42
|
+
bool calibrate = true,
|
|
43
|
+
size_t firstFrame = 0,
|
|
44
|
+
size_t maxFrames = 0);
|
|
45
|
+
|
|
46
|
+
/// Runs marker tracking on an input marker file (e.g. c3d) and writes the output motion (e.g. glb)
|
|
47
|
+
/// to outputFile
|
|
48
|
+
void processMarkerFile(
|
|
49
|
+
const std::string& inputMarkerFile,
|
|
50
|
+
const std::string& outputFile,
|
|
51
|
+
const TrackingConfig& trackingConfig,
|
|
52
|
+
const CalibrationConfig& calibrationConfig,
|
|
53
|
+
const ModelOptions& modelOptions,
|
|
54
|
+
bool calibrate,
|
|
55
|
+
size_t firstFrame = 0,
|
|
56
|
+
size_t maxFrames = 0);
|
|
57
|
+
|
|
58
|
+
} // namespace momentum
|
|
@@ -0,0 +1,90 @@
|
|
|
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/character.h>
|
|
11
|
+
#include <momentum/character/locator.h>
|
|
12
|
+
#include <momentum/character/marker.h>
|
|
13
|
+
#include <momentum/character_solver/fwd.h>
|
|
14
|
+
#include <momentum/character_solver/skinned_locator_triangle_error_function.h>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
std::vector<std::vector<momentum::PositionData>> createConstraintData(
|
|
19
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
20
|
+
const momentum::LocatorList& locators);
|
|
21
|
+
|
|
22
|
+
std::vector<std::vector<momentum::SkinnedLocatorConstraint>> createSkinnedConstraintData(
|
|
23
|
+
gsl::span<const std::vector<momentum::Marker>> markerData,
|
|
24
|
+
const momentum::SkinnedLocatorList& locators);
|
|
25
|
+
|
|
26
|
+
// TODO: remove the one in momentum
|
|
27
|
+
|
|
28
|
+
// Create a LocatorCharacter where each locator is a bone in its skeleton. This character is used
|
|
29
|
+
// for calibrating locator offsets (as bone offset parameters).
|
|
30
|
+
momentum::Character createLocatorCharacter(
|
|
31
|
+
const momentum::Character& sourceCharacter,
|
|
32
|
+
const std::string& prefix);
|
|
33
|
+
|
|
34
|
+
/// Convert locators to skinned locators by finding the closest point on the mesh surface that
|
|
35
|
+
/// matches the correct bone index and using the skinned weights from that point. Does not add
|
|
36
|
+
/// parameters for the skinned locators, however, that should be a separate step if you are planning
|
|
37
|
+
/// to solve for their locations.
|
|
38
|
+
/// @param sourceCharacter Character with locators to convert
|
|
39
|
+
/// @param maxDistance Maximum distance to search for the closest point on the mesh surface. If the
|
|
40
|
+
/// locator is further than this distance, it will not be converted.
|
|
41
|
+
momentum::Character locatorsToSkinnedLocators(
|
|
42
|
+
const momentum::Character& sourceCharacter,
|
|
43
|
+
float maxDistance = 3.0f);
|
|
44
|
+
|
|
45
|
+
std::vector<momentum::SkinnedLocatorTriangleConstraintT<float>> createSkinnedLocatorMeshConstraints(
|
|
46
|
+
const momentum::Character& character,
|
|
47
|
+
float targetDepth = 1.0f);
|
|
48
|
+
|
|
49
|
+
// Extract locator offsets from a LocatorCharacter for a normal Character given input calibrated
|
|
50
|
+
// parameters
|
|
51
|
+
momentum::LocatorList extractLocatorsFromCharacter(
|
|
52
|
+
const momentum::Character& locatorCharacter,
|
|
53
|
+
const momentum::CharacterParameters& calibParams);
|
|
54
|
+
|
|
55
|
+
// TODO: move to momentum proper
|
|
56
|
+
momentum::ModelParameters extractParameters(
|
|
57
|
+
const momentum::ModelParameters& params,
|
|
58
|
+
const momentum::ParameterSet& parameterSet);
|
|
59
|
+
|
|
60
|
+
std::tuple<Eigen::VectorXf, momentum::LocatorList, momentum::SkinnedLocatorList>
|
|
61
|
+
extractIdAndLocatorsFromParams(
|
|
62
|
+
const momentum::ModelParameters& param,
|
|
63
|
+
const momentum::Character& sourceCharacter,
|
|
64
|
+
const momentum::Character& targetCharacter);
|
|
65
|
+
|
|
66
|
+
Mesh extractBlendShapeFromParams(
|
|
67
|
+
const momentum::ModelParameters& param,
|
|
68
|
+
const momentum::Character& sourceCharacter);
|
|
69
|
+
|
|
70
|
+
void fillIdentity(
|
|
71
|
+
const momentum::ParameterSet& idSet,
|
|
72
|
+
const momentum::ModelParameters& identity,
|
|
73
|
+
Eigen::MatrixXf& motion);
|
|
74
|
+
|
|
75
|
+
// convert from joint to model parameters using only the parameters active in idSet
|
|
76
|
+
ModelParameters jointIdentityToModelIdentity(
|
|
77
|
+
const Character& c,
|
|
78
|
+
const ParameterSet& idSet,
|
|
79
|
+
const JointParameters& jointIdentity);
|
|
80
|
+
|
|
81
|
+
void removeIdentity(
|
|
82
|
+
const momentum::ParameterSet& idSet,
|
|
83
|
+
const momentum::ModelParameters& identity,
|
|
84
|
+
Eigen::MatrixXf& motion);
|
|
85
|
+
|
|
86
|
+
std::vector<std::vector<momentum::Marker>> extractMarkersFromMotion(
|
|
87
|
+
const momentum::Character& character,
|
|
88
|
+
const Eigen::MatrixXf& motion);
|
|
89
|
+
|
|
90
|
+
} // namespace momentum
|
|
@@ -0,0 +1,82 @@
|
|
|
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 <limits>
|
|
11
|
+
#include <type_traits>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
template <typename T = float>
|
|
16
|
+
[[nodiscard]] constexpr T nan() noexcept {
|
|
17
|
+
return std::numeric_limits<T>::quiet_NaN();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/// Returns the tolerance value based on the provided type T
|
|
21
|
+
template <typename T>
|
|
22
|
+
[[nodiscard]] constexpr T Eps(T FloatEps = T(1e-7), T DoubleEps = T(1e-16)) {
|
|
23
|
+
if constexpr (std::is_same_v<T, float>) {
|
|
24
|
+
return FloatEps;
|
|
25
|
+
} else if constexpr (std::is_same_v<T, double>) {
|
|
26
|
+
return DoubleEps;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
template <typename T = float>
|
|
31
|
+
[[nodiscard]] constexpr T ln2() noexcept {
|
|
32
|
+
return 0.69314718055994530942; ///< log_e 2
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
template <typename T = float>
|
|
36
|
+
[[nodiscard]] constexpr T pi() noexcept {
|
|
37
|
+
return 3.14159265358979323846;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
template <typename T = float>
|
|
41
|
+
[[nodiscard]] constexpr T twopi() noexcept {
|
|
42
|
+
return T(2) * pi<T>();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/// Converts the given angle x (in degrees) to radians.
|
|
46
|
+
///
|
|
47
|
+
/// If called without an argument, it returns the conversion factor from degrees to radians.
|
|
48
|
+
template <typename T = float>
|
|
49
|
+
[[nodiscard]] constexpr T toRad(T x = T(1)) noexcept {
|
|
50
|
+
static_assert(std::is_floating_point_v<T>, "toRad requires a floating point argument.");
|
|
51
|
+
return x * pi<T>() / T(180);
|
|
52
|
+
}
|
|
53
|
+
// TODO: Support Eigen types to provide consistent conversion function usage with a single argument.
|
|
54
|
+
|
|
55
|
+
/// Converts the given angle x (in radians) to degrees.
|
|
56
|
+
///
|
|
57
|
+
/// If called without an argument, it returns the conversion factor from radians to degrees.
|
|
58
|
+
template <typename T = float>
|
|
59
|
+
[[nodiscard]] constexpr T toDeg(T x = T(1)) noexcept {
|
|
60
|
+
static_assert(std::is_floating_point_v<T>, "toDeg requires a floating point argument.");
|
|
61
|
+
return x * T(180) / pi<T>();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// Converts the given length x (in centimeters) to meters.
|
|
65
|
+
///
|
|
66
|
+
/// If called without an argument, it returns the conversion factor from centimeters to meters.
|
|
67
|
+
template <typename T = float>
|
|
68
|
+
[[nodiscard]] constexpr T toM(T x = T(1)) noexcept {
|
|
69
|
+
static_assert(std::is_floating_point_v<T>, "toM requires a floating point argument.");
|
|
70
|
+
return x * T(0.01);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// Converts the given length x (in meters) to centimeters.
|
|
74
|
+
///
|
|
75
|
+
/// If called without an argument, it returns the conversion factor from meters to centimeters.
|
|
76
|
+
template <typename T = float>
|
|
77
|
+
[[nodiscard]] constexpr T toCm(T x = T(1)) noexcept {
|
|
78
|
+
static_assert(std::is_floating_point_v<T>, "toCm requires a floating point argument.");
|
|
79
|
+
return x * T(100);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
} // namespace momentum
|
|
@@ -0,0 +1,84 @@
|
|
|
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/online_householder_qr.h>
|
|
11
|
+
#include <momentum/math/types.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
//
|
|
16
|
+
// Efficient and numerically stable representation of the generalized
|
|
17
|
+
// Gaussian covariance
|
|
18
|
+
// C = (sigma^2 * I + A^T * A)
|
|
19
|
+
// providing access to the inverse covariance matrix (computed using
|
|
20
|
+
// QR factorization).
|
|
21
|
+
//
|
|
22
|
+
// Note the dimensionality here: C and I are [n x n], A is [m x n]
|
|
23
|
+
// where m can be either larger or smaller than n.
|
|
24
|
+
template <typename T>
|
|
25
|
+
class LowRankCovarianceMatrixT {
|
|
26
|
+
public:
|
|
27
|
+
LowRankCovarianceMatrixT() = default;
|
|
28
|
+
|
|
29
|
+
void reset(T sigma, Eigen::Ref<const Eigen::MatrixX<T>> A);
|
|
30
|
+
|
|
31
|
+
[[nodiscard]] Eigen::Index dimension() const;
|
|
32
|
+
|
|
33
|
+
[[nodiscard]] const Eigen::MatrixX<T>& basis() const;
|
|
34
|
+
|
|
35
|
+
[[nodiscard]] T sigma() const;
|
|
36
|
+
|
|
37
|
+
[[nodiscard]] Eigen::VectorX<T> inverse_times_vec(Eigen::Ref<const Eigen::VectorX<T>> rhs) const;
|
|
38
|
+
[[nodiscard]] Eigen::VectorX<T> times_vec(Eigen::Ref<const Eigen::VectorX<T>> rhs) const;
|
|
39
|
+
|
|
40
|
+
[[nodiscard]] Eigen::MatrixX<T> inverse_times_mat(Eigen::Ref<const Eigen::MatrixX<T>> rhs) const;
|
|
41
|
+
[[nodiscard]] Eigen::MatrixX<T> times_mat(Eigen::Ref<const Eigen::MatrixX<T>> rhs) const;
|
|
42
|
+
|
|
43
|
+
[[nodiscard]] const Eigen::MatrixX<T>& R() const;
|
|
44
|
+
|
|
45
|
+
// The log of the determinant of the covariance matrix
|
|
46
|
+
[[nodiscard]] T logDeterminant() const;
|
|
47
|
+
|
|
48
|
+
// The log of the determinant of the inverse covariance matrix
|
|
49
|
+
[[nodiscard]] T inverse_logDeterminant() const;
|
|
50
|
+
|
|
51
|
+
private:
|
|
52
|
+
// The QR factorization of A is defined by:
|
|
53
|
+
// A = Q*R
|
|
54
|
+
// where Q is orthonormal and R is upper triangular. This online QR solver
|
|
55
|
+
// used here happens to be particularly efficient for the case where the A
|
|
56
|
+
// matrix looks like:
|
|
57
|
+
// A = [ lambda*I ]
|
|
58
|
+
// [ B ]
|
|
59
|
+
// The reason for this is that it allows initialization of the R matrix by
|
|
60
|
+
// a diagonal, and hence only needs to process the rows in W. The
|
|
61
|
+
// resulting factorization is O(m*n^2) to compute, which may (for m << n)
|
|
62
|
+
// be a touch cheaper than the fully general O(n^3) that a "standard" QR
|
|
63
|
+
// factorization or Cholesky would require.
|
|
64
|
+
//
|
|
65
|
+
// Once we have A = Q*R, we can compute (A^T*A)^{-1} by
|
|
66
|
+
// (A^T * A)^{-1} = (R^T * Q^T * Q * R)^{-1}
|
|
67
|
+
// = (R^T * R)^{-1} by orthonormality
|
|
68
|
+
// = (R^{-1}) * R^{-T} distributing the inverse
|
|
69
|
+
//
|
|
70
|
+
// Note that OnlineHouseholderQR does _not_ store the Q matrix (or the
|
|
71
|
+
// information required to reconstruct it, as is more typical) because it
|
|
72
|
+
// assumes that it will be used to solve least squares problems of the form
|
|
73
|
+
// min |Ax - b|_2 and hence can apply Q to b as it is being computed. In
|
|
74
|
+
// our case, however, as noted above we won't be using the Q matrix so this
|
|
75
|
+
// is not a limitation.
|
|
76
|
+
OnlineHouseholderQR<T> qrFactorization_{0};
|
|
77
|
+
|
|
78
|
+
// Low-rank basis:
|
|
79
|
+
Eigen::MatrixX<T> A_;
|
|
80
|
+
|
|
81
|
+
T sigma_ = 0;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
} // namespace momentum
|
|
@@ -0,0 +1,23 @@
|
|
|
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 <fmt/ostream.h>
|
|
11
|
+
#include <Eigen/Core>
|
|
12
|
+
|
|
13
|
+
#if FMT_VERSION > 100000
|
|
14
|
+
|
|
15
|
+
// https://stackoverflow.com/a/73755864
|
|
16
|
+
#ifndef MOMENTUM_FMT_EIGEN_SHARED_PTR_FORMATTER
|
|
17
|
+
#define MOMENTUM_FMT_EIGEN_SHARED_PTR_FORMATTER
|
|
18
|
+
template <typename T>
|
|
19
|
+
struct fmt::formatter<T, std::enable_if_t<std::is_base_of_v<Eigen::DenseBase<T>, T>, char>>
|
|
20
|
+
: ostream_formatter {};
|
|
21
|
+
#endif
|
|
22
|
+
|
|
23
|
+
#endif
|