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.
- include/axel/BoundingBox.h +59 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +87 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +208 -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 +97 -0
- include/momentum/character/blend_shape_base.h +86 -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 +94 -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 +207 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +227 -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 +155 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -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 +943 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/height_error_function.h +176 -0
- include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -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 +119 -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 +98 -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 +135 -0
- include/momentum/io/fbx/fbx_memory_stream.h +70 -0
- include/momentum/io/fbx/openfbx_loader.h +62 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/file_save_options.h +107 -0
- include/momentum/io/gltf/gltf_builder.h +141 -0
- include/momentum/io/gltf/gltf_io.h +149 -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 +82 -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 +38 -0
- include/momentum/io/skeleton/parameter_transform_io.h +80 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/skeleton/utility.h +67 -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 +64 -0
- include/momentum/marker_tracking/marker_tracker.h +221 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +99 -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 +324 -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/text_rasterizer.h +89 -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/FindFbxSdk.cmake +115 -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 +385 -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-312-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +631 -0
- pymomentum/backend/trs_backend.py +889 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-darwin.so +0 -0
- pymomentum/solver2.cpython-312-darwin.so +0 -0
- pymomentum/torch/character.py +868 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
- pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
- pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/parameter_limits.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/math/utility.h>
|
|
13
|
+
|
|
14
|
+
#include <span>
|
|
15
|
+
|
|
16
|
+
#include <string>
|
|
17
|
+
#include <unordered_map>
|
|
18
|
+
|
|
19
|
+
namespace momentum {
|
|
20
|
+
|
|
21
|
+
struct PoseConstraint {
|
|
22
|
+
/// A vector of tuple of type: (model parameter index, parameter value).
|
|
23
|
+
/// The model parameter index must be in [0, numModelParameters.size()).
|
|
24
|
+
/// The value of the model parameters specified here are kept constant (= parameter value) during
|
|
25
|
+
/// optimization. The ordering of elements in the vector doesn't matter (making it an unordered
|
|
26
|
+
/// map would be more semantically correct) since it stores an index to the model parameters
|
|
27
|
+
std::vector<std::pair<size_t, float>> parameterIdValue;
|
|
28
|
+
|
|
29
|
+
bool operator==(const PoseConstraint& poseConstraint) const;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
using ParameterSets = std::unordered_map<std::string, ParameterSet>;
|
|
33
|
+
using PoseConstraints = std::unordered_map<std::string, PoseConstraint>;
|
|
34
|
+
|
|
35
|
+
/// A parameter transform is an abstraction of the joint parameters that maps a model_parameter
|
|
36
|
+
/// vector to a joint_parameter vector. It allows mapping a single model_parameter to multiple
|
|
37
|
+
/// joints, and a single joint being influenced by multiple model_parameters joint parameters are
|
|
38
|
+
/// calculated from parameters in the following way : <joint_parameters> = <transform> *
|
|
39
|
+
/// <model_parameters> + <offsets>
|
|
40
|
+
template <typename T>
|
|
41
|
+
struct ParameterTransformT {
|
|
42
|
+
/// The list of model parameter names.
|
|
43
|
+
std::vector<std::string> name;
|
|
44
|
+
|
|
45
|
+
/// The sparse mapping matrix that maps model parameters to joint parameters.
|
|
46
|
+
SparseRowMatrix<T> transform;
|
|
47
|
+
|
|
48
|
+
/// @deprecated Constant offset factor for each joint.
|
|
49
|
+
Eigen::VectorX<T> offsets;
|
|
50
|
+
|
|
51
|
+
/// The list of joint *parameters* that are actually active and influenced from the transform.
|
|
52
|
+
VectorX<bool> activeJointParams;
|
|
53
|
+
|
|
54
|
+
/// Convenience grouping of model parameters.
|
|
55
|
+
ParameterSets parameterSets;
|
|
56
|
+
|
|
57
|
+
/// A set of predefined poses.
|
|
58
|
+
PoseConstraints poseConstraints;
|
|
59
|
+
|
|
60
|
+
/// The indices of the parameters that influence blend shapes; blendShapeParameters(0) is the
|
|
61
|
+
/// parameter that controls the 0th blend shape, etc.
|
|
62
|
+
VectorXi blendShapeParameters;
|
|
63
|
+
|
|
64
|
+
/// The indices of the parameters that influence face expressions; faceExpressionParameters(0) is
|
|
65
|
+
/// the parameter that controls the 0th face expression parameter, etc.
|
|
66
|
+
VectorXi faceExpressionParameters;
|
|
67
|
+
|
|
68
|
+
/// Parameters that control the rest-space positions of the skinned locators.
|
|
69
|
+
/// This array will be either empty or have the same size as the number of
|
|
70
|
+
/// skinned locators. Each entry maps from a skinned locator index to the
|
|
71
|
+
/// first of the three (x,y,z) parameters that control its position. Skinned
|
|
72
|
+
/// locators that aren't controlled by the paramete transform will have
|
|
73
|
+
/// skinnedLocatorParameters[i] = -1.
|
|
74
|
+
VectorXi skinnedLocatorParameters;
|
|
75
|
+
|
|
76
|
+
/// Return a ParameterTransform object with no model parameters. The model can still perform FK
|
|
77
|
+
/// with JointParameters, but it does not have any degrees of freedom for IK.
|
|
78
|
+
[[nodiscard]] static ParameterTransformT<T> empty(size_t nJointParameters);
|
|
79
|
+
|
|
80
|
+
/// Return a ParameterTransform object where the model parameters are identical to the joint
|
|
81
|
+
/// parameters.
|
|
82
|
+
[[nodiscard]] static ParameterTransformT<T> identity(std::span<const std::string> jointNames);
|
|
83
|
+
|
|
84
|
+
/// Compute activeJointParams based on the transform and the input ParameterSet.
|
|
85
|
+
[[nodiscard]] VectorX<bool> computeActiveJointParams(const ParameterSet& ps = allParams()) const;
|
|
86
|
+
|
|
87
|
+
/// Return the index of a model parameter from its name.
|
|
88
|
+
[[nodiscard]] size_t getParameterIdByName(const std::string& nm) const;
|
|
89
|
+
|
|
90
|
+
/// Map model parameters to joint parameters using a linear transformation.
|
|
91
|
+
[[nodiscard]] JointParametersT<T> apply(const ModelParametersT<T>& parameters) const;
|
|
92
|
+
|
|
93
|
+
/// Map model parameters to joint parameters using a linear transformation.
|
|
94
|
+
[[nodiscard]] JointParametersT<T> apply(const CharacterParametersT<T>& parameters) const;
|
|
95
|
+
|
|
96
|
+
/// Return rest pose joint parameters.
|
|
97
|
+
[[nodiscard]] JointParametersT<T> zero() const;
|
|
98
|
+
|
|
99
|
+
/// Return bind pose joint parameters (same as the rest pose here).
|
|
100
|
+
[[nodiscard]] JointParametersT<T> bindPose() const;
|
|
101
|
+
|
|
102
|
+
/// Get a list of scaling parameters (with prefix "scale_").
|
|
103
|
+
[[nodiscard]] ParameterSet getScalingParameters() const;
|
|
104
|
+
|
|
105
|
+
/// Get a list of root parameters (with prefix "root_")
|
|
106
|
+
[[nodiscard]] ParameterSet getRigidParameters() const;
|
|
107
|
+
|
|
108
|
+
/// Return all parameters used for posing the body (excludes scaling parameters, blend shape
|
|
109
|
+
/// parameters, or any parameters used for physics).
|
|
110
|
+
[[nodiscard]] ParameterSet getPoseParameters() const;
|
|
111
|
+
|
|
112
|
+
/// Get a list of blend shape parameters.
|
|
113
|
+
[[nodiscard]] ParameterSet getBlendShapeParameters() const;
|
|
114
|
+
|
|
115
|
+
/// Get a list of face expression parameters.
|
|
116
|
+
[[nodiscard]] ParameterSet getFaceExpressionParameters() const;
|
|
117
|
+
|
|
118
|
+
/// Get a list of skinned locator parameters
|
|
119
|
+
[[nodiscard]] ParameterSet getSkinnedLocatorParameters() const;
|
|
120
|
+
|
|
121
|
+
/// Get a parameter set, if allowMissing is set then it will return an empty parameter set if no
|
|
122
|
+
/// such parameterset is found in the file.
|
|
123
|
+
[[nodiscard]] ParameterSet getParameterSet(
|
|
124
|
+
const std::string& parameterSetName,
|
|
125
|
+
bool allowMissing = false) const;
|
|
126
|
+
|
|
127
|
+
template <typename T2>
|
|
128
|
+
[[nodiscard]] ParameterTransformT<T2> cast() const;
|
|
129
|
+
|
|
130
|
+
/// Create a simplified transform given the enabled parameters.
|
|
131
|
+
[[nodiscard]] ParameterTransformT<T> simplify(const ParameterSet& enabledParameters) const;
|
|
132
|
+
|
|
133
|
+
/// Dimension of all model parameters, including pose, scaling, marker joints, and blendshape
|
|
134
|
+
/// parameters for id and expressions.
|
|
135
|
+
[[nodiscard]] Eigen::Index numAllModelParameters() const {
|
|
136
|
+
return transform.cols();
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/// Dimension of the output jointParameters vector.
|
|
140
|
+
[[nodiscard]] Eigen::Index numJointParameters() const {
|
|
141
|
+
return transform.rows();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// Dimension of identity blendshape parameters.
|
|
145
|
+
[[nodiscard]] Eigen::Index numBlendShapeParameters() const;
|
|
146
|
+
|
|
147
|
+
/// Dimension of facial expression parameters.
|
|
148
|
+
[[nodiscard]] Eigen::Index numFaceExpressionParameters() const;
|
|
149
|
+
|
|
150
|
+
/// Dimension of facial expression parameters.
|
|
151
|
+
[[nodiscard]] Eigen::Index numSkinnedLocatorParameters() const;
|
|
152
|
+
|
|
153
|
+
/// Dimension of skeletal model parameters, including pose parameters,
|
|
154
|
+
/// scaling parameters, locator joint parameters etc. basically everything
|
|
155
|
+
/// but blendshapes (ids and expressions).
|
|
156
|
+
[[nodiscard]] Eigen::Index numSkeletonParameters() const {
|
|
157
|
+
return numAllModelParameters() - numBlendShapeParameters() - numFaceExpressionParameters() -
|
|
158
|
+
numSkinnedLocatorParameters();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
[[nodiscard]] bool isApprox(const ParameterTransformT<T>& parameterTransform) const;
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
using ParameterTransform = ParameterTransformT<float>;
|
|
165
|
+
using ParameterTransformd = ParameterTransformT<double>;
|
|
166
|
+
|
|
167
|
+
/// Return a parameter mapping that only includes the listed parameters.
|
|
168
|
+
template <typename T>
|
|
169
|
+
[[nodiscard]] std::tuple<ParameterTransformT<T>, ParameterLimits> subsetParameterTransform(
|
|
170
|
+
const ParameterTransformT<T>& paramTransform,
|
|
171
|
+
const ParameterLimits& paramLimitsOld,
|
|
172
|
+
const ParameterSet& paramSet);
|
|
173
|
+
|
|
174
|
+
/// Construct a new parameter transform where the joints have been mapped to a
|
|
175
|
+
/// new skeleton. Joints that are mapped to kInvalidIndex will be simply skipped.
|
|
176
|
+
/// Note that this does _not_ delete any parameters so it's possible if you remove
|
|
177
|
+
/// enough joints to have "orphan" parameters still kicking around; to avoid this
|
|
178
|
+
/// consider also applying an appropriate subsetParameterTransform() operation.
|
|
179
|
+
template <typename T>
|
|
180
|
+
[[nodiscard]] ParameterTransformT<T> mapParameterTransformJoints(
|
|
181
|
+
const ParameterTransformT<T>& parameterTransform,
|
|
182
|
+
size_t numTargetJoints,
|
|
183
|
+
const std::vector<size_t>& jointMapping);
|
|
184
|
+
|
|
185
|
+
[[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addBlendShapeParameters(
|
|
186
|
+
ParameterTransform paramTransform,
|
|
187
|
+
ParameterLimits paramLimits,
|
|
188
|
+
Eigen::Index nBlendShapes);
|
|
189
|
+
|
|
190
|
+
[[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addFaceExpressionParameters(
|
|
191
|
+
ParameterTransform paramTransform,
|
|
192
|
+
ParameterLimits paramLimits,
|
|
193
|
+
Eigen::Index nFaceExpressionBlendShapes);
|
|
194
|
+
|
|
195
|
+
/// Add a set of parameters that control the rest-space positions of the skinned locators.
|
|
196
|
+
/// This function will add 3 parameters for each locator, one for each of the x, y, and z
|
|
197
|
+
/// components of the locator position. The parameters are added to the end of the
|
|
198
|
+
/// parameter transform. The parameter transform is returned along with the updated
|
|
199
|
+
/// list of parameter limits. Note that you pass in the locator names rather than the
|
|
200
|
+
/// actual SkinnedLocator objects because this avoids a circular dependency.
|
|
201
|
+
[[nodiscard]] std::tuple<ParameterTransform, ParameterLimits> addSkinnedLocatorParameters(
|
|
202
|
+
ParameterTransform paramTransform,
|
|
203
|
+
ParameterLimits paramLimits,
|
|
204
|
+
const std::vector<bool>& activeLocators,
|
|
205
|
+
const std::vector<std::string>& locatorNames = {});
|
|
206
|
+
|
|
207
|
+
} // namespace momentum
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/math/types.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
/// Computes shape deformations based on joint rotations.
|
|
16
|
+
///
|
|
17
|
+
/// PoseShape implements a linear blend shape system where shape deformations
|
|
18
|
+
/// are driven by joint rotations. This is useful for modeling effects like
|
|
19
|
+
/// muscle bulging or skin sliding that occur during animation.
|
|
20
|
+
struct PoseShape {
|
|
21
|
+
/// Index of the joint used as reference for computing relative rotations.
|
|
22
|
+
size_t baseJoint;
|
|
23
|
+
|
|
24
|
+
/// Base rotation used as reference for computing rotation differences.
|
|
25
|
+
///
|
|
26
|
+
/// The effective rotation used for deformation is baseRot * joint.rotation().inverse()
|
|
27
|
+
Quaternionf baseRot;
|
|
28
|
+
|
|
29
|
+
/// Indices of joints whose rotations drive the shape deformation.
|
|
30
|
+
std::vector<size_t> jointMap;
|
|
31
|
+
|
|
32
|
+
/// Base shape vertices stored as a flat vector [x1,y1,z1,x2,y2,z2,...].
|
|
33
|
+
///
|
|
34
|
+
/// The size must be a multiple of 3 (3 coordinates per vertex).
|
|
35
|
+
VectorXf baseShape;
|
|
36
|
+
|
|
37
|
+
/// Shape deformation vectors for each quaternion component of each joint.
|
|
38
|
+
///
|
|
39
|
+
/// Matrix dimensions are [baseShape.size() × (jointMap.size() * 4)].
|
|
40
|
+
/// Each column corresponds to a quaternion component (x,y,z,w) of a joint.
|
|
41
|
+
MatrixXf shapeVectors;
|
|
42
|
+
|
|
43
|
+
/// Computes the deformed shape based on the current skeleton state.
|
|
44
|
+
///
|
|
45
|
+
/// @param state Current state of the skeleton containing joint rotations
|
|
46
|
+
/// @return Vector of 3D vertex positions representing the deformed shape
|
|
47
|
+
/// @throws If baseShape.size() != shapeVectors.rows()
|
|
48
|
+
[[nodiscard]] std::vector<Vector3f> compute(const SkeletonState& state) const;
|
|
49
|
+
|
|
50
|
+
/// Checks if this PoseShape is approximately equal to another.
|
|
51
|
+
///
|
|
52
|
+
/// Two PoseShape objects are considered approximately equal if all their
|
|
53
|
+
/// corresponding members are approximately equal.
|
|
54
|
+
///
|
|
55
|
+
/// @param poseShape The PoseShape to compare with
|
|
56
|
+
/// @return True if the PoseShape objects are approximately equal
|
|
57
|
+
[[nodiscard]] inline bool isApprox(const PoseShape& poseShape) const {
|
|
58
|
+
return (
|
|
59
|
+
(baseJoint == poseShape.baseJoint) && baseRot.isApprox(poseShape.baseRot) &&
|
|
60
|
+
(jointMap == poseShape.jointMap) && baseShape.isApprox(poseShape.baseShape) &&
|
|
61
|
+
shapeVectors.isApprox(poseShape.shapeVectors));
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
} // namespace momentum
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/joint.h>
|
|
11
|
+
#include <momentum/character/parameter_transform.h>
|
|
12
|
+
#include <momentum/character/types.h>
|
|
13
|
+
#include <momentum/common/exception.h>
|
|
14
|
+
|
|
15
|
+
#include <string>
|
|
16
|
+
#include <string_view>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
/// The skeletal structure of a momentum Character.
|
|
21
|
+
template <typename T>
|
|
22
|
+
struct SkeletonT {
|
|
23
|
+
/// The list of joints in this skeleton.
|
|
24
|
+
JointList joints;
|
|
25
|
+
|
|
26
|
+
/// Default constructor
|
|
27
|
+
SkeletonT() = default;
|
|
28
|
+
|
|
29
|
+
/// Constructor that validates joint hierarchy.
|
|
30
|
+
/// Ensures parent indices are valid (parent < child index or kInvalidIndex).
|
|
31
|
+
explicit SkeletonT(JointList joints);
|
|
32
|
+
|
|
33
|
+
/// Copy constructor
|
|
34
|
+
SkeletonT(const SkeletonT& other) = default;
|
|
35
|
+
|
|
36
|
+
/// Move constructor
|
|
37
|
+
SkeletonT(SkeletonT&& other) noexcept = default;
|
|
38
|
+
|
|
39
|
+
/// Copy assignment operator
|
|
40
|
+
SkeletonT& operator=(const SkeletonT& other) = default;
|
|
41
|
+
|
|
42
|
+
/// Move assignment operator
|
|
43
|
+
SkeletonT& operator=(SkeletonT&& other) noexcept = default;
|
|
44
|
+
|
|
45
|
+
/// Returns the index of a joint with the given name, or kInvalidIndex if not found.
|
|
46
|
+
[[nodiscard]] size_t getJointIdByName(std::string_view name) const;
|
|
47
|
+
|
|
48
|
+
/// Returns a vector containing all joint names in the skeleton.
|
|
49
|
+
[[nodiscard]] std::vector<std::string> getJointNames() const;
|
|
50
|
+
|
|
51
|
+
/// Returns indices of child joints for the specified joint.
|
|
52
|
+
///
|
|
53
|
+
/// @param jointId Index of the joint to find children for
|
|
54
|
+
/// @param recursive If true, returns all descendants; if false, only direct children
|
|
55
|
+
/// @throws std::out_of_range if jointId is invalid
|
|
56
|
+
[[nodiscard]] std::vector<size_t> getChildrenJoints(size_t jointId, bool recursive = true) const;
|
|
57
|
+
|
|
58
|
+
/// Determines if one joint is an ancestor of another in the hierarchy.
|
|
59
|
+
///
|
|
60
|
+
/// Returns true if ancestorJointId is an ancestor of jointId.
|
|
61
|
+
/// A joint is considered to be its own ancestor (isAncestor(id, id) returns true).
|
|
62
|
+
[[nodiscard]] bool isAncestor(size_t jointId, size_t ancestorJointId) const;
|
|
63
|
+
|
|
64
|
+
/// Finds the closest common ancestor of two joints in the hierarchy.
|
|
65
|
+
///
|
|
66
|
+
/// Returns the index of the joint that is the lowest common ancestor
|
|
67
|
+
/// in the hierarchy for the two specified joints.
|
|
68
|
+
[[nodiscard]] size_t commonAncestor(size_t joint1, size_t joint2) const;
|
|
69
|
+
|
|
70
|
+
/// Converts the skeleton to use a different scalar type.
|
|
71
|
+
///
|
|
72
|
+
/// Returns a copy of this skeleton with all numeric values converted to type U.
|
|
73
|
+
template <typename U>
|
|
74
|
+
[[nodiscard]] SkeletonT<U> cast() const {
|
|
75
|
+
if constexpr (std::is_same_v<T, U>) {
|
|
76
|
+
return *this;
|
|
77
|
+
} else {
|
|
78
|
+
SkeletonT<U> newSkeleton;
|
|
79
|
+
newSkeleton.joints = ::momentum::cast<U>(joints);
|
|
80
|
+
return newSkeleton;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
} // namespace momentum
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/joint_state.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/math/types.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
/// Measures of similarity between two skeleton states
|
|
17
|
+
///
|
|
18
|
+
/// Contains both per-joint error metrics and aggregate statistics
|
|
19
|
+
struct StateSimilarity {
|
|
20
|
+
/// Position error for each joint (in distance units)
|
|
21
|
+
VectorXf positionError;
|
|
22
|
+
|
|
23
|
+
/// Orientation error for each joint (in radians)
|
|
24
|
+
VectorXf orientationError;
|
|
25
|
+
|
|
26
|
+
/// Root mean square of position errors across all joints
|
|
27
|
+
float positionRMSE;
|
|
28
|
+
|
|
29
|
+
/// Root mean square of orientation errors across all joints
|
|
30
|
+
float orientationRMSE;
|
|
31
|
+
|
|
32
|
+
/// Maximum position error across all joints
|
|
33
|
+
float positionMax;
|
|
34
|
+
|
|
35
|
+
/// Maximum orientation error across all joints
|
|
36
|
+
float orientationMax;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/// Represents the complete state of a skeleton
|
|
40
|
+
///
|
|
41
|
+
/// Stores joint parameters and computed joint states for an entire skeleton.
|
|
42
|
+
/// Provides methods for updating the state based on new parameters and
|
|
43
|
+
/// comparing different skeleton states.
|
|
44
|
+
template <typename T>
|
|
45
|
+
struct SkeletonStateT {
|
|
46
|
+
/// Joint parameters for all joints in the skeleton
|
|
47
|
+
JointParametersT<T> jointParameters;
|
|
48
|
+
|
|
49
|
+
/// Computed joint states for all joints in the skeleton
|
|
50
|
+
JointStateListT<T> jointState;
|
|
51
|
+
|
|
52
|
+
/// Creates an empty skeleton state
|
|
53
|
+
SkeletonStateT() noexcept = default;
|
|
54
|
+
|
|
55
|
+
/// Creates a skeleton state from joint parameters and a reference skeleton
|
|
56
|
+
///
|
|
57
|
+
/// @param parameters Joint parameters for all joints in the skeleton
|
|
58
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
59
|
+
/// @param computeDeriv Whether to compute derivative information for the joints
|
|
60
|
+
SkeletonStateT(
|
|
61
|
+
const JointParametersT<T>& parameters,
|
|
62
|
+
const Skeleton& referenceSkeleton,
|
|
63
|
+
bool computeDeriv = true);
|
|
64
|
+
|
|
65
|
+
/// Creates a skeleton state from rvalue joint parameters and a reference skeleton
|
|
66
|
+
///
|
|
67
|
+
/// @param parameters Joint parameters for all joints in the skeleton (moved from)
|
|
68
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
69
|
+
/// @param computeDeriv Whether to compute derivative information for the joints
|
|
70
|
+
SkeletonStateT(
|
|
71
|
+
JointParametersT<T>&& parameters,
|
|
72
|
+
const Skeleton& referenceSkeleton,
|
|
73
|
+
bool computeDeriv = true);
|
|
74
|
+
|
|
75
|
+
/// Creates a skeleton state from another skeleton state with a different scalar type
|
|
76
|
+
///
|
|
77
|
+
/// @tparam T2 Source scalar type
|
|
78
|
+
/// @param rhs Source skeleton state to copy from
|
|
79
|
+
template <typename T2>
|
|
80
|
+
explicit SkeletonStateT(const SkeletonStateT<T2>& rhs);
|
|
81
|
+
|
|
82
|
+
/// Updates the skeleton state with new joint parameters
|
|
83
|
+
///
|
|
84
|
+
/// @param jointParameters New joint parameters for all joints
|
|
85
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
86
|
+
/// @param computeDeriv Whether to compute derivative information for the joints
|
|
87
|
+
void set(
|
|
88
|
+
const JointParametersT<T>& jointParameters,
|
|
89
|
+
const Skeleton& referenceSkeleton,
|
|
90
|
+
bool computeDeriv = true);
|
|
91
|
+
|
|
92
|
+
/// Updates the skeleton state with new rvalue joint parameters
|
|
93
|
+
///
|
|
94
|
+
/// @param jointParameters New joint parameters for all joints (moved from)
|
|
95
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
96
|
+
/// @param computeDeriv Whether to compute derivative information for the joints
|
|
97
|
+
void set(
|
|
98
|
+
JointParametersT<T>&& jointParameters,
|
|
99
|
+
const Skeleton& referenceSkeleton,
|
|
100
|
+
bool computeDeriv = true);
|
|
101
|
+
|
|
102
|
+
/// Updates the skeleton state from another skeleton state with a different scalar type
|
|
103
|
+
///
|
|
104
|
+
/// @tparam T2 Source scalar type
|
|
105
|
+
/// @param rhs Source skeleton state to copy from
|
|
106
|
+
template <typename T2>
|
|
107
|
+
void set(const SkeletonStateT<T2>& rhs);
|
|
108
|
+
|
|
109
|
+
/// Compares two skeleton states and returns similarity metrics
|
|
110
|
+
///
|
|
111
|
+
/// @param state1 First skeleton state to compare
|
|
112
|
+
/// @param state2 Second skeleton state to compare
|
|
113
|
+
/// @return Similarity metrics between the two states
|
|
114
|
+
[[nodiscard]] static StateSimilarity compare(
|
|
115
|
+
const SkeletonStateT<T>& state1,
|
|
116
|
+
const SkeletonStateT<T>& state2);
|
|
117
|
+
|
|
118
|
+
/// Extracts global transforms for all joints in the skeleton
|
|
119
|
+
///
|
|
120
|
+
/// @return List of global transforms for all joints
|
|
121
|
+
[[nodiscard]] TransformListT<T> toTransforms() const;
|
|
122
|
+
|
|
123
|
+
/// Converts the skeleton state to a different scalar type
|
|
124
|
+
///
|
|
125
|
+
/// @tparam T2 Target scalar type
|
|
126
|
+
/// @return Skeleton state with the target scalar type
|
|
127
|
+
template <typename T2>
|
|
128
|
+
[[nodiscard]] SkeletonStateT<T2> cast() const {
|
|
129
|
+
SkeletonStateT<T2> result;
|
|
130
|
+
result.set(*this);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
private:
|
|
135
|
+
/// Updates the joint states based on the current joint parameters
|
|
136
|
+
///
|
|
137
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
138
|
+
/// @param computeDeriv Whether to compute derivative information for the joints
|
|
139
|
+
void set(const Skeleton& referenceSkeleton, bool computeDeriv);
|
|
140
|
+
|
|
141
|
+
/// Copies joint states from another skeleton state with a different scalar type
|
|
142
|
+
///
|
|
143
|
+
/// @tparam T2 Source scalar type
|
|
144
|
+
/// @param rhs Source skeleton state to copy from
|
|
145
|
+
template <typename T2>
|
|
146
|
+
void copy(const SkeletonStateT<T2>& rhs);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/// Computes the relative transform between two joints in a skeleton
|
|
150
|
+
///
|
|
151
|
+
/// This transform maps points from joint A's local space to joint B's local space.
|
|
152
|
+
/// It is computed by finding the common ancestor of both joints and combining
|
|
153
|
+
/// the transforms along the path, which is more numerically stable than
|
|
154
|
+
/// computing (T_B)^{-1} * T_A directly.
|
|
155
|
+
///
|
|
156
|
+
/// @param jointA Source joint index
|
|
157
|
+
/// @param jointB Target joint index
|
|
158
|
+
/// @param referenceSkeleton The skeleton structure defining joint hierarchy
|
|
159
|
+
/// @param skelState Current state of the skeleton
|
|
160
|
+
/// @return Transform from joint A's local space to joint B's local space
|
|
161
|
+
template <typename T>
|
|
162
|
+
TransformT<T> transformAtoB(
|
|
163
|
+
size_t jointA,
|
|
164
|
+
size_t jointB,
|
|
165
|
+
const Skeleton& referenceSkeleton,
|
|
166
|
+
const SkeletonStateT<T>& skelState);
|
|
167
|
+
|
|
168
|
+
/// Invert the skeleton state (global transforms in world space) back to joint parameters (Euler
|
|
169
|
+
/// angles in local space). Note that this conversion is not unique due to the non-uniqueness of
|
|
170
|
+
/// Euler angle conversion.
|
|
171
|
+
template <typename T>
|
|
172
|
+
[[nodiscard]] JointParametersT<T> skeletonStateToJointParameters(
|
|
173
|
+
const SkeletonStateT<T>& state,
|
|
174
|
+
const Skeleton& skeleton);
|
|
175
|
+
|
|
176
|
+
template <typename T>
|
|
177
|
+
[[nodiscard]] JointParametersT<T> skeletonStateToJointParameters(
|
|
178
|
+
const TransformListT<T>& state,
|
|
179
|
+
const Skeleton& skeleton);
|
|
180
|
+
|
|
181
|
+
/// Converts skeleton state back to joint parameters, respecting active joint parameter constraints.
|
|
182
|
+
///
|
|
183
|
+
/// This function addresses the limitation of the original `skeletonStateToJointParameters` which
|
|
184
|
+
/// always uses 3-axis Euler rotations. Many joints only support 1-axis or 2-axis rotations, so
|
|
185
|
+
/// this function uses the provided `activeJointParams` to determine how many rotation axes are
|
|
186
|
+
/// active for each joint and applies the appropriate conversion method:
|
|
187
|
+
/// - 0 active rotation axes: Sets all rotation parameters to zero
|
|
188
|
+
/// - 1 active rotation axis: Uses `rotationMatrixToOneAxisEuler`
|
|
189
|
+
/// - 2 active rotation axes: Uses `rotationMatrixToTwoAxisEuler`
|
|
190
|
+
/// - 3 active rotation axes: Uses the standard 3-axis Euler conversion
|
|
191
|
+
///
|
|
192
|
+
/// @tparam T The scalar type (float or double)
|
|
193
|
+
/// @param[in] state The skeleton state to convert
|
|
194
|
+
/// @param[in] skeleton The skeleton defining joint hierarchy and properties
|
|
195
|
+
/// @param[in] activeJointParams Boolean array indicating which joint parameters are active.
|
|
196
|
+
/// Size should be skeleton.joints.size() * kParametersPerJoint
|
|
197
|
+
/// @return Joint parameters with rotations respecting the active parameter constraints
|
|
198
|
+
template <typename T>
|
|
199
|
+
[[nodiscard]] JointParametersT<T> skeletonStateToJointParametersRespectingActiveParameters(
|
|
200
|
+
const SkeletonStateT<T>& state,
|
|
201
|
+
const Skeleton& skeleton,
|
|
202
|
+
const VectorX<bool>& activeJointParams);
|
|
203
|
+
|
|
204
|
+
/// Converts transform list back to joint parameters, respecting active joint parameter constraints.
|
|
205
|
+
///
|
|
206
|
+
/// This function addresses the limitation of the original `skeletonStateToJointParameters` which
|
|
207
|
+
/// always uses 3-axis Euler rotations. Many joints only support 1-axis or 2-axis rotations, so
|
|
208
|
+
/// this function uses the provided `activeJointParams` to determine how many rotation axes are
|
|
209
|
+
/// active for each joint and applies the appropriate conversion method:
|
|
210
|
+
/// - 0 active rotation axes: Sets all rotation parameters to zero
|
|
211
|
+
/// - 1 active rotation axis: Uses `rotationMatrixToOneAxisEuler`
|
|
212
|
+
/// - 2 active rotation axes: Uses `rotationMatrixToTwoAxisEuler`
|
|
213
|
+
/// - 3 active rotation axes: Uses the standard 3-axis Euler conversion
|
|
214
|
+
///
|
|
215
|
+
/// @tparam T The scalar type (float or double)
|
|
216
|
+
/// @param[in] state The transform list to convert
|
|
217
|
+
/// @param[in] skeleton The skeleton defining joint hierarchy and properties
|
|
218
|
+
/// @param[in] activeJointParams Boolean array indicating which joint parameters are active.
|
|
219
|
+
/// Size should be skeleton.joints.size() * kParametersPerJoint
|
|
220
|
+
/// @return Joint parameters with rotations respecting the active parameter constraints
|
|
221
|
+
template <typename T>
|
|
222
|
+
[[nodiscard]] JointParametersT<T> skeletonStateToJointParametersRespectingActiveParameters(
|
|
223
|
+
const TransformListT<T>& state,
|
|
224
|
+
const Skeleton& skeleton,
|
|
225
|
+
const VectorX<bool>& activeJointParams);
|
|
226
|
+
|
|
227
|
+
} // namespace momentum
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/types.h>
|
|
11
|
+
#include <momentum/math/types.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
inline constexpr float kDefaultExtrapolateFactor = 0.8f;
|
|
16
|
+
inline constexpr float kDefaultExtrapolateMaxDelta = 0.4f; // ~23 degrees
|
|
17
|
+
|
|
18
|
+
/// Extrapolates model parameters by first clamping the difference between current and previous
|
|
19
|
+
/// parameters to the range [-maxDelta, maxDelta], and then scaling this clamped difference by
|
|
20
|
+
/// `factor`. Returns the current parameters when sizes mismatch.
|
|
21
|
+
[[nodiscard]] ModelParameters extrapolateModelParameters(
|
|
22
|
+
const ModelParameters& previous,
|
|
23
|
+
const ModelParameters& current,
|
|
24
|
+
float factor = kDefaultExtrapolateFactor,
|
|
25
|
+
float maxDelta = kDefaultExtrapolateMaxDelta);
|
|
26
|
+
|
|
27
|
+
/// Extrapolates model parameters considering active parameters. The extrapolation is done by first
|
|
28
|
+
/// clamping the difference between current and previous parameters to the range [-maxDelta,
|
|
29
|
+
/// maxDelta] for each active parameter, and then scaling this clamped difference by `factor`.
|
|
30
|
+
/// Returns the current parameters when sizes mismatch.
|
|
31
|
+
[[nodiscard]] ModelParameters extrapolateModelParameters(
|
|
32
|
+
const ModelParameters& previous,
|
|
33
|
+
const ModelParameters& current,
|
|
34
|
+
const ParameterSet& activeParams,
|
|
35
|
+
float factor = kDefaultExtrapolateFactor,
|
|
36
|
+
float maxDelta = kDefaultExtrapolateMaxDelta);
|
|
37
|
+
|
|
38
|
+
} // namespace momentum
|