pymomentum-cpu 0.1.93.post0__cp312-cp312-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- include/axel/BoundingBox.h +59 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +87 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +208 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +97 -0
- include/momentum/character/blend_shape_base.h +86 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +94 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +207 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +227 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +155 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +943 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/height_error_function.h +176 -0
- include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +119 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +98 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +135 -0
- include/momentum/io/fbx/fbx_memory_stream.h +70 -0
- include/momentum/io/fbx/openfbx_loader.h +62 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/file_save_options.h +107 -0
- include/momentum/io/gltf/gltf_builder.h +141 -0
- include/momentum/io/gltf/gltf_io.h +149 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +82 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +38 -0
- include/momentum/io/skeleton/parameter_transform_io.h +80 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/skeleton/utility.h +67 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +64 -0
- include/momentum/marker_tracking/marker_tracker.h +221 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +99 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +324 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/text_rasterizer.h +89 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/FindFbxSdk.cmake +115 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +385 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-312-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +631 -0
- pymomentum/backend/trs_backend.py +889 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-darwin.so +0 -0
- pymomentum/solver2.cpython-312-darwin.so +0 -0
- pymomentum/torch/character.py +868 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
- pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
- pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/character.h>
|
|
11
|
+
#include <momentum/character/fwd.h>
|
|
12
|
+
#include <momentum/character/parameter_transform.h>
|
|
13
|
+
#include <momentum/character/types.h>
|
|
14
|
+
#include <momentum/character_solver/fwd.h>
|
|
15
|
+
#include <momentum/solver/solver_function.h>
|
|
16
|
+
#include <span>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
template <typename T>
|
|
21
|
+
class SkeletonSolverFunctionT : public SolverFunctionT<T> {
|
|
22
|
+
public:
|
|
23
|
+
SkeletonSolverFunctionT(
|
|
24
|
+
const Character& character,
|
|
25
|
+
const ParameterTransformT<T>& parameterTransform,
|
|
26
|
+
std::span<const std::shared_ptr<SkeletonErrorFunctionT<T>>> errorFunctions = {});
|
|
27
|
+
~SkeletonSolverFunctionT() override;
|
|
28
|
+
|
|
29
|
+
double getError(const Eigen::VectorX<T>& parameters) final;
|
|
30
|
+
|
|
31
|
+
double getGradient(const Eigen::VectorX<T>& parameters, Eigen::VectorX<T>& gradient) final;
|
|
32
|
+
|
|
33
|
+
double getJacobian(
|
|
34
|
+
const Eigen::VectorX<T>& parameters,
|
|
35
|
+
Eigen::MatrixX<T>& jacobian,
|
|
36
|
+
Eigen::VectorX<T>& residual,
|
|
37
|
+
size_t& actualRows) final;
|
|
38
|
+
|
|
39
|
+
double getJtJR(
|
|
40
|
+
const Eigen::VectorX<T>& parameters,
|
|
41
|
+
Eigen::MatrixX<T>& jtj,
|
|
42
|
+
Eigen::VectorX<T>& jtr) override;
|
|
43
|
+
|
|
44
|
+
// overriding this to get a mix of JtJs and analytical Hessians from skeleton_ errorFunctions_
|
|
45
|
+
double getSolverDerivatives(
|
|
46
|
+
const Eigen::VectorX<T>& parameters,
|
|
47
|
+
Eigen::MatrixX<T>& hess,
|
|
48
|
+
Eigen::VectorX<T>& grad) override;
|
|
49
|
+
|
|
50
|
+
void updateParameters(Eigen::VectorX<T>& parameters, const Eigen::VectorX<T>& delta) final;
|
|
51
|
+
void setEnabledParameters(const ParameterSet& ps) final;
|
|
52
|
+
|
|
53
|
+
void addErrorFunction(std::shared_ptr<SkeletonErrorFunctionT<T>> solvable);
|
|
54
|
+
void clearErrorFunctions();
|
|
55
|
+
|
|
56
|
+
[[nodiscard]] const std::vector<std::shared_ptr<SkeletonErrorFunctionT<T>>>& getErrorFunctions()
|
|
57
|
+
const;
|
|
58
|
+
|
|
59
|
+
/// Provides access to the full character (replaces getSkeleton and getParameterTransform)
|
|
60
|
+
[[nodiscard]] const Character& getCharacter() const {
|
|
61
|
+
return character_;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// Legacy compatibility (delegates to character_.skeleton)
|
|
65
|
+
[[nodiscard]] const Skeleton* getSkeleton() const {
|
|
66
|
+
return &character_.skeleton;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/// Provides access to the parameter transform
|
|
70
|
+
[[nodiscard]] const ParameterTransformT<T>* getParameterTransform() const {
|
|
71
|
+
return ¶meterTransform_;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Updates mesh state if any error functions require it
|
|
75
|
+
void updateMeshState(const ModelParametersT<T>& parameters, const SkeletonStateT<T>& state);
|
|
76
|
+
|
|
77
|
+
/// Checks if any error functions require mesh state
|
|
78
|
+
[[nodiscard]] bool needsMeshState() const;
|
|
79
|
+
|
|
80
|
+
private:
|
|
81
|
+
const Character& character_;
|
|
82
|
+
const ParameterTransformT<T>& parameterTransform_;
|
|
83
|
+
std::unique_ptr<SkeletonStateT<T>> state_;
|
|
84
|
+
std::unique_ptr<MeshStateT<T>> meshState_;
|
|
85
|
+
bool needsMeshState_;
|
|
86
|
+
VectorX<bool> activeJointParams_;
|
|
87
|
+
|
|
88
|
+
Eigen::MatrixX<T> tJacobian_;
|
|
89
|
+
Eigen::VectorX<T> tResidual_;
|
|
90
|
+
|
|
91
|
+
std::vector<std::shared_ptr<SkeletonErrorFunctionT<T>>> errorFunctions_;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
} // namespace momentum
|
|
@@ -0,0 +1,166 @@
|
|
|
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/skinned_locator.h>
|
|
11
|
+
#include <momentum/character_solver/error_function_utils.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/plane_error_function.h>
|
|
14
|
+
#include <momentum/character_solver/position_error_function.h>
|
|
15
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
16
|
+
#include <momentum/math/fwd.h>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
/// Constraint structure for skinned locator error function.
|
|
21
|
+
///
|
|
22
|
+
/// Represents a constraint that pulls a skinned locator towards a target position
|
|
23
|
+
/// in world space with a specified weight.
|
|
24
|
+
template <typename T>
|
|
25
|
+
struct SkinnedLocatorConstraintT {
|
|
26
|
+
int locatorIndex = -1;
|
|
27
|
+
T weight = 1;
|
|
28
|
+
Eigen::Vector3<T> targetPosition;
|
|
29
|
+
|
|
30
|
+
template <typename T2>
|
|
31
|
+
SkinnedLocatorConstraintT<T2> cast() const {
|
|
32
|
+
return {
|
|
33
|
+
this->locatorIndex,
|
|
34
|
+
static_cast<T2>(this->weight),
|
|
35
|
+
this->targetPosition.template cast<T2>()};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/// Error function for skinned locator constraints.
|
|
40
|
+
///
|
|
41
|
+
/// This error function computes the error between skinned locator positions and their
|
|
42
|
+
/// target positions. Skinned locators are points that are deformed by the character's
|
|
43
|
+
/// skeleton and can be used to constrain the character to specific world positions.
|
|
44
|
+
/// The error is computed as the weighted squared distance between the current skinned
|
|
45
|
+
/// locator position and the target position.
|
|
46
|
+
template <typename T>
|
|
47
|
+
class SkinnedLocatorErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
48
|
+
public:
|
|
49
|
+
/// Constructs a skinned locator error function for the given character.
|
|
50
|
+
explicit SkinnedLocatorErrorFunctionT(const Character& character_in);
|
|
51
|
+
~SkinnedLocatorErrorFunctionT() override;
|
|
52
|
+
|
|
53
|
+
SkinnedLocatorErrorFunctionT(const SkinnedLocatorErrorFunctionT<T>& other) = delete;
|
|
54
|
+
SkinnedLocatorErrorFunctionT<T>& operator=(const SkinnedLocatorErrorFunctionT<T>& other) = delete;
|
|
55
|
+
SkinnedLocatorErrorFunctionT(SkinnedLocatorErrorFunctionT<T>&& other) = delete;
|
|
56
|
+
SkinnedLocatorErrorFunctionT<T>& operator=(SkinnedLocatorErrorFunctionT<T>&& other) = delete;
|
|
57
|
+
|
|
58
|
+
/// Computes the total error for all skinned locator constraints.
|
|
59
|
+
///
|
|
60
|
+
/// @param modelParameters The current model parameters
|
|
61
|
+
/// @param state The current skeleton state
|
|
62
|
+
/// @return The sum of weighted squared distances between locators and targets
|
|
63
|
+
[[nodiscard]] double getError(
|
|
64
|
+
const ModelParametersT<T>& modelParameters,
|
|
65
|
+
const SkeletonStateT<T>& state,
|
|
66
|
+
const MeshStateT<T>& /* meshState */) final;
|
|
67
|
+
|
|
68
|
+
/// Computes the gradient of the error function with respect to model parameters.
|
|
69
|
+
///
|
|
70
|
+
/// @param modelParameters The current model parameters
|
|
71
|
+
/// @param state The current skeleton state
|
|
72
|
+
/// @param gradient Output gradient vector to be filled
|
|
73
|
+
/// @return The total error value
|
|
74
|
+
double getGradient(
|
|
75
|
+
const ModelParametersT<T>& modelParameters,
|
|
76
|
+
const SkeletonStateT<T>& state,
|
|
77
|
+
const MeshStateT<T>& /* meshState */,
|
|
78
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
79
|
+
|
|
80
|
+
/// Computes the Jacobian matrix and residual vector for the error function.
|
|
81
|
+
///
|
|
82
|
+
/// @param modelParameters The current model parameters
|
|
83
|
+
/// @param state The current skeleton state
|
|
84
|
+
/// @param jacobian Output Jacobian matrix to be filled
|
|
85
|
+
/// @param residual Output residual vector to be filled
|
|
86
|
+
/// @param usedRows Number of rows used in the Jacobian (output parameter)
|
|
87
|
+
/// @return The total error value
|
|
88
|
+
double getJacobian(
|
|
89
|
+
const ModelParametersT<T>& modelParameters,
|
|
90
|
+
const SkeletonStateT<T>& state,
|
|
91
|
+
const MeshStateT<T>& /* meshState */,
|
|
92
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
93
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
94
|
+
int& usedRows) final;
|
|
95
|
+
|
|
96
|
+
/// Returns the number of rows needed for the Jacobian matrix.
|
|
97
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
98
|
+
|
|
99
|
+
/// Adds a new skinned locator constraint.
|
|
100
|
+
///
|
|
101
|
+
/// @param locatorIndex Index of the skinned locator in the character
|
|
102
|
+
/// @param weight Weight for this constraint
|
|
103
|
+
/// @param targetPosition Target position in world space
|
|
104
|
+
void addConstraint(int locatorIndex, T weight, const Eigen::Vector3<T>& targetPosition);
|
|
105
|
+
|
|
106
|
+
/// Removes all constraints.
|
|
107
|
+
void clearConstraints();
|
|
108
|
+
|
|
109
|
+
/// Sets all constraints at once, replacing any existing constraints.
|
|
110
|
+
///
|
|
111
|
+
/// @param constraints Vector of constraints to set
|
|
112
|
+
void setConstraints(const std::vector<SkinnedLocatorConstraintT<T>>& constraints);
|
|
113
|
+
|
|
114
|
+
/// Returns the current list of constraints.
|
|
115
|
+
[[nodiscard]] const std::vector<SkinnedLocatorConstraintT<T>>& getConstraints() const {
|
|
116
|
+
return constraints_;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Returns the character associated with this error function.
|
|
120
|
+
[[nodiscard]] const Character* getCharacter() const override {
|
|
121
|
+
return &character_;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private:
|
|
125
|
+
// Get the parameter index for a skinned locator, or -1 if not parameterized
|
|
126
|
+
[[nodiscard]] int getSkinnedLocatorParameterIndex(int locatorIndex) const {
|
|
127
|
+
if (locatorIndex <
|
|
128
|
+
static_cast<int>(character_.parameterTransform.skinnedLocatorParameters.size())) {
|
|
129
|
+
return character_.parameterTransform.skinnedLocatorParameters[locatorIndex];
|
|
130
|
+
}
|
|
131
|
+
return -1;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// Calculate the derivative of the world position with respect to the rest position
|
|
135
|
+
void calculateDWorldPos(
|
|
136
|
+
const SkeletonStateT<T>& state,
|
|
137
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
138
|
+
const Eigen::Vector3<T>& d_restPos,
|
|
139
|
+
Eigen::Vector3<T>& d_worldPos) const;
|
|
140
|
+
double calculatePositionJacobian(
|
|
141
|
+
const ModelParametersT<T>& modelParameters,
|
|
142
|
+
const SkeletonStateT<T>& state,
|
|
143
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
144
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
145
|
+
Ref<Eigen::VectorX<T>> res) const;
|
|
146
|
+
|
|
147
|
+
double calculatePositionGradient(
|
|
148
|
+
const ModelParametersT<T>& modelParameters,
|
|
149
|
+
const SkeletonStateT<T>& state,
|
|
150
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
151
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
152
|
+
|
|
153
|
+
// Calculate the skinned locator position in world space
|
|
154
|
+
Eigen::Vector3<T> calculateSkinnedLocatorPosition(
|
|
155
|
+
const SkeletonStateT<T>& state,
|
|
156
|
+
int locatorIndex,
|
|
157
|
+
const Eigen::Vector3<T>& locatorRestPos) const;
|
|
158
|
+
Eigen::Vector3<T> getLocatorRestPosition(const ModelParametersT<T>& modelParams, int locatorIndex)
|
|
159
|
+
const;
|
|
160
|
+
|
|
161
|
+
const Character& character_;
|
|
162
|
+
|
|
163
|
+
std::vector<SkinnedLocatorConstraintT<T>> constraints_;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
} // namespace momentum
|
|
@@ -0,0 +1,146 @@
|
|
|
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/skinned_locator.h>
|
|
11
|
+
#include <momentum/character_solver/error_function_utils.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
14
|
+
#include <momentum/character_solver/vertex_error_function.h>
|
|
15
|
+
#include <momentum/math/fwd.h>
|
|
16
|
+
|
|
17
|
+
namespace momentum {
|
|
18
|
+
|
|
19
|
+
template <typename T>
|
|
20
|
+
struct SkinnedLocatorTriangleConstraintT {
|
|
21
|
+
int locatorIndex = -1;
|
|
22
|
+
Eigen::Vector3i tgtTriangleIndices;
|
|
23
|
+
Eigen::Vector3<T> tgtTriangleBaryCoords;
|
|
24
|
+
T depth = 0;
|
|
25
|
+
T weight = 1;
|
|
26
|
+
|
|
27
|
+
template <typename T2>
|
|
28
|
+
SkinnedLocatorTriangleConstraintT<T2> cast() const {
|
|
29
|
+
return {
|
|
30
|
+
this->locatorIndex,
|
|
31
|
+
this->tgtTriangleIndices,
|
|
32
|
+
this->tgtTriangleBaryCoords.template cast<T2>(),
|
|
33
|
+
static_cast<T2>(this->depth),
|
|
34
|
+
static_cast<T2>(this->weight)};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/// Support constraining a skinned locator to a location on the mesh defined by a target triangle
|
|
39
|
+
/// and its normal. The target point is specified as sum_i (bary_i * target_triangle_vertex_i) +
|
|
40
|
+
/// depth * target_triangle_normal. This constraint applies "forces" both to the skinned locator and
|
|
41
|
+
/// every vertex in the mesh target triangle, so it will actually try to pull both toward each
|
|
42
|
+
/// other.
|
|
43
|
+
template <typename T>
|
|
44
|
+
class SkinnedLocatorTriangleErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
45
|
+
public:
|
|
46
|
+
explicit SkinnedLocatorTriangleErrorFunctionT(
|
|
47
|
+
const Character& character,
|
|
48
|
+
VertexConstraintType type = VertexConstraintType::Position);
|
|
49
|
+
~SkinnedLocatorTriangleErrorFunctionT() override;
|
|
50
|
+
|
|
51
|
+
SkinnedLocatorTriangleErrorFunctionT(const SkinnedLocatorTriangleErrorFunctionT& other) = delete;
|
|
52
|
+
SkinnedLocatorTriangleErrorFunctionT& operator=(const SkinnedLocatorTriangleErrorFunctionT&) =
|
|
53
|
+
delete;
|
|
54
|
+
SkinnedLocatorTriangleErrorFunctionT(SkinnedLocatorTriangleErrorFunctionT&&) = delete;
|
|
55
|
+
SkinnedLocatorTriangleErrorFunctionT& operator=(SkinnedLocatorTriangleErrorFunctionT&&) = delete;
|
|
56
|
+
|
|
57
|
+
[[nodiscard]] double getError(
|
|
58
|
+
const ModelParametersT<T>& modelParameters,
|
|
59
|
+
const SkeletonStateT<T>& state,
|
|
60
|
+
const MeshStateT<T>& meshState) final;
|
|
61
|
+
|
|
62
|
+
double getGradient(
|
|
63
|
+
const ModelParametersT<T>& modelParameters,
|
|
64
|
+
const SkeletonStateT<T>& state,
|
|
65
|
+
const MeshStateT<T>& meshState,
|
|
66
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
67
|
+
|
|
68
|
+
double getJacobian(
|
|
69
|
+
const ModelParametersT<T>& modelParameters,
|
|
70
|
+
const SkeletonStateT<T>& state,
|
|
71
|
+
const MeshStateT<T>& meshState,
|
|
72
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
73
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
74
|
+
int& usedRows) final;
|
|
75
|
+
|
|
76
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
77
|
+
|
|
78
|
+
void addConstraint(
|
|
79
|
+
int locatorIndex,
|
|
80
|
+
const Eigen::Vector3i& triangleIndices,
|
|
81
|
+
const Eigen::Vector3<T>& triangleBaryCoords,
|
|
82
|
+
float depth = 0,
|
|
83
|
+
T weight = 1);
|
|
84
|
+
void clearConstraints();
|
|
85
|
+
void setConstraints(const std::vector<SkinnedLocatorTriangleConstraintT<T>>& constraints);
|
|
86
|
+
|
|
87
|
+
[[nodiscard]] const std::vector<SkinnedLocatorTriangleConstraintT<T>>& getConstraints() const {
|
|
88
|
+
return constraints_;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
[[nodiscard]] const Character* getCharacter() const override {
|
|
92
|
+
return &character_;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Override to indicate this function requires mesh state
|
|
96
|
+
[[nodiscard]] bool needsMesh() const override {
|
|
97
|
+
return true;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private:
|
|
101
|
+
// Get the parameter index for a skinned locator, or -1 if not parameterized
|
|
102
|
+
[[nodiscard]] int getSkinnedLocatorParameterIndex(int locatorIndex) const {
|
|
103
|
+
if (locatorIndex <
|
|
104
|
+
static_cast<int>(character_.parameterTransform.skinnedLocatorParameters.size())) {
|
|
105
|
+
return character_.parameterTransform.skinnedLocatorParameters[locatorIndex];
|
|
106
|
+
}
|
|
107
|
+
return -1;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
double calculatePositionJacobian(
|
|
111
|
+
const ModelParametersT<T>& modelParameters,
|
|
112
|
+
const MeshStateT<T>& meshState,
|
|
113
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
114
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
115
|
+
Ref<Eigen::VectorX<T>> res) const;
|
|
116
|
+
|
|
117
|
+
double calculatePlaneJacobian(
|
|
118
|
+
const ModelParametersT<T>& modelParameters,
|
|
119
|
+
const MeshStateT<T>& meshState,
|
|
120
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
121
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
122
|
+
T& res) const;
|
|
123
|
+
|
|
124
|
+
double calculatePositionGradient(
|
|
125
|
+
const ModelParametersT<T>& modelParameters,
|
|
126
|
+
const MeshStateT<T>& meshState,
|
|
127
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
128
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
129
|
+
|
|
130
|
+
double calculatePlaneGradient(
|
|
131
|
+
const ModelParametersT<T>& modelParameters,
|
|
132
|
+
const MeshStateT<T>& meshState,
|
|
133
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
134
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
135
|
+
|
|
136
|
+
Eigen::Vector3<T> getLocatorRestPosition(const ModelParametersT<T>& modelParams, int locatorIndex)
|
|
137
|
+
const;
|
|
138
|
+
|
|
139
|
+
const Character& character_;
|
|
140
|
+
|
|
141
|
+
std::vector<SkinnedLocatorTriangleConstraintT<T>> constraints_;
|
|
142
|
+
|
|
143
|
+
const VertexConstraintType constraintType_;
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
} // 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/fwd.h>
|
|
11
|
+
#include <momentum/character/skin_weights.h>
|
|
12
|
+
#include <momentum/math/fwd.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
template <typename T>
|
|
17
|
+
struct BoneWeightT {
|
|
18
|
+
size_t parentBone{};
|
|
19
|
+
float weight{};
|
|
20
|
+
Eigen::Vector3<T> weightedWorldSpacePoint;
|
|
21
|
+
|
|
22
|
+
bool operator<(const BoneWeightT<T>& rhs) const {
|
|
23
|
+
return parentBone < rhs.parentBone;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
bool operator>(const BoneWeightT<T>& rhs) const {
|
|
27
|
+
return parentBone > rhs.parentBone;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
BoneWeightT<T>& operator+=(const BoneWeightT<T>& rhs) {
|
|
31
|
+
this->weight += rhs.weight;
|
|
32
|
+
this->weightedWorldSpacePoint += rhs.weightedWorldSpacePoint;
|
|
33
|
+
return *this;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// When we compute the derivatives of skinned points, we usually
|
|
38
|
+
// end up with a loop like this:
|
|
39
|
+
// for each skinned point i
|
|
40
|
+
// for each skinning bone and weight B_ij, w_ij
|
|
41
|
+
// for each ancestor k
|
|
42
|
+
// compute the weighted change in the skinned point wrt the ancestor
|
|
43
|
+
// The redundancy here is that most points are skinned to a set of bones in the
|
|
44
|
+
// same hierarchy (for example, two parts of the arm) and so it's redundant to
|
|
45
|
+
// walk up the whole hierarchy from scratch for each skinned bone.
|
|
46
|
+
//
|
|
47
|
+
// This class instead does a single pass up the tree from leaf-most to root-most
|
|
48
|
+
// skinned bones, accumulating skinning weights along the way. By packaging it
|
|
49
|
+
// in this class we hide the complexity and simplify the jacobian/gradient
|
|
50
|
+
// calculation.
|
|
51
|
+
template <typename T>
|
|
52
|
+
class SkinningWeightIteratorT {
|
|
53
|
+
public:
|
|
54
|
+
SkinningWeightIteratorT(
|
|
55
|
+
const Character& character,
|
|
56
|
+
const MeshT<T>& restMesh,
|
|
57
|
+
const SkeletonStateT<T>& skelState,
|
|
58
|
+
Eigen::Index vertexIndex);
|
|
59
|
+
|
|
60
|
+
SkinningWeightIteratorT(
|
|
61
|
+
const Character& character,
|
|
62
|
+
const SkinnedLocator& locator,
|
|
63
|
+
const Eigen::Vector3<T>& locatorPosition,
|
|
64
|
+
const SkeletonStateT<T>& skelState);
|
|
65
|
+
|
|
66
|
+
[[nodiscard]] bool finished() const;
|
|
67
|
+
|
|
68
|
+
// Returns the tuple <parent bone index, bone weight, vertex position in world space wrt the
|
|
69
|
+
// current bone>
|
|
70
|
+
std::tuple<size_t, T, Eigen::Vector3<T>> next();
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
void checkInvariants();
|
|
74
|
+
|
|
75
|
+
std::array<BoneWeightT<T>, kMaxSkinJoints> boneWeights;
|
|
76
|
+
int nBoneWeights;
|
|
77
|
+
const Character& character;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
} // namespace momentum
|
|
@@ -0,0 +1,119 @@
|
|
|
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/skeleton_state.h>
|
|
11
|
+
#include <momentum/character_solver/fwd.h>
|
|
12
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
/// Defines different methods for computing rotation error between two quaternions.
|
|
17
|
+
enum class RotationErrorType {
|
|
18
|
+
/// Frobenius norm of rotation matrix difference: ||R1 - R2||_F^2
|
|
19
|
+
///
|
|
20
|
+
/// This is the default method. It computes the squared Frobenius norm of the
|
|
21
|
+
/// difference between two rotation matrices. While not a geodesic distance,
|
|
22
|
+
/// it has smooth derivatives everywhere and is computationally efficient.
|
|
23
|
+
RotationMatrixDifference,
|
|
24
|
+
|
|
25
|
+
/// Logarithmic map of relative rotation: ||log(R1^{-1} * R2)||^2
|
|
26
|
+
///
|
|
27
|
+
/// This method computes the squared norm of the logarithmic map of the relative
|
|
28
|
+
/// rotation quaternion. This gives the squared geodesic distance on SO(3), which
|
|
29
|
+
/// has a clear geometric interpretation. It uses numerically robust logmap
|
|
30
|
+
/// computation with Taylor series for small angles.
|
|
31
|
+
QuaternionLogMap,
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
template <typename T>
|
|
35
|
+
class StateErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
36
|
+
public:
|
|
37
|
+
StateErrorFunctionT(
|
|
38
|
+
const Skeleton& skel,
|
|
39
|
+
const ParameterTransform& pt,
|
|
40
|
+
RotationErrorType rotationErrorType = RotationErrorType::RotationMatrixDifference);
|
|
41
|
+
explicit StateErrorFunctionT(
|
|
42
|
+
const Character& character,
|
|
43
|
+
RotationErrorType rotationErrorType = RotationErrorType::RotationMatrixDifference);
|
|
44
|
+
|
|
45
|
+
[[nodiscard]] double getError(
|
|
46
|
+
const ModelParametersT<T>& params,
|
|
47
|
+
const SkeletonStateT<T>& state,
|
|
48
|
+
const MeshStateT<T>& meshState) final;
|
|
49
|
+
|
|
50
|
+
double getGradient(
|
|
51
|
+
const ModelParametersT<T>& params,
|
|
52
|
+
const SkeletonStateT<T>& state,
|
|
53
|
+
const MeshStateT<T>& meshState,
|
|
54
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
55
|
+
|
|
56
|
+
double getJacobian(
|
|
57
|
+
const ModelParametersT<T>& params,
|
|
58
|
+
const SkeletonStateT<T>& state,
|
|
59
|
+
const MeshStateT<T>& meshState,
|
|
60
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
61
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
62
|
+
int& usedRows) final;
|
|
63
|
+
|
|
64
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
65
|
+
|
|
66
|
+
void reset();
|
|
67
|
+
void setTargetState(const SkeletonStateT<T>* target);
|
|
68
|
+
void setTargetState(const SkeletonStateT<T>& target);
|
|
69
|
+
void setTargetState(TransformListT<T> target);
|
|
70
|
+
void setTargetWeight(const Eigen::VectorX<T>& weights);
|
|
71
|
+
void setTargetWeights(const Eigen::VectorX<T>& posWeight, const Eigen::VectorX<T>& rotWeight);
|
|
72
|
+
|
|
73
|
+
/// Set the target position weights for each joint.
|
|
74
|
+
/// @param posWeight Per-joint position weights.
|
|
75
|
+
void setPositionTargetWeights(const Eigen::VectorX<T>& posWeight);
|
|
76
|
+
|
|
77
|
+
/// Set the target rotation weights for each joint.
|
|
78
|
+
/// @param rotWeight Per-joint rotation weights.
|
|
79
|
+
void setRotationTargetWeights(const Eigen::VectorX<T>& rotWeight);
|
|
80
|
+
|
|
81
|
+
void setWeights(const float posWeight, const float rotationWeight) {
|
|
82
|
+
posWgt_ = posWeight;
|
|
83
|
+
rotWgt_ = rotationWeight;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
[[nodiscard]] const TransformListT<T>& getTargetState() const {
|
|
87
|
+
return this->targetState_;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[[nodiscard]] const Eigen::VectorX<T>& getPositionWeights() const {
|
|
91
|
+
return targetPositionWeights_;
|
|
92
|
+
}
|
|
93
|
+
[[nodiscard]] const Eigen::VectorX<T>& getRotationWeights() const {
|
|
94
|
+
return targetRotationWeights_;
|
|
95
|
+
}
|
|
96
|
+
[[nodiscard]] const T& getPositionWeight() const {
|
|
97
|
+
return posWgt_;
|
|
98
|
+
}
|
|
99
|
+
[[nodiscard]] const T& getRotationWeight() const {
|
|
100
|
+
return rotWgt_;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
private:
|
|
104
|
+
TransformListT<T> targetState_;
|
|
105
|
+
Eigen::VectorX<T> targetPositionWeights_;
|
|
106
|
+
Eigen::VectorX<T> targetRotationWeights_;
|
|
107
|
+
|
|
108
|
+
T posWgt_;
|
|
109
|
+
T rotWgt_;
|
|
110
|
+
|
|
111
|
+
const RotationErrorType rotationErrorType_;
|
|
112
|
+
|
|
113
|
+
public:
|
|
114
|
+
// weights for the error functions
|
|
115
|
+
static constexpr T kPositionWeight = 1e-3f;
|
|
116
|
+
static constexpr T kOrientationWeight = 1e+0f;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
} // 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/character.h>
|
|
11
|
+
#include <momentum/character_solver/fwd.h>
|
|
12
|
+
#include <momentum/math/random.h>
|
|
13
|
+
#include <momentum/math/transform.h>
|
|
14
|
+
#include <momentum/math/types.h>
|
|
15
|
+
#include <momentum/solver/fwd.h>
|
|
16
|
+
|
|
17
|
+
namespace momentum {
|
|
18
|
+
|
|
19
|
+
/// Function which computes a new set of model parameters such that the character pose is a rigidly
|
|
20
|
+
/// transformed version of the original pose. While there is technically a closed form solution
|
|
21
|
+
/// for any given skeleton, this is complicated in momentum because different
|
|
22
|
+
/// characters attach the rigid parameters to different joints, so a fully general solution uses IK.
|
|
23
|
+
/// However, getting it right requires dealing with local minima issues in Euler angles and other
|
|
24
|
+
/// challenges. So centralizing this functionality in a single place is useful.
|
|
25
|
+
///
|
|
26
|
+
/// @param[in] ensureContinuousOutput If true, the output model parameters will be solved
|
|
27
|
+
/// sequentially so that the resulting output is continuous where possible. This helps to avoid
|
|
28
|
+
/// issues with Euler flipping.
|
|
29
|
+
template <typename T>
|
|
30
|
+
std::vector<ModelParametersT<T>> transformPose(
|
|
31
|
+
const Character& character,
|
|
32
|
+
const std::vector<ModelParametersT<T>>& modelParameters,
|
|
33
|
+
const std::vector<TransformT<T>>& transforms,
|
|
34
|
+
bool ensureContinuousOutput = true);
|
|
35
|
+
|
|
36
|
+
template <typename T>
|
|
37
|
+
std::vector<ModelParametersT<T>> transformPose(
|
|
38
|
+
const Character& character,
|
|
39
|
+
const std::vector<ModelParametersT<T>>& modelParameters,
|
|
40
|
+
const TransformT<T>& transforms);
|
|
41
|
+
|
|
42
|
+
/// Solver which can be reused to repeatedly apply the transformPose function listed above.
|
|
43
|
+
template <typename T>
|
|
44
|
+
class PoseTransformSolverT {
|
|
45
|
+
public:
|
|
46
|
+
explicit PoseTransformSolverT(const Character& character);
|
|
47
|
+
~PoseTransformSolverT();
|
|
48
|
+
|
|
49
|
+
/// Applies a rigid transform to the given model parameters.
|
|
50
|
+
/// @param[in,out] modelParameters The model parameters to be transformed.
|
|
51
|
+
/// @param[in] transform The transform to apply.
|
|
52
|
+
/// @param[in] modelParametersPrev The previous pose, which is used to ensure continuity (the
|
|
53
|
+
/// solver will initialize using the previous frame's rigid parameters).
|
|
54
|
+
void transformPose(
|
|
55
|
+
ModelParametersT<T>& modelParameters,
|
|
56
|
+
const TransformT<T>& transform,
|
|
57
|
+
const ModelParametersT<T>& modelParametersPrev = ModelParametersT<T>{});
|
|
58
|
+
|
|
59
|
+
private:
|
|
60
|
+
Eigen::Index numModelParametersFull_;
|
|
61
|
+
|
|
62
|
+
momentum::Character characterSimplified_;
|
|
63
|
+
momentum::ParameterTransformT<T> parameterTransformSimplified_;
|
|
64
|
+
size_t rootJointSimplified_;
|
|
65
|
+
momentum::ParameterSet rigidParametersSimplified_;
|
|
66
|
+
std::vector<size_t> simplifiedParamToFullParamIdx_;
|
|
67
|
+
|
|
68
|
+
momentum::ModelParametersT<T> solvedParametersSimplified_;
|
|
69
|
+
momentum::SkeletonStateT<T> skelStateSimplified_;
|
|
70
|
+
|
|
71
|
+
std::shared_ptr<momentum::PositionErrorFunctionT<T>> positionError_;
|
|
72
|
+
std::shared_ptr<momentum::OrientationErrorFunctionT<T>> orientationError_;
|
|
73
|
+
|
|
74
|
+
std::unique_ptr<momentum::SkeletonSolverFunctionT<T>> solverFunction_;
|
|
75
|
+
std::unique_ptr<momentum::SolverT<T>> solver_;
|
|
76
|
+
|
|
77
|
+
momentum::Random<> rng_;
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
} // namespace momentum
|