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,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/types.h>
|
|
11
|
+
#include <momentum/math/constants.h>
|
|
12
|
+
#include <momentum/math/types.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
/// A simplified version of a Maya joint with pre-rotation only (no post-rotation).
|
|
17
|
+
template <typename T>
|
|
18
|
+
struct JointT {
|
|
19
|
+
using Scalar = T;
|
|
20
|
+
|
|
21
|
+
/// Joint name
|
|
22
|
+
std::string name{"uninitialized"};
|
|
23
|
+
|
|
24
|
+
/// Index of the parent joint in the skeleton hierarchy
|
|
25
|
+
size_t parent{kInvalidIndex};
|
|
26
|
+
|
|
27
|
+
// TODO: does it make sense to save its own index too?
|
|
28
|
+
|
|
29
|
+
/// Pre-rotation matrix from its parent's axes to its own axes.
|
|
30
|
+
/// @note: Braces initialization is avoided due to issues with CUDA 11.
|
|
31
|
+
Quaternion<T> preRotation = Quaternion<T>::Identity();
|
|
32
|
+
|
|
33
|
+
/// The constant translation offset from the parent joint to this joint's origin.
|
|
34
|
+
Vector3<T> translationOffset = Vector3<T>::Zero();
|
|
35
|
+
|
|
36
|
+
/// Checks if the current joint is approximately equal to the provided joint.
|
|
37
|
+
[[nodiscard]] bool isApprox(
|
|
38
|
+
const JointT<T>& joint,
|
|
39
|
+
const T& rotTol = Eps<T>(1e-4, 1e-10),
|
|
40
|
+
const T& tranTol = Eigen::NumTraits<Scalar>::dummy_precision()) const {
|
|
41
|
+
if (name != joint.name) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (parent != joint.parent) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!preRotation.toRotationMatrix().isApprox(joint.preRotation.toRotationMatrix(), rotTol)) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!translationOffset.isApprox(joint.translationOffset, tranTol)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// Casts the current joint to another scalar type.
|
|
61
|
+
template <typename U>
|
|
62
|
+
[[nodiscard]] auto cast() const {
|
|
63
|
+
if constexpr (std::is_same_v<T, U>) {
|
|
64
|
+
return *this;
|
|
65
|
+
} else {
|
|
66
|
+
JointT<U> newJoint;
|
|
67
|
+
newJoint.name = name;
|
|
68
|
+
newJoint.parent = parent;
|
|
69
|
+
newJoint.preRotation = preRotation.template cast<U>();
|
|
70
|
+
newJoint.translationOffset = translationOffset.template cast<U>();
|
|
71
|
+
return newJoint;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/// A list of joints (e.g., of a skeleton).
|
|
77
|
+
template <typename T>
|
|
78
|
+
using JointListT = std::vector<JointT<T>>;
|
|
79
|
+
using JointList = JointListT<float>;
|
|
80
|
+
using JointListd = JointListT<double>;
|
|
81
|
+
|
|
82
|
+
} // namespace momentum
|
|
@@ -0,0 +1,241 @@
|
|
|
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/types.h>
|
|
12
|
+
#include <momentum/math/transform.h>
|
|
13
|
+
#include <momentum/math/types.h>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
/// Represents the state of a joint with local and global transformations.
|
|
18
|
+
///
|
|
19
|
+
/// Joint transform hierarchy is defined as:
|
|
20
|
+
/// WorldTransform = ParentWorldTransform * Tz * Ty * Tx * Rpre * R * S
|
|
21
|
+
///
|
|
22
|
+
/// Where:
|
|
23
|
+
/// - Tx, Ty, Tz are translations along each axis
|
|
24
|
+
/// - Rpre is the pre-rotation from the joint definition
|
|
25
|
+
/// - R is the joint rotation (applied in order: rz * ry * rx)
|
|
26
|
+
/// - S is the uniform scale factor
|
|
27
|
+
///
|
|
28
|
+
/// Each joint has 7 parameters: 3 translation, 3 rotation, and 1 scale.
|
|
29
|
+
template <typename T>
|
|
30
|
+
struct JointStateT {
|
|
31
|
+
/// Local transformation relative to parent joint
|
|
32
|
+
///
|
|
33
|
+
/// Defined by the joint parameters (translation, rotation, scale)
|
|
34
|
+
TransformT<T> localTransform;
|
|
35
|
+
|
|
36
|
+
/// Global transformation in world space
|
|
37
|
+
///
|
|
38
|
+
/// Combines parent transformations with local transformation
|
|
39
|
+
TransformT<T> transform;
|
|
40
|
+
|
|
41
|
+
/// Translation axes in global space
|
|
42
|
+
///
|
|
43
|
+
/// Each column represents one translation axis (X, Y, Z) in global coordinates
|
|
44
|
+
Matrix3<T> translationAxis;
|
|
45
|
+
|
|
46
|
+
/// Rotation axes in global space
|
|
47
|
+
///
|
|
48
|
+
/// Each column represents one rotation axis (X, Y, Z) in global coordinates
|
|
49
|
+
Matrix3<T> rotationAxis;
|
|
50
|
+
|
|
51
|
+
/// Indicates if derivative data needs recomputation
|
|
52
|
+
///
|
|
53
|
+
/// When true, derivative methods should not be called as they may return invalid results
|
|
54
|
+
bool derivDirty = true;
|
|
55
|
+
|
|
56
|
+
/// Updates joint state based on joint definition and parameters
|
|
57
|
+
///
|
|
58
|
+
/// Recursively computes all transformations from parent to child, including
|
|
59
|
+
/// local and global transforms, and optionally derivative information.
|
|
60
|
+
///
|
|
61
|
+
/// @param joint The joint definition containing offset and pre-rotation
|
|
62
|
+
/// @param parameters The 7 joint parameters [tx, ty, tz, rx, ry, rz, scale]
|
|
63
|
+
/// @param parentState Optional parent joint state for hierarchical transformations
|
|
64
|
+
/// @param computeDeriv Whether to compute derivative information (translation/rotation axes)
|
|
65
|
+
void set(
|
|
66
|
+
const JointT<T>& joint,
|
|
67
|
+
const JointVectorT<T>& parameters,
|
|
68
|
+
const JointStateT<T>* parentState = nullptr,
|
|
69
|
+
bool computeDeriv = true) noexcept;
|
|
70
|
+
|
|
71
|
+
/// Calculates the derivative of a point with respect to rotation around a specific axis
|
|
72
|
+
///
|
|
73
|
+
/// @param index The rotation axis index (0=X, 1=Y, 2=Z)
|
|
74
|
+
/// @param ref The reference point in global space
|
|
75
|
+
/// @return The derivative vector
|
|
76
|
+
[[nodiscard]] Vector3<T> getRotationDerivative(size_t index, const Vector3<T>& ref) const;
|
|
77
|
+
|
|
78
|
+
/// Calculates the derivative with respect to translation along a specific axis
|
|
79
|
+
///
|
|
80
|
+
/// @param index The translation axis index (0=X, 1=Y, 2=Z)
|
|
81
|
+
/// @return The derivative vector
|
|
82
|
+
[[nodiscard]] Vector3<T> getTranslationDerivative(size_t index) const;
|
|
83
|
+
|
|
84
|
+
/// Calculates the derivative of a point with respect to uniform scaling
|
|
85
|
+
///
|
|
86
|
+
/// @param ref The reference point in global space
|
|
87
|
+
/// @return The derivative vector
|
|
88
|
+
[[nodiscard]] Vector3<T> getScaleDerivative(const Vector3<T>& ref) const noexcept;
|
|
89
|
+
|
|
90
|
+
/// Copies state from another JointState with potentially different scalar type
|
|
91
|
+
///
|
|
92
|
+
/// @tparam T2 Source scalar type
|
|
93
|
+
/// @param rhs Source joint state to copy from
|
|
94
|
+
template <typename T2>
|
|
95
|
+
void set(const JointStateT<T2>& rhs);
|
|
96
|
+
|
|
97
|
+
/// Access the joint's local rotation quaternion
|
|
98
|
+
[[nodiscard]] const Quaternion<T>& localRotation() const {
|
|
99
|
+
return localTransform.rotation;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/// Access the joint's local rotation quaternion (mutable)
|
|
103
|
+
Quaternion<T>& localRotation() {
|
|
104
|
+
return localTransform.rotation;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Access the joint's local translation vector
|
|
108
|
+
[[nodiscard]] const Vector3<T>& localTranslation() const {
|
|
109
|
+
return localTransform.translation;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Access the joint's local translation vector (mutable)
|
|
113
|
+
Vector3<T>& localTranslation() {
|
|
114
|
+
return localTransform.translation;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// Access the joint's local scale factor
|
|
118
|
+
///
|
|
119
|
+
/// This scale propagates to all descendant joints
|
|
120
|
+
[[nodiscard]] const T& localScale() const {
|
|
121
|
+
return localTransform.scale;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/// Access the joint's local scale factor (mutable)
|
|
125
|
+
T& localScale() {
|
|
126
|
+
return localTransform.scale;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/// Access the joint's global rotation quaternion
|
|
130
|
+
[[nodiscard]] const Quaternion<T>& rotation() const {
|
|
131
|
+
return transform.rotation;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/// Access the joint's global rotation quaternion (mutable)
|
|
135
|
+
Quaternion<T>& rotation() {
|
|
136
|
+
return transform.rotation;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/// Access the joint's global position vector
|
|
140
|
+
[[nodiscard]] const Vector3<T>& translation() const {
|
|
141
|
+
return transform.translation;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/// Access the joint's global position vector (mutable)
|
|
145
|
+
Vector3<T>& translation() {
|
|
146
|
+
return transform.translation;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// Access the X component of the global position
|
|
150
|
+
[[nodiscard]] const T& x() const {
|
|
151
|
+
return transform.translation.x();
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/// Access the X component of the global position (mutable)
|
|
155
|
+
T& x() {
|
|
156
|
+
return transform.translation.x();
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/// Access the Y component of the global position
|
|
160
|
+
[[nodiscard]] const T& y() const {
|
|
161
|
+
return transform.translation.y();
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/// Access the Y component of the global position (mutable)
|
|
165
|
+
T& y() {
|
|
166
|
+
return transform.translation.y();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/// Access the Z component of the global position
|
|
170
|
+
[[nodiscard]] const T& z() const {
|
|
171
|
+
return transform.translation.z();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/// Access the Z component of the global position (mutable)
|
|
175
|
+
T& z() {
|
|
176
|
+
return transform.translation.z();
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/// Access the W component of the global rotation quaternion
|
|
180
|
+
[[nodiscard]] const T& quatW() const {
|
|
181
|
+
return transform.rotation.w();
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/// Access the W component of the global rotation quaternion (mutable)
|
|
185
|
+
T& quatW() {
|
|
186
|
+
return transform.rotation.w();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/// Access the X component of the global rotation quaternion
|
|
190
|
+
[[nodiscard]] const T& quatX() const {
|
|
191
|
+
return transform.rotation.x();
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/// Access the X component of the global rotation quaternion (mutable)
|
|
195
|
+
T& quatX() {
|
|
196
|
+
return transform.rotation.x();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/// Access the Y component of the global rotation quaternion
|
|
200
|
+
[[nodiscard]] const T& quatY() const {
|
|
201
|
+
return transform.rotation.y();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/// Access the Y component of the global rotation quaternion (mutable)
|
|
205
|
+
T& quatY() {
|
|
206
|
+
return transform.rotation.y();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/// Access the Z component of the global rotation quaternion
|
|
210
|
+
[[nodiscard]] const T& quatZ() const {
|
|
211
|
+
return transform.rotation.z();
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/// Access the Z component of the global rotation quaternion (mutable)
|
|
215
|
+
T& quatZ() {
|
|
216
|
+
return transform.rotation.z();
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/// Access the joint's global scale factor
|
|
220
|
+
///
|
|
221
|
+
/// This is the cumulative scale from all parent joints
|
|
222
|
+
[[nodiscard]] const T& scale() const {
|
|
223
|
+
return transform.scale;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/// Access the joint's global scale factor (mutable)
|
|
227
|
+
T& scale() {
|
|
228
|
+
return transform.scale;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/// Structure describing the state of all joints in a skeleton
|
|
235
|
+
template <typename T>
|
|
236
|
+
using JointStateListT = std::vector<JointStateT<T>>;
|
|
237
|
+
|
|
238
|
+
using JointState = JointStateT<float>;
|
|
239
|
+
using JointStateList = JointStateListT<float>;
|
|
240
|
+
|
|
241
|
+
} // namespace momentum
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/math/fwd.h>
|
|
13
|
+
#include <momentum/math/types.h>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
/// @file linear_skinning.h
|
|
18
|
+
/// Functions for linear blend skinning (Skeletal Subspace Deformation)
|
|
19
|
+
///
|
|
20
|
+
/// Linear blend skinning (LBS), also known as Skeletal Subspace Deformation (SSD),
|
|
21
|
+
/// is a technique used in character animation to deform a mesh based on an underlying
|
|
22
|
+
/// skeleton. Each vertex in the mesh is influenced by one or more joints, with weights
|
|
23
|
+
/// determining how much influence each joint has on the vertex's final position.
|
|
24
|
+
///
|
|
25
|
+
/// This file provides functions to:
|
|
26
|
+
/// - Apply forward skinning (transform vertices from bind pose to animated pose)
|
|
27
|
+
/// - Apply inverse skinning (transform vertices from animated pose back to bind pose)
|
|
28
|
+
/// - Compute inverse skinning transformations for specific vertices
|
|
29
|
+
///
|
|
30
|
+
/// Key concepts:
|
|
31
|
+
/// - Bind pose: The reference pose of the character, where skin weights are defined
|
|
32
|
+
/// - Skin weights: Per-vertex weights defining how much influence each joint has
|
|
33
|
+
/// - Joint transformations: Current transformations of the skeleton's joints
|
|
34
|
+
/// - Forward skinning: Applying joint transformations to deform the mesh
|
|
35
|
+
/// - Inverse skinning: Reversing the deformation to return to bind pose
|
|
36
|
+
|
|
37
|
+
/// Applies forward SSD (linear blend skinning) to points, returning new points
|
|
38
|
+
///
|
|
39
|
+
/// This overload transforms individual points and returns a new vector of transformed points.
|
|
40
|
+
/// Use this when you need to transform arbitrary points without modifying a mesh.
|
|
41
|
+
///
|
|
42
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
43
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
44
|
+
/// @param points Input points to transform
|
|
45
|
+
/// @param state Current skeleton state containing joint transformations
|
|
46
|
+
/// @return Vector of transformed points
|
|
47
|
+
template <typename T>
|
|
48
|
+
std::vector<Vector3<T>> applySSD(
|
|
49
|
+
const TransformationListT<T>& inverseBindPose,
|
|
50
|
+
const SkinWeights& skin,
|
|
51
|
+
typename DeduceSpanType<const Vector3<T>>::type points,
|
|
52
|
+
const SkeletonStateT<T>& state);
|
|
53
|
+
|
|
54
|
+
/// Applies forward SSD to a mesh using skeleton state, modifying output mesh
|
|
55
|
+
///
|
|
56
|
+
/// This overload transforms both vertices and normals of the mesh, writing results to outputMesh.
|
|
57
|
+
/// Use this when working with complete meshes and full skeleton state.
|
|
58
|
+
///
|
|
59
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
60
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
61
|
+
/// @param mesh Input mesh to transform
|
|
62
|
+
/// @param state Current skeleton state containing joint transformations
|
|
63
|
+
/// @param outputMesh Output mesh to store the transformed result
|
|
64
|
+
template <typename T>
|
|
65
|
+
void applySSD(
|
|
66
|
+
const TransformationListT<T>& inverseBindPose,
|
|
67
|
+
const SkinWeights& skin,
|
|
68
|
+
const MeshT<T>& mesh,
|
|
69
|
+
const SkeletonStateT<T>& state,
|
|
70
|
+
MeshT<T>& outputMesh);
|
|
71
|
+
|
|
72
|
+
/// Applies forward SSD to a mesh using raw joint state list, modifying output mesh
|
|
73
|
+
///
|
|
74
|
+
/// This overload accepts a JointStateList directly instead of a full SkeletonState.
|
|
75
|
+
/// Use this when you have joint transformations but not a complete skeleton state.
|
|
76
|
+
///
|
|
77
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
78
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
79
|
+
/// @param mesh Input mesh to transform
|
|
80
|
+
/// @param state List of joint states containing transformations
|
|
81
|
+
/// @param outputMesh Output mesh to store the transformed result
|
|
82
|
+
template <typename T>
|
|
83
|
+
void applySSD(
|
|
84
|
+
const TransformationListT<T>& inverseBindPose,
|
|
85
|
+
const SkinWeights& skin,
|
|
86
|
+
const MeshT<T>& mesh,
|
|
87
|
+
const JointStateListT<T>& state,
|
|
88
|
+
MeshT<T>& outputMesh);
|
|
89
|
+
|
|
90
|
+
/// Computes the inverse SSD transformation for a specific vertex
|
|
91
|
+
///
|
|
92
|
+
/// Returns a transformation matrix that converts from skinned space back to bind pose space.
|
|
93
|
+
/// This is useful for operations that need to work in the original bind pose space.
|
|
94
|
+
///
|
|
95
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
96
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
97
|
+
/// @param state Current skeleton state containing joint transformations
|
|
98
|
+
/// @param index Index of the vertex to compute inverse transformation for
|
|
99
|
+
/// @return Inverse transformation matrix for the specified vertex
|
|
100
|
+
Affine3f getInverseSSDTransformation(
|
|
101
|
+
const TransformationList& inverseBindPose,
|
|
102
|
+
const SkinWeights& skin,
|
|
103
|
+
const SkeletonState& state,
|
|
104
|
+
size_t index);
|
|
105
|
+
|
|
106
|
+
/// Applies inverse SSD to points, returning new points in bind pose space
|
|
107
|
+
///
|
|
108
|
+
/// This overload transforms points from skinned space back to bind pose space,
|
|
109
|
+
/// returning a new vector of transformed points.
|
|
110
|
+
///
|
|
111
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
112
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
113
|
+
/// @param points Input points to transform (in skinned space)
|
|
114
|
+
/// @param state Current skeleton state containing joint transformations
|
|
115
|
+
/// @return Vector of transformed points in bind pose space
|
|
116
|
+
std::vector<Vector3f> applyInverseSSD(
|
|
117
|
+
const TransformationList& inverseBindPose,
|
|
118
|
+
const SkinWeights& skin,
|
|
119
|
+
gsl::span<const Vector3f> points,
|
|
120
|
+
const SkeletonState& state);
|
|
121
|
+
|
|
122
|
+
/// Applies inverse SSD to points, storing results in a mesh
|
|
123
|
+
///
|
|
124
|
+
/// This overload transforms points from skinned space back to bind pose space,
|
|
125
|
+
/// writing the results directly to the provided mesh's vertices.
|
|
126
|
+
///
|
|
127
|
+
/// @param inverseBindPose Inverse bind pose transformations for each joint
|
|
128
|
+
/// @param skin Skin weights defining influence of each joint on vertices
|
|
129
|
+
/// @param points Input points to transform (in skinned space)
|
|
130
|
+
/// @param state Current skeleton state containing joint transformations
|
|
131
|
+
/// @param mesh Output mesh to store the transformed vertices
|
|
132
|
+
void applyInverseSSD(
|
|
133
|
+
const TransformationList& inverseBindPose,
|
|
134
|
+
const SkinWeights& skin,
|
|
135
|
+
gsl::span<const Vector3f> points,
|
|
136
|
+
const SkeletonState& state,
|
|
137
|
+
Mesh& mesh);
|
|
138
|
+
|
|
139
|
+
} // namespace momentum
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/types.h>
|
|
11
|
+
#include <momentum/math/utility.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
/// Represents a point attached to a joint in a skeleton.
|
|
16
|
+
///
|
|
17
|
+
/// Locators can be used for various purposes such as tracking specific points
|
|
18
|
+
/// on a character, defining constraints, or serving as targets for inverse kinematics.
|
|
19
|
+
struct Locator {
|
|
20
|
+
/// Name identifier for the locator
|
|
21
|
+
std::string name;
|
|
22
|
+
|
|
23
|
+
/// Index of the parent joint in the skeleton
|
|
24
|
+
size_t parent;
|
|
25
|
+
|
|
26
|
+
/// Position relative to the parent joint's coordinate system
|
|
27
|
+
Vector3f offset;
|
|
28
|
+
|
|
29
|
+
/// Specifies which axes (x,y,z) are locked (1) or free (0)
|
|
30
|
+
Vector3i locked;
|
|
31
|
+
|
|
32
|
+
/// Influence weight of this locator when used in constraints
|
|
33
|
+
float weight;
|
|
34
|
+
|
|
35
|
+
/// Reference position for limit constraints, typically equal to offset when loaded
|
|
36
|
+
Vector3f limitOrigin;
|
|
37
|
+
|
|
38
|
+
/// Controls how strongly the locator should maintain its original position
|
|
39
|
+
/// Higher values create stronger constraints, zero means completely free
|
|
40
|
+
Vector3f limitWeight;
|
|
41
|
+
|
|
42
|
+
/// Creates a locator with the specified properties
|
|
43
|
+
///
|
|
44
|
+
/// @param name Identifier for the locator
|
|
45
|
+
/// @param parent Index of the parent joint
|
|
46
|
+
/// @param offset Position relative to the parent joint
|
|
47
|
+
/// @param locked Axes that are locked (1) or free (0)
|
|
48
|
+
/// @param weight Influence weight in constraints
|
|
49
|
+
/// @param limitOrigin Reference position for limit constraints
|
|
50
|
+
/// @param limitWeight Strength of position maintenance constraints
|
|
51
|
+
Locator(
|
|
52
|
+
const std::string& name = "uninitialized",
|
|
53
|
+
const size_t parent = kInvalidIndex,
|
|
54
|
+
const Vector3f& offset = Vector3f::Zero(),
|
|
55
|
+
const Vector3i& locked = Vector3i::Zero(),
|
|
56
|
+
const float weight = 1.0f,
|
|
57
|
+
const Vector3f& limitOrigin = Vector3f::Zero(),
|
|
58
|
+
const Vector3f& limitWeight = Vector3f::Zero())
|
|
59
|
+
: name(name),
|
|
60
|
+
parent(parent),
|
|
61
|
+
offset(offset),
|
|
62
|
+
locked(locked),
|
|
63
|
+
weight(weight),
|
|
64
|
+
limitOrigin(limitOrigin),
|
|
65
|
+
limitWeight(limitWeight) {}
|
|
66
|
+
|
|
67
|
+
/// Compares two locators for equality, using approximate comparison for floating-point values
|
|
68
|
+
///
|
|
69
|
+
/// @param locator The locator to compare with
|
|
70
|
+
/// @return True if all properties are equal (or approximately equal for floating-point values)
|
|
71
|
+
inline bool operator==(const Locator& locator) const {
|
|
72
|
+
return (
|
|
73
|
+
(name == locator.name) && (parent == locator.parent) && offset.isApprox(locator.offset) &&
|
|
74
|
+
locked.isApprox(locator.locked) && isApprox(weight, locator.weight) &&
|
|
75
|
+
limitOrigin.isApprox(locator.limitOrigin) && limitWeight.isApprox(locator.limitWeight));
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/// A collection of locators attached to a skeleton
|
|
80
|
+
using LocatorList = std::vector<Locator>;
|
|
81
|
+
|
|
82
|
+
} // namespace momentum
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/locator.h>
|
|
12
|
+
#include <momentum/character/types.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
/// Tracks the current world positions of locators in a skeleton.
|
|
17
|
+
///
|
|
18
|
+
/// This class maintains the transformed positions of locators based on the current
|
|
19
|
+
/// state of the skeleton they're attached to.
|
|
20
|
+
struct LocatorState {
|
|
21
|
+
/// World-space positions of all locators, updated when the skeleton moves
|
|
22
|
+
std::vector<Vector3f> position;
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
/// Creates an empty locator state with no positions
|
|
26
|
+
LocatorState() noexcept = default;
|
|
27
|
+
|
|
28
|
+
/// Creates a locator state and immediately updates positions based on the given skeleton state
|
|
29
|
+
///
|
|
30
|
+
/// @param skeletonState Current pose of the skeleton
|
|
31
|
+
/// @param referenceLocators List of locators to track
|
|
32
|
+
LocatorState(const SkeletonState& skeletonState, const LocatorList& referenceLocators) noexcept {
|
|
33
|
+
update(skeletonState, referenceLocators);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// Updates the world positions of all locators based on the current skeleton pose
|
|
37
|
+
///
|
|
38
|
+
/// @param skeletonState Current pose of the skeleton
|
|
39
|
+
/// @param referenceLocators List of locators to update positions for
|
|
40
|
+
void update(const SkeletonState& skeletonState, const LocatorList& referenceLocators) noexcept;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
} // namespace momentum
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/math/types.h>
|
|
11
|
+
|
|
12
|
+
#include <string>
|
|
13
|
+
#include <vector>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
/// Marker represents a motion capture marker that defines an active marker during motion capture.
|
|
18
|
+
struct Marker {
|
|
19
|
+
/// The name of the marker, default is "Undefined"
|
|
20
|
+
std::string name = "Undefined";
|
|
21
|
+
|
|
22
|
+
/// The 3D position of the marker as a Vector3d object, where the unit is assumed to be in
|
|
23
|
+
/// centimeters.
|
|
24
|
+
Vector3d pos = {0.0, 0.0, 0.0};
|
|
25
|
+
|
|
26
|
+
/// The occlusion status of the marker, true if occluded, false otherwise
|
|
27
|
+
bool occluded = true;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/// MarkerSequence stores all the frames from a single capture sequence for one subject (motion
|
|
31
|
+
/// capture actor).
|
|
32
|
+
///
|
|
33
|
+
/// Each frame is a std::vector<Marker> containing the position and occlusion status of
|
|
34
|
+
/// all the markers placed on the subject.
|
|
35
|
+
/// The size of the std::vector<Marker> must be consistent for all frames.
|
|
36
|
+
struct MarkerSequence {
|
|
37
|
+
/// Name of the actor sequence (typically a unique subject name or ID)
|
|
38
|
+
std::string name;
|
|
39
|
+
|
|
40
|
+
/// A 2D vector that specifies the Marker (name/position/occlusion) for all markers
|
|
41
|
+
/// throughout all captured frames. Size: [numFrames][numMarkers]
|
|
42
|
+
std::vector<std::vector<Marker>> frames;
|
|
43
|
+
|
|
44
|
+
/// The frame rate of the motion capture sequence in frames per second (default is 30.0)
|
|
45
|
+
float fps = 30.0f;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
} // namespace momentum
|