pymomentum-cpu 0.1.82.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.
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-312-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-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 +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,181 @@
|
|
|
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
|
+
} // 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
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
#include <cstdint>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
/// Maximum number of joints that can influence a single vertex
|
|
19
|
+
inline static constexpr uint32_t kMaxSkinJoints = 8;
|
|
20
|
+
|
|
21
|
+
/// Matrix type for storing joint indices that influence each vertex
|
|
22
|
+
///
|
|
23
|
+
/// Each row represents a vertex, and each column represents a joint influence.
|
|
24
|
+
/// The matrix has a fixed number of columns (kMaxSkinJoints) and a dynamic number of rows.
|
|
25
|
+
using IndexMatrix =
|
|
26
|
+
Eigen::Matrix<uint32_t, Eigen::Dynamic, kMaxSkinJoints, Eigen::AutoAlign | Eigen::RowMajor>;
|
|
27
|
+
|
|
28
|
+
/// Matrix type for storing weights of joint influences on each vertex
|
|
29
|
+
///
|
|
30
|
+
/// Each row represents a vertex, and each column represents the weight of a joint influence.
|
|
31
|
+
/// The matrix has a fixed number of columns (kMaxSkinJoints) and a dynamic number of rows.
|
|
32
|
+
using WeightMatrix =
|
|
33
|
+
Eigen::Matrix<float, Eigen::Dynamic, kMaxSkinJoints, Eigen::AutoAlign | Eigen::RowMajor>;
|
|
34
|
+
|
|
35
|
+
/// Stores skinning weights and joint indices for character mesh deformation
|
|
36
|
+
struct SkinWeights {
|
|
37
|
+
/// Joint indices that influence each vertex
|
|
38
|
+
///
|
|
39
|
+
/// Each row corresponds to a vertex, and each column contains the index of a joint
|
|
40
|
+
/// that influences that vertex. Unused influences are set to 0.
|
|
41
|
+
IndexMatrix index;
|
|
42
|
+
|
|
43
|
+
/// Weight of each joint's influence on each vertex
|
|
44
|
+
///
|
|
45
|
+
/// Each row corresponds to a vertex, and each column contains the weight of a joint's
|
|
46
|
+
/// influence on that vertex. Weights for a vertex typically sum to 1.0. Unused influences
|
|
47
|
+
/// are set to 0.0.
|
|
48
|
+
WeightMatrix weight;
|
|
49
|
+
|
|
50
|
+
/// Sets the skin weights from vectors of joint indices and weights
|
|
51
|
+
///
|
|
52
|
+
/// @param ind Vector of vectors containing joint indices for each vertex
|
|
53
|
+
/// @param wgt Vector of vectors containing weights for each vertex
|
|
54
|
+
/// @throws If ind.size() != wgt.size() (via MT_CHECK)
|
|
55
|
+
void set(const std::vector<std::vector<size_t>>& ind, const std::vector<std::vector<float>>& wgt);
|
|
56
|
+
|
|
57
|
+
/// Compares two SkinWeights objects for equality
|
|
58
|
+
///
|
|
59
|
+
/// Two SkinWeights objects are considered equal if their index and weight matrices
|
|
60
|
+
/// are approximately equal (using Eigen's isApprox method).
|
|
61
|
+
///
|
|
62
|
+
/// @param skinWeights The SkinWeights object to compare with
|
|
63
|
+
/// @return True if the objects are equal, false otherwise
|
|
64
|
+
bool operator==(const SkinWeights& skinWeights) const;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
} // namespace momentum
|
|
@@ -0,0 +1,80 @@
|
|
|
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/skin_weights.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/math/utility.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
/// A skinned locator is a locator which can be attached to multiple bones.
|
|
17
|
+
/// The locator's position is defined relative to the rest pose of the character (and not
|
|
18
|
+
/// local to a single parent bone as with a regular Locator) and its position at runtime is
|
|
19
|
+
/// determined by blending the skinning transforms (using LBS).
|
|
20
|
+
///
|
|
21
|
+
/// The purpose of the SkinnedLocator is to model mocap markers attached to the actor's skin:
|
|
22
|
+
/// the location of points on e.g. the shoulder is more accurately modeled by blending
|
|
23
|
+
/// multiple transforms. In addition, the locator can be constrained to slide along the
|
|
24
|
+
/// surface of the mesh using e.g. the SkinnedLocatorTriangleErrorFunction.
|
|
25
|
+
///
|
|
26
|
+
/// Locators can be used for various purposes such as tracking specific points
|
|
27
|
+
/// on a character, defining constraints, or serving as targets for inverse kinematics.
|
|
28
|
+
struct SkinnedLocator {
|
|
29
|
+
/// Name identifier for the locator
|
|
30
|
+
std::string name;
|
|
31
|
+
|
|
32
|
+
/// Index of the parent joints in the skeleton. The final position of the locator
|
|
33
|
+
/// is determined by blending the transforms from each (valid) parent.
|
|
34
|
+
Eigen::Matrix<uint32_t, kMaxSkinJoints, 1> parents;
|
|
35
|
+
|
|
36
|
+
/// Skinning weight for each parent joint.
|
|
37
|
+
Eigen::Matrix<float, kMaxSkinJoints, 1> skinWeights;
|
|
38
|
+
|
|
39
|
+
/// Position relative to rest pose of the character
|
|
40
|
+
Vector3f position;
|
|
41
|
+
|
|
42
|
+
/// Influence weight of this locator when used in constraints
|
|
43
|
+
float weight;
|
|
44
|
+
|
|
45
|
+
/// Creates a locator with the specified properties
|
|
46
|
+
///
|
|
47
|
+
/// @param name Identifier for the locator
|
|
48
|
+
/// @param parents Indices of the parent joints
|
|
49
|
+
/// @param weights Skinning weights for the parent joints
|
|
50
|
+
/// @param weight Influence weight in constraints
|
|
51
|
+
SkinnedLocator(
|
|
52
|
+
const std::string& name = "uninitialized",
|
|
53
|
+
const Eigen::Matrix<uint32_t, kMaxSkinJoints, 1>& parents =
|
|
54
|
+
Eigen::Matrix<uint32_t, kMaxSkinJoints, 1>::Zero(),
|
|
55
|
+
const Eigen::Matrix<float, kMaxSkinJoints, 1>& skinWeights =
|
|
56
|
+
Eigen::Matrix<float, kMaxSkinJoints, 1>::Zero(),
|
|
57
|
+
const Vector3f& position = Vector3f::Zero(),
|
|
58
|
+
const float weight = 1.0f)
|
|
59
|
+
: name(name),
|
|
60
|
+
parents(parents),
|
|
61
|
+
skinWeights(skinWeights),
|
|
62
|
+
position(position),
|
|
63
|
+
weight(weight) {}
|
|
64
|
+
|
|
65
|
+
/// Compares two locators for equality, using approximate comparison for floating-point values
|
|
66
|
+
///
|
|
67
|
+
/// @param locator The locator to compare with
|
|
68
|
+
/// @return True if all properties are equal (or approximately equal for floating-point values)
|
|
69
|
+
inline bool operator==(const SkinnedLocator& locator) const {
|
|
70
|
+
return (
|
|
71
|
+
(name == locator.name) && (parents == locator.parents) &&
|
|
72
|
+
skinWeights.isApprox(locator.skinWeights) && position.isApprox(locator.position) &&
|
|
73
|
+
isApprox(weight, locator.weight));
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/// A collection of locators attached to a skeleton
|
|
78
|
+
using SkinnedLocatorList = std::vector<SkinnedLocator>;
|
|
79
|
+
|
|
80
|
+
} // namespace momentum
|
|
@@ -0,0 +1,202 @@
|
|
|
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
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
// Momentum specific Eigen defines
|
|
12
|
+
//------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
#include <momentum/character/fwd.h>
|
|
15
|
+
|
|
16
|
+
#include <Eigen/Dense>
|
|
17
|
+
|
|
18
|
+
#include <array>
|
|
19
|
+
#include <string>
|
|
20
|
+
#include <tuple>
|
|
21
|
+
#include <vector>
|
|
22
|
+
|
|
23
|
+
namespace momentum {
|
|
24
|
+
|
|
25
|
+
inline constexpr size_t kParametersPerJoint = 7;
|
|
26
|
+
enum JointParameterNames { TX = 0, TY, TZ, RX, RY, RZ, SC };
|
|
27
|
+
inline constexpr std::array<const char*, kParametersPerJoint>
|
|
28
|
+
kJointParameterNames{"tx", "ty", "tz", "rx", "ry", "rz", "sc"};
|
|
29
|
+
|
|
30
|
+
template <typename T>
|
|
31
|
+
using JointVectorT = Eigen::Matrix<T, kParametersPerJoint, 1>;
|
|
32
|
+
using JointVector = JointVectorT<float>;
|
|
33
|
+
|
|
34
|
+
template <template <typename> typename Derived, typename EigenType>
|
|
35
|
+
struct EigenStrongType {
|
|
36
|
+
using Scalar = typename EigenType::Scalar;
|
|
37
|
+
|
|
38
|
+
EigenType v;
|
|
39
|
+
|
|
40
|
+
EigenStrongType() : v() {}
|
|
41
|
+
|
|
42
|
+
explicit EigenStrongType(::Eigen::Index size) : v(size) {}
|
|
43
|
+
|
|
44
|
+
template <typename Other>
|
|
45
|
+
/* implicit */ EigenStrongType(const ::Eigen::EigenBase<Other>& o) : v(o) {}
|
|
46
|
+
|
|
47
|
+
template <typename Other>
|
|
48
|
+
/* implicit */ EigenStrongType(::Eigen::EigenBase<Other>&& o) : v(std::move(o)) {}
|
|
49
|
+
|
|
50
|
+
template <typename Other>
|
|
51
|
+
EigenStrongType& operator=(const ::Eigen::EigenBase<Other>& o) {
|
|
52
|
+
v = o;
|
|
53
|
+
return *this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template <typename Other>
|
|
57
|
+
EigenStrongType& operator=(::Eigen::EigenBase<Other>&& o) {
|
|
58
|
+
v = std::move(o);
|
|
59
|
+
return *this;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
EIGEN_DEVICE_FUNC
|
|
63
|
+
EIGEN_STRONG_INLINE
|
|
64
|
+
auto&& operator()(::Eigen::Index i) {
|
|
65
|
+
return v(i);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
EIGEN_DEVICE_FUNC
|
|
69
|
+
EIGEN_STRONG_INLINE
|
|
70
|
+
auto&& operator()(::Eigen::Index i) const {
|
|
71
|
+
return v(i);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
EIGEN_DEVICE_FUNC
|
|
75
|
+
EIGEN_STRONG_INLINE
|
|
76
|
+
auto&& operator[](::Eigen::Index i) {
|
|
77
|
+
return v[i];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
EIGEN_DEVICE_FUNC
|
|
81
|
+
EIGEN_STRONG_INLINE
|
|
82
|
+
auto&& operator[](::Eigen::Index i) const {
|
|
83
|
+
return v[i];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
template <typename NewScalar>
|
|
87
|
+
[[nodiscard]] EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived<NewScalar> cast() const {
|
|
88
|
+
return v.template cast<NewScalar>();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[[nodiscard]] EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE auto size() const {
|
|
92
|
+
return v.size();
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
EIGEN_DEVICE_FUNC
|
|
96
|
+
static Derived<Scalar> Zero(::Eigen::Index size) {
|
|
97
|
+
return Derived<Scalar>(EigenType::Zero(size));
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// a vector describing model parameters
|
|
102
|
+
template <typename T>
|
|
103
|
+
struct ModelParametersT : public EigenStrongType<ModelParametersT, ::Eigen::VectorX<T>> {
|
|
104
|
+
using t = ::Eigen::VectorX<T>;
|
|
105
|
+
using EigenStrongType<ModelParametersT, t>::EigenStrongType;
|
|
106
|
+
using EigenStrongType<ModelParametersT, t>::operator=;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
using ModelParameters = ModelParametersT<float>;
|
|
110
|
+
using ModelParametersd = ModelParametersT<double>;
|
|
111
|
+
|
|
112
|
+
template <typename T>
|
|
113
|
+
struct BlendWeightsT : public EigenStrongType<BlendWeightsT, ::Eigen::VectorX<T>> {
|
|
114
|
+
using t = ::Eigen::VectorX<T>;
|
|
115
|
+
using EigenStrongType<BlendWeightsT, t>::EigenStrongType;
|
|
116
|
+
using EigenStrongType<BlendWeightsT, t>::operator=;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
using BlendWeights = BlendWeightsT<float>;
|
|
120
|
+
using BlendWeightsd = BlendWeightsT<double>;
|
|
121
|
+
|
|
122
|
+
static_assert(
|
|
123
|
+
sizeof(BlendWeights) == sizeof(Eigen::VectorXf),
|
|
124
|
+
"Missing Empty Base Class Optimization");
|
|
125
|
+
static_assert(
|
|
126
|
+
sizeof(BlendWeightsd) == sizeof(Eigen::VectorXd),
|
|
127
|
+
"Missing Empty Base Class Optimization");
|
|
128
|
+
|
|
129
|
+
// A vector describing joint parameters, the vector has size numSkeletonJoints * kParametersPerJoint
|
|
130
|
+
// e.g. in case of a character body model with 159 joints, the joint parameters vector will have the
|
|
131
|
+
// size 159 * 7 = 1113
|
|
132
|
+
template <typename T>
|
|
133
|
+
struct JointParametersT : public EigenStrongType<JointParametersT, ::Eigen::VectorX<T>> {
|
|
134
|
+
using t = ::Eigen::VectorX<T>;
|
|
135
|
+
using EigenStrongType<JointParametersT, t>::EigenStrongType;
|
|
136
|
+
using EigenStrongType<JointParametersT, t>::operator=;
|
|
137
|
+
|
|
138
|
+
[[nodiscard]] static ::Eigen::Vector3<T> fromRotationMatrix(const ::Eigen::Matrix3<T>& m) {
|
|
139
|
+
// From JointState::set(), we can see that localRotation = rz * ry * rx, but the order in
|
|
140
|
+
// JointParameters is [rx, ry, rz]. Therefore, the conversion should be
|
|
141
|
+
// rotationMatrixToEulerZYX.reverse.
|
|
142
|
+
return rotationMatrixToEulerZYX(m).reverse();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
[[nodiscard]] static ::Eigen::Vector3<T> fromQuaternion(const ::Eigen::Quaternion<T>& q) {
|
|
146
|
+
return fromRotationMatrix(q.toRotationMatrix());
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
using JointParameters = JointParametersT<float>;
|
|
151
|
+
using JointParametersd = JointParametersT<double>;
|
|
152
|
+
|
|
153
|
+
static_assert(
|
|
154
|
+
sizeof(JointParameters) == sizeof(Eigen::VectorXf),
|
|
155
|
+
"Missing Empty Base Class Optimization");
|
|
156
|
+
static_assert(
|
|
157
|
+
sizeof(JointParametersd) == sizeof(Eigen::VectorXd),
|
|
158
|
+
"Missing Empty Base Class Optimization");
|
|
159
|
+
|
|
160
|
+
template <typename T>
|
|
161
|
+
using JointStateListT = std::vector<JointStateT<T>>;
|
|
162
|
+
|
|
163
|
+
using JointStateList = JointStateListT<float>;
|
|
164
|
+
using JointStateListd = JointStateListT<double>;
|
|
165
|
+
|
|
166
|
+
/// A struct that encapsulates both pose and identity parameters for a character.
|
|
167
|
+
///
|
|
168
|
+
/// @note This structure implies, but does not enforce, that the pose vector should contain only
|
|
169
|
+
/// pose information with identity-related elements set to zero. Similarly, the identity vector
|
|
170
|
+
/// should exclusively contain bone length information, excluding any pose data.
|
|
171
|
+
template <typename T>
|
|
172
|
+
struct CharacterParametersT {
|
|
173
|
+
/// The model parameter vector representing the pose of the character. This vector should have a
|
|
174
|
+
/// size of numModelParams.
|
|
175
|
+
|
|
176
|
+
ModelParametersT<T> pose;
|
|
177
|
+
/// The joint parameter vector representing the unique bone lengths of the character, defining
|
|
178
|
+
/// the character's identity. This vector should have a size of numSkeletonJoints *
|
|
179
|
+
/// kParametersPerJoint.
|
|
180
|
+
JointParametersT<T> offsets;
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
using CharacterParameters = CharacterParametersT<float>;
|
|
184
|
+
using CharacterParametersd = CharacterParametersT<double>;
|
|
185
|
+
|
|
186
|
+
// The tuple of model parameter names and corresponding matrix representing the pose in a sequence
|
|
187
|
+
// of frames The poses are ordered in columns and the expected shape of motion matrix is
|
|
188
|
+
// (numModelParams, numFrames)
|
|
189
|
+
|
|
190
|
+
using MotionParameters = std::tuple<std::vector<std::string>, Eigen::MatrixXf>;
|
|
191
|
+
|
|
192
|
+
// The tuple containing the skeleton joint names and identity parameters. The identity parameters
|
|
193
|
+
// represent bone offsets and bone scales that are added to the joint states (local transform for
|
|
194
|
+
// each joint wrt parent joint) during FK step The identity parameters are expressed as a vector of
|
|
195
|
+
// size (numSkeletonJoints * momentum::kParametersPerJoint)
|
|
196
|
+
|
|
197
|
+
using IdentityParameters = std::tuple<std::vector<std::string>, Eigen::VectorXf>;
|
|
198
|
+
|
|
199
|
+
// define static kInvalidIndex for size_t
|
|
200
|
+
inline constexpr size_t kInvalidIndex = std::numeric_limits<size_t>::max();
|
|
201
|
+
|
|
202
|
+
} // namespace momentum
|