pymomentum-cpu 0.1.78.post11__cp313-cp313-win_amd64.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 +128 -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 +126 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +151 -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 +29 -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 +54 -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/arrow_bundled_dependencies.lib +0 -0
- lib/arrow_static.lib +0 -0
- lib/axel.lib +0 -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/momentum_app_utils.lib +0 -0
- lib/momentum_character.lib +0 -0
- lib/momentum_character_sequence_solver.lib +0 -0
- lib/momentum_character_solver.lib +0 -0
- lib/momentum_common.lib +0 -0
- lib/momentum_diff_ik.lib +0 -0
- lib/momentum_io.lib +0 -0
- lib/momentum_io_common.lib +0 -0
- lib/momentum_io_fbx.lib +0 -0
- lib/momentum_io_gltf.lib +0 -0
- lib/momentum_io_legacy_json.lib +0 -0
- lib/momentum_io_marker.lib +0 -0
- lib/momentum_io_motion.lib +0 -0
- lib/momentum_io_shape.lib +0 -0
- lib/momentum_io_skeleton.lib +0 -0
- lib/momentum_io_urdf.lib +0 -0
- lib/momentum_marker_tracker.lib +0 -0
- lib/momentum_math.lib +0 -0
- lib/momentum_online_qr.lib +0 -0
- lib/momentum_process_markers.lib +0 -0
- lib/momentum_rerun.lib +0 -0
- lib/momentum_simd_constraints.lib +0 -0
- lib/momentum_simd_generalized_loss.lib +0 -0
- lib/momentum_skeleton.lib +0 -0
- lib/momentum_solver.lib +0 -0
- lib/rerun_c__win_x64.lib +0 -0
- lib/rerun_sdk.lib +0 -0
- pymomentum/axel.cp313-win_amd64.pyd +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.cp313-win_amd64.pyd +0 -0
- pymomentum/marker_tracking.cp313-win_amd64.pyd +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cp313-win_amd64.pyd +0 -0
- pymomentum/solver2.cp313-win_amd64.pyd +0 -0
- pymomentum/torch/character.py +809 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.78.post11.dist-info/METADATA +121 -0
- pymomentum_cpu-0.1.78.post11.dist-info/RECORD +512 -0
- pymomentum_cpu-0.1.78.post11.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.78.post11.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,324 @@
|
|
|
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/common/checks.h>
|
|
12
|
+
#include <momentum/common/profile.h>
|
|
13
|
+
|
|
14
|
+
namespace momentum {
|
|
15
|
+
|
|
16
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
17
|
+
ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::ConstraintErrorFunctionT(
|
|
18
|
+
const Skeleton& skel,
|
|
19
|
+
const ParameterTransform& pt,
|
|
20
|
+
const T& lossAlpha,
|
|
21
|
+
const T& lossC)
|
|
22
|
+
: SkeletonErrorFunctionT<T>(skel, pt),
|
|
23
|
+
loss_(lossAlpha, lossC),
|
|
24
|
+
jointGrad_(pt.numAllModelParameters()) {
|
|
25
|
+
static_assert(FuncDim > 0, "The error function cannot be empty.");
|
|
26
|
+
static_assert(NumVec > 0, "At least one vector is required in the constraint.");
|
|
27
|
+
static_assert(
|
|
28
|
+
NumVec >= NumPos, "The number of points cannot be more than the total number of vectors.");
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
32
|
+
double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getError(
|
|
33
|
+
const ModelParametersT<T>& /* params */,
|
|
34
|
+
const SkeletonStateT<T>& state,
|
|
35
|
+
const MeshStateT<T>& /* meshState */) {
|
|
36
|
+
MT_PROFILE_FUNCTION();
|
|
37
|
+
|
|
38
|
+
// loop over all constraints and calculate the error
|
|
39
|
+
FuncType f;
|
|
40
|
+
double error = 0.0;
|
|
41
|
+
for (size_t iConstr = 0; iConstr < constraints_.size(); ++iConstr) {
|
|
42
|
+
const Data& constr = constraints_[iConstr];
|
|
43
|
+
if (constr.weight != 0) {
|
|
44
|
+
evalFunction(iConstr, state.jointState.at(constr.parent), f);
|
|
45
|
+
error += constr.weight * loss_.value(f.squaredNorm());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return this->weight_ * error;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
52
|
+
double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianForSingleConstraint(
|
|
53
|
+
const JointStateListT<T>& jointStates,
|
|
54
|
+
const size_t iConstr,
|
|
55
|
+
Ref<Eigen::MatrixX<T>> jacobian,
|
|
56
|
+
Ref<Eigen::VectorX<T>> residual) {
|
|
57
|
+
const Data& constr = this->constraints_[iConstr];
|
|
58
|
+
if (constr.weight == 0) {
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
FuncType f;
|
|
63
|
+
std::array<VType, NumVec> v;
|
|
64
|
+
std::array<DfdvType, NumVec> dfdv;
|
|
65
|
+
evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
|
|
66
|
+
const T sqrError = f.squaredNorm();
|
|
67
|
+
const T w = constr.weight * this->weight_;
|
|
68
|
+
const double error = w * this->loss_.value(sqrError);
|
|
69
|
+
const T deriv = std::sqrt(w * this->loss_.deriv(sqrError));
|
|
70
|
+
|
|
71
|
+
// The input jacobian is a subblock from the full jacobian tailored for this error function, so
|
|
72
|
+
// the rows start from zero.
|
|
73
|
+
const size_t rowIndex = FuncDim * iConstr;
|
|
74
|
+
// The gradient of the loss function needs to be split between J and r, so both J'J and
|
|
75
|
+
// J'r are scaled correctly. The factor 2 from the square term is accounted for in the base
|
|
76
|
+
// class function.
|
|
77
|
+
residual.template middleRows<FuncDim>(rowIndex).noalias() = deriv * f;
|
|
78
|
+
|
|
79
|
+
// Small optimization for early termination
|
|
80
|
+
if (isApprox<T>(deriv, T(0), Eps<T>(1e-9, 1e-16))) {
|
|
81
|
+
return error;
|
|
82
|
+
}
|
|
83
|
+
const bool zeroDeriv =
|
|
84
|
+
!std::any_of(dfdv.begin(), dfdv.end(), [](const auto& vec) { return !vec.isZero(); });
|
|
85
|
+
if (zeroDeriv) {
|
|
86
|
+
return error;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// shorthands for code readability
|
|
90
|
+
const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
|
|
91
|
+
const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
|
|
92
|
+
const auto valuePtr = this->parameterTransform_.transform.valuePtr();
|
|
93
|
+
auto&& jac = jacobian.template middleRows<FuncDim>(rowIndex);
|
|
94
|
+
|
|
95
|
+
// Fill in the jacobian by walking up the joint hierarchy for each constraint.
|
|
96
|
+
// Need to consider both active joints and enabled model parameters.
|
|
97
|
+
size_t jntIndex = constr.parent;
|
|
98
|
+
while (jntIndex != kInvalidIndex) {
|
|
99
|
+
// check for valid index
|
|
100
|
+
MT_CHECK(jntIndex < this->skeleton_.joints.size());
|
|
101
|
+
|
|
102
|
+
const auto& jntState = jointStates[jntIndex];
|
|
103
|
+
const size_t jntParamIndex = jntIndex * kParametersPerJoint;
|
|
104
|
+
|
|
105
|
+
for (size_t jVec = 0; jVec < NumVec; ++jVec) {
|
|
106
|
+
if (dfdv[jVec].isZero()) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
Eigen::Vector3<T> offset;
|
|
111
|
+
if (jVec < NumPos) {
|
|
112
|
+
offset.noalias() = v[jVec] - jntState.translation();
|
|
113
|
+
} else {
|
|
114
|
+
offset = v[jVec];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Translational dofs -- only affect POINT
|
|
118
|
+
if (jVec < NumPos) {
|
|
119
|
+
for (size_t d = 0; d < 3; ++d) {
|
|
120
|
+
if (!this->activeJointParams_[jntParamIndex + d]) {
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const FuncType jc = deriv * dfdv[jVec] * jntState.getTranslationDerivative(d);
|
|
125
|
+
for (auto index = outerIndexPtr[jntParamIndex + d];
|
|
126
|
+
index < outerIndexPtr[jntParamIndex + d + 1];
|
|
127
|
+
++index) {
|
|
128
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
129
|
+
jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Rotational dofs -- affect both POINT and AXIS
|
|
136
|
+
for (size_t d = 0; d < 3; ++d) {
|
|
137
|
+
if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const FuncType jc = deriv * dfdv[jVec] * jntState.getRotationDerivative(d, offset);
|
|
142
|
+
for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
|
|
143
|
+
index < outerIndexPtr[jntParamIndex + 3 + d + 1];
|
|
144
|
+
++index) {
|
|
145
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
146
|
+
jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Scale dof -- only affect POINT
|
|
152
|
+
if (jVec < NumPos) {
|
|
153
|
+
if (this->activeJointParams_[jntParamIndex + 6]) {
|
|
154
|
+
const FuncType jc = deriv * dfdv[jVec] * jntState.getScaleDerivative(offset);
|
|
155
|
+
for (auto index = outerIndexPtr[jntParamIndex + 6];
|
|
156
|
+
index < outerIndexPtr[jntParamIndex + 6 + 1];
|
|
157
|
+
++index) {
|
|
158
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
159
|
+
jac.col(innerIndexPtr[index]).noalias() += jc * valuePtr[index];
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// go up the hierarchy to the parent
|
|
166
|
+
jntIndex = this->skeleton_.joints[jntIndex].parent;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return error;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
173
|
+
double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobian(
|
|
174
|
+
const ModelParametersT<T>& /*params*/,
|
|
175
|
+
const SkeletonStateT<T>& state,
|
|
176
|
+
const MeshStateT<T>& /* meshState */,
|
|
177
|
+
Ref<Eigen::MatrixX<T>> jacobian,
|
|
178
|
+
Ref<Eigen::VectorX<T>> residual,
|
|
179
|
+
int& usedRows) {
|
|
180
|
+
MT_PROFILE_FUNCTION();
|
|
181
|
+
usedRows = getJacobianSize();
|
|
182
|
+
|
|
183
|
+
double error = 0.0;
|
|
184
|
+
for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
|
|
185
|
+
error += getJacobianForSingleConstraint(state.jointState, iConstr, jacobian, residual);
|
|
186
|
+
}
|
|
187
|
+
return error;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
191
|
+
double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradientForSingleConstraint(
|
|
192
|
+
const JointStateListT<T>& jointStates,
|
|
193
|
+
size_t iConstr,
|
|
194
|
+
Ref<VectorX<T>> /*gradient*/) {
|
|
195
|
+
const Data& constr = this->constraints_[iConstr];
|
|
196
|
+
if (constr.weight == 0) {
|
|
197
|
+
return 0;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
FuncType f;
|
|
201
|
+
std::array<VType, NumVec> v;
|
|
202
|
+
std::array<DfdvType, NumVec> dfdv;
|
|
203
|
+
evalFunction(iConstr, jointStates.at(constr.parent), f, v, dfdv);
|
|
204
|
+
if (f.isZero()) {
|
|
205
|
+
return 0;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const T sqrError = f.squaredNorm();
|
|
209
|
+
const T w = constr.weight * this->weight_;
|
|
210
|
+
const double error = w * this->loss_.value(sqrError);
|
|
211
|
+
// The gradient is scaled by the gradient of the loss function; factor 2 falls out of the
|
|
212
|
+
// square.
|
|
213
|
+
const FuncType deriv = T(2) * w * this->loss_.deriv(sqrError) * f;
|
|
214
|
+
|
|
215
|
+
const auto outerIndexPtr = this->parameterTransform_.transform.outerIndexPtr();
|
|
216
|
+
const auto innerIndexPtr = this->parameterTransform_.transform.innerIndexPtr();
|
|
217
|
+
const auto valuePtr = this->parameterTransform_.transform.valuePtr();
|
|
218
|
+
size_t jntIndex = constr.parent;
|
|
219
|
+
while (jntIndex != kInvalidIndex) {
|
|
220
|
+
// check for valid index
|
|
221
|
+
MT_CHECK(jntIndex < this->skeleton_.joints.size());
|
|
222
|
+
|
|
223
|
+
const auto& jntState = jointStates[jntIndex];
|
|
224
|
+
const size_t jntParamIndex = jntIndex * kParametersPerJoint;
|
|
225
|
+
|
|
226
|
+
for (size_t jVec = 0; jVec < NumVec; ++jVec) {
|
|
227
|
+
if (dfdv[jVec].isZero()) {
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
Eigen::Vector3<T> offset;
|
|
232
|
+
if (jVec < NumPos) {
|
|
233
|
+
offset.noalias() = v[jVec] - jntState.translation();
|
|
234
|
+
} else {
|
|
235
|
+
offset = v[jVec];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Translational dofs -- only affect POINT
|
|
239
|
+
if (jVec < NumPos) {
|
|
240
|
+
for (size_t d = 0; d < 3; d++) {
|
|
241
|
+
if (!this->activeJointParams_[jntParamIndex + d]) {
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// joint space gradient
|
|
246
|
+
const T val = deriv.dot(dfdv[jVec] * jntState.getTranslationDerivative(d));
|
|
247
|
+
// multiply with parameter transform to get model parameter gradient
|
|
248
|
+
for (auto index = outerIndexPtr[jntParamIndex + d];
|
|
249
|
+
index < outerIndexPtr[jntParamIndex + d + 1];
|
|
250
|
+
++index) {
|
|
251
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
252
|
+
jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Rotational dofs -- affect both POINT and AXIS
|
|
259
|
+
for (size_t d = 0; d < 3; d++) {
|
|
260
|
+
if (!this->activeJointParams_[jntParamIndex + 3 + d]) {
|
|
261
|
+
continue;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// joint space gradient
|
|
265
|
+
const T val = deriv.dot(dfdv[jVec] * jntState.getRotationDerivative(d, offset));
|
|
266
|
+
// multiply with parameter transform to get model parameter gradient
|
|
267
|
+
for (auto index = outerIndexPtr[jntParamIndex + 3 + d];
|
|
268
|
+
index < outerIndexPtr[jntParamIndex + 3 + d + 1];
|
|
269
|
+
++index) {
|
|
270
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
271
|
+
jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// Scale dof -- only affect POINT
|
|
277
|
+
if (jVec < NumPos) {
|
|
278
|
+
if (this->activeJointParams_[jntParamIndex + 6]) {
|
|
279
|
+
// joint space gradient
|
|
280
|
+
const T val = deriv.dot(dfdv[jVec] * jntState.getScaleDerivative(offset));
|
|
281
|
+
// multiply with parameter transform to get model parameter gradient
|
|
282
|
+
for (auto index = outerIndexPtr[jntParamIndex + 6];
|
|
283
|
+
index < outerIndexPtr[jntParamIndex + 6 + 1];
|
|
284
|
+
++index) {
|
|
285
|
+
if (this->enabledParameters_.test(innerIndexPtr[index])) {
|
|
286
|
+
jointGrad_[innerIndexPtr[index]] += val * valuePtr[index];
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
// go up the skeleton hierarchy to the parent joint
|
|
293
|
+
jntIndex = this->skeleton_.joints[jntIndex].parent;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return error;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
300
|
+
double ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getGradient(
|
|
301
|
+
const ModelParametersT<T>& /*unused*/,
|
|
302
|
+
const SkeletonStateT<T>& state,
|
|
303
|
+
const MeshStateT<T>& /* meshState */,
|
|
304
|
+
Ref<Eigen::VectorX<T>> gradient) {
|
|
305
|
+
MT_PROFILE_FUNCTION();
|
|
306
|
+
|
|
307
|
+
// initialize joint gradients storage
|
|
308
|
+
jointGrad_.setZero();
|
|
309
|
+
|
|
310
|
+
double error = 0.0;
|
|
311
|
+
for (size_t iConstr = 0; iConstr < this->constraints_.size(); ++iConstr) {
|
|
312
|
+
error += getGradientForSingleConstraint(state.jointState, iConstr, gradient);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
gradient += jointGrad_;
|
|
316
|
+
return error;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
template <typename T, class Data, size_t FuncDim, size_t NumVec, size_t NumPos>
|
|
320
|
+
size_t ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>::getJacobianSize() const {
|
|
321
|
+
return FuncDim * constraints_.size();
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
} // namespace momentum
|
|
@@ -0,0 +1,248 @@
|
|
|
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/types.h>
|
|
12
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
13
|
+
#include <momentum/math/generalized_loss.h>
|
|
14
|
+
#include <momentum/math/types.h>
|
|
15
|
+
|
|
16
|
+
#include <optional>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
/// Base structure of constraint data
|
|
21
|
+
struct ConstraintData {
|
|
22
|
+
/// Parent joint index this constraint is under
|
|
23
|
+
size_t parent = kInvalidIndex;
|
|
24
|
+
/// Weight of the constraint
|
|
25
|
+
float weight = 0.0;
|
|
26
|
+
/// Name of the constraint
|
|
27
|
+
std::string name = {};
|
|
28
|
+
|
|
29
|
+
ConstraintData(size_t pIndex, float w, const std::string& n = "")
|
|
30
|
+
: parent(pIndex), weight(w), name(n) {}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/// A list of ConstraintData
|
|
34
|
+
using ConstraintDataList = std::vector<ConstraintData>;
|
|
35
|
+
|
|
36
|
+
/// An optional of a reference. Because optional<T&> is invalid, we need to use reference_wrapper to
|
|
37
|
+
/// make the reference of T as an optional.
|
|
38
|
+
template <typename T>
|
|
39
|
+
using optional_ref = std::optional<std::reference_wrapper<T>>;
|
|
40
|
+
|
|
41
|
+
/// The ConstraintErrorFunction is a base class of a general form of constraint errors l = w *
|
|
42
|
+
/// loss(f^2), where w is the weight (could be a product of different weighting terms), loss() is
|
|
43
|
+
/// the generalized loss function (see math/generalized_loss.h), and f is a difference vector we
|
|
44
|
+
/// want to minimize.
|
|
45
|
+
///
|
|
46
|
+
/// f takes the form of f(v, target), where v = T(q)*source. T is the global transformation of the
|
|
47
|
+
/// parent joint of the source, and target is the desired value of source in global space. f
|
|
48
|
+
/// computes the differences between v and target.
|
|
49
|
+
///
|
|
50
|
+
/// Based on the above, we have
|
|
51
|
+
/// Jacobian: df/dq = df/dv * dv/dT * dT/dq, and
|
|
52
|
+
/// Gradient: dl/dq = dl/df * Jac
|
|
53
|
+
/// Both dl/df and dT/dq are boiler plate code that we can implement in the base class, so a derived
|
|
54
|
+
/// class only needs to implement f and df/dT. However, dT/dq is not efficient to compute, and
|
|
55
|
+
/// Momentum instead implements dv/dq, for any 3-vector v. Therefore, we will compute df/dq = df/dv
|
|
56
|
+
/// * dv/dq, and implement dv/dq in the base class. So a derived class now needs to implement f and
|
|
57
|
+
/// df/dv.
|
|
58
|
+
///
|
|
59
|
+
/// This should work for a point (eg. PositionErrorFunction), or an axis (eg.
|
|
60
|
+
/// FixedAxisErrorFunction), but it can also work for a rotation matrix, or a 3x4 transformation
|
|
61
|
+
/// matrix, by applying the transformation one axis/point at a time.The number of 3-vectors to be
|
|
62
|
+
/// transformed in a constraint is NumVec.
|
|
63
|
+
template <
|
|
64
|
+
typename T, // float or double
|
|
65
|
+
class Data, // derived types from ConstraintData
|
|
66
|
+
size_t FuncDim = 3, // dimension of f
|
|
67
|
+
size_t NumVec =
|
|
68
|
+
1, // how many 3-vector v in one constraint, eg. a point is 1, and a rotation matrix is 3
|
|
69
|
+
size_t NumPos =
|
|
70
|
+
1> // we assume a constraint can be a function of both points and axes, and points come
|
|
71
|
+
// before axes in the NumVec of "v"s. This specifies how many "v"s are points. For
|
|
72
|
+
// example, it's 1 for a point constraint, and 0 for a rotation matrix.
|
|
73
|
+
class ConstraintErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
74
|
+
public:
|
|
75
|
+
static constexpr size_t kFuncDim = FuncDim;
|
|
76
|
+
static constexpr size_t kNumVec = NumVec;
|
|
77
|
+
static constexpr size_t kNumPos = NumPos;
|
|
78
|
+
|
|
79
|
+
using FuncType = Vector<T, FuncDim>; // vector type for f
|
|
80
|
+
using VType = Vector3<T>; // vector type for v
|
|
81
|
+
using DfdvType = Eigen::Matrix<T, FuncDim, 3>; // type for dfdv - it's effectively a vector if f
|
|
82
|
+
// is a scalar (FuncDim=1, eg. PlaneErrorFunction)
|
|
83
|
+
/// Constructor
|
|
84
|
+
///
|
|
85
|
+
/// @param[in] skel: character skeleton
|
|
86
|
+
/// @param[in] pt: parameter transformation
|
|
87
|
+
/// @param[in] lossAlpha: alpha parameter for the loss function
|
|
88
|
+
/// @param[in] lossC: c parameter for the loss function
|
|
89
|
+
explicit ConstraintErrorFunctionT(
|
|
90
|
+
const Skeleton& skel,
|
|
91
|
+
const ParameterTransform& pt,
|
|
92
|
+
const T& lossAlpha = GeneralizedLossT<T>::kL2,
|
|
93
|
+
const T& lossC = T(1));
|
|
94
|
+
|
|
95
|
+
/// A convenience constructor where character contains info of the skeleton and parameter
|
|
96
|
+
/// transform.
|
|
97
|
+
///
|
|
98
|
+
/// @param[in] character: character definition
|
|
99
|
+
/// @param[in] lossAlpha: alpha parameter for the loss function
|
|
100
|
+
/// @param[in] lossC: c parameter for the loss function
|
|
101
|
+
explicit ConstraintErrorFunctionT(
|
|
102
|
+
const Character& character,
|
|
103
|
+
const T& lossAlpha = GeneralizedLossT<T>::kL2,
|
|
104
|
+
const T& lossC = T(1))
|
|
105
|
+
: ConstraintErrorFunctionT<T, Data, FuncDim, NumVec, NumPos>(
|
|
106
|
+
character.skeleton,
|
|
107
|
+
character.parameterTransform,
|
|
108
|
+
lossAlpha,
|
|
109
|
+
lossC) {}
|
|
110
|
+
|
|
111
|
+
// The functions below should just work for most constraints. When we have new constraints that
|
|
112
|
+
// don't fit these implementations, we can remove the "final" annotation to allow override.
|
|
113
|
+
|
|
114
|
+
/// Computes the error function value l = w * loss(f^2). It gets f from the derived class, and
|
|
115
|
+
/// implements the rest.
|
|
116
|
+
///
|
|
117
|
+
/// @param[in] params: current model parameters
|
|
118
|
+
/// @param[in] state: curren global skeleton joint states computed from the model parameters
|
|
119
|
+
/// @param[in] meshState: current mesh state (unused by this base class)
|
|
120
|
+
///
|
|
121
|
+
/// @return the error function value l
|
|
122
|
+
[[nodiscard]] double getError(
|
|
123
|
+
const ModelParametersT<T>& params,
|
|
124
|
+
const SkeletonStateT<T>& state,
|
|
125
|
+
const MeshStateT<T>& /* meshState */) final;
|
|
126
|
+
|
|
127
|
+
/// The gradient of the error function: dl/dq = dl/d[f^2] * 2f * df/dv * dv/dq. It gets df/dv from
|
|
128
|
+
/// the derived class, and implements the rest.
|
|
129
|
+
///
|
|
130
|
+
/// @param[in] params: current model parameters
|
|
131
|
+
/// @param[in] state: curren global skeleton joint states computed from the model parameters
|
|
132
|
+
/// @param[in] meshState: current mesh state (unused by this base class)
|
|
133
|
+
/// @param[out] gradient: the gradient vector to accumulate into
|
|
134
|
+
///
|
|
135
|
+
/// @return the error function value l
|
|
136
|
+
double getGradient(
|
|
137
|
+
const ModelParametersT<T>& params,
|
|
138
|
+
const SkeletonStateT<T>& state,
|
|
139
|
+
const MeshStateT<T>& /* meshState */,
|
|
140
|
+
Ref<VectorX<T>> gradient) final;
|
|
141
|
+
|
|
142
|
+
/// For least-square problems, we assume l is the square of a vector function F. The jacobian is
|
|
143
|
+
/// then dF/dq. (A factor 2 is implemented in the solver.) With l2 loss, we have F = sqrt(w) * f,
|
|
144
|
+
/// and the jacobian is sqrt(w) * df/dv * dv/dq. With the generalized loss, the jacobian becomes
|
|
145
|
+
/// sqrt(w * d[loss]/d[f^2]) * df/dv * dv/dq. It gets df/dv from the derived class, and implements
|
|
146
|
+
/// the rest.
|
|
147
|
+
///
|
|
148
|
+
/// @param[in] params: current model parameters
|
|
149
|
+
/// @param[in] state: curren global skeleton joint states computed from the model parameters
|
|
150
|
+
/// @param[in] meshState: current mesh state (unused by this base class)
|
|
151
|
+
/// @param[out] jacobian: the output jacobian matrix
|
|
152
|
+
/// @param[out] residual: the output function residual (ie. f scaled by the loss gradient)
|
|
153
|
+
/// @param[out] usedRows: number of rows in the jacobian/residual used by this error function
|
|
154
|
+
///
|
|
155
|
+
/// @return the error function l
|
|
156
|
+
double getJacobian(
|
|
157
|
+
const ModelParametersT<T>& params,
|
|
158
|
+
const SkeletonStateT<T>& state,
|
|
159
|
+
const MeshStateT<T>& /* meshState */,
|
|
160
|
+
Ref<MatrixX<T>> jacobian,
|
|
161
|
+
Ref<VectorX<T>> residual,
|
|
162
|
+
int& usedRows) final;
|
|
163
|
+
|
|
164
|
+
/// The number of rows in the jacobian is the dimension of f, FuncDim, times the number of
|
|
165
|
+
/// constraints.
|
|
166
|
+
///
|
|
167
|
+
/// @return number of rows in the jacobian
|
|
168
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
169
|
+
|
|
170
|
+
/// Adds a constraint to the list
|
|
171
|
+
///
|
|
172
|
+
/// @param[in] constr: the constraint to be added
|
|
173
|
+
void addConstraint(const Data& constr) {
|
|
174
|
+
constraints_.push_back(constr);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// Appends a list of constraints
|
|
178
|
+
///
|
|
179
|
+
/// @param[in] constrs: a list of constraints to be added
|
|
180
|
+
void addConstraints(gsl::span<const Data> constrs) {
|
|
181
|
+
constraints_.insert(constraints_.end(), constrs.begin(), constrs.end());
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/// Replace the current list of constraints with the input
|
|
185
|
+
///
|
|
186
|
+
/// @param[in] constrs: the new list of constraints
|
|
187
|
+
void setConstraints(gsl::span<const Data> constrs) {
|
|
188
|
+
constraints_.assign(constrs.begin(), constrs.end());
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/// @return the current list of constraints immutable
|
|
192
|
+
[[nodiscard]] const std::vector<Data>& getConstraints() const {
|
|
193
|
+
return constraints_;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
[[nodiscard]] size_t numConstraints() const {
|
|
197
|
+
return constraints_.size();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/// Clear the current list of constraints
|
|
201
|
+
void clearConstraints() {
|
|
202
|
+
constraints_.clear();
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
protected:
|
|
206
|
+
/// List of constraints
|
|
207
|
+
std::vector<Data> constraints_;
|
|
208
|
+
/// The generalized loss function that transforms f^2
|
|
209
|
+
const GeneralizedLossT<T> loss_;
|
|
210
|
+
/// Intermediate storage of the gradient from this error function. We can allocate the space in
|
|
211
|
+
/// the constructor to save some dynamic allocation.
|
|
212
|
+
VectorX<T> jointGrad_;
|
|
213
|
+
|
|
214
|
+
/// The only function a derived class needs to implement.
|
|
215
|
+
/// f is needed both for errors and derivatives, v and dfdv are needed only for computing
|
|
216
|
+
/// derivatives, and therefore optional. An implementation should check if they are provided
|
|
217
|
+
/// before computing and setting their values. And don't assume they are zero-initialized. Each
|
|
218
|
+
/// returned v and df/dv corresponds to a source 3-vector (eg. a position constraint, or each of
|
|
219
|
+
/// the three axis of a rotation constraint).
|
|
220
|
+
///
|
|
221
|
+
/// @param[in] constrIndex: index of the constraint to evaluate
|
|
222
|
+
/// @param[in] state: JointState of the parent joint with transformation T
|
|
223
|
+
/// @param[out] f: output the value of f of dimension FuncDim
|
|
224
|
+
/// @param[out] v: if valid, output the vector v=T*source; there could be NumVec of vs
|
|
225
|
+
/// @param[out] dfdv: if valid, output the matrix df/dv of dimension FuncDim x 3 per v
|
|
226
|
+
virtual void evalFunction(
|
|
227
|
+
size_t constrIndex,
|
|
228
|
+
const JointStateT<T>& state,
|
|
229
|
+
FuncType& f,
|
|
230
|
+
optional_ref<std::array<VType, NumVec>> v = {},
|
|
231
|
+
optional_ref<std::array<DfdvType, NumVec>> dfdv = {}) const = 0;
|
|
232
|
+
|
|
233
|
+
private:
|
|
234
|
+
double getJacobianForSingleConstraint(
|
|
235
|
+
const JointStateListT<T>& jointStates,
|
|
236
|
+
size_t iConstr,
|
|
237
|
+
Ref<Eigen::MatrixX<T>> jacobian,
|
|
238
|
+
Ref<Eigen::VectorX<T>> residual);
|
|
239
|
+
|
|
240
|
+
double getGradientForSingleConstraint(
|
|
241
|
+
const JointStateListT<T>& jointStates,
|
|
242
|
+
size_t iConstr,
|
|
243
|
+
Ref<VectorX<T>> gradient);
|
|
244
|
+
};
|
|
245
|
+
|
|
246
|
+
} // namespace momentum
|
|
247
|
+
|
|
248
|
+
#include "momentum/character_solver/constraint_error_function-inl.h"
|
|
@@ -0,0 +1,77 @@
|
|
|
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/locator.h"
|
|
11
|
+
#include "momentum/character_solver/skeleton_error_function.h"
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
// The distance constraint is defined as ||(p_joint - origin)^2 - target||^2
|
|
16
|
+
template <typename T>
|
|
17
|
+
struct DistanceConstraintDataT {
|
|
18
|
+
Eigen::Vector3<T> origin = Eigen::Vector3<T>::Zero(); // origin in world space
|
|
19
|
+
T target{}; // distance target in world space
|
|
20
|
+
size_t parent{}; // parent joint of the constraint
|
|
21
|
+
Eigen::Vector3<T> offset; // relative offset to the parent
|
|
22
|
+
T weight{}; // constraint weight
|
|
23
|
+
// comment for now
|
|
24
|
+
static DistanceConstraintDataT<T> createFromLocator(const momentum::Locator& locator);
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
template <typename T>
|
|
28
|
+
class DistanceErrorFunctionT : public momentum::SkeletonErrorFunctionT<T> {
|
|
29
|
+
public:
|
|
30
|
+
DistanceErrorFunctionT(const momentum::Skeleton& skel, const momentum::ParameterTransform& pt);
|
|
31
|
+
|
|
32
|
+
[[nodiscard]] double getError(
|
|
33
|
+
const momentum::ModelParametersT<T>& params,
|
|
34
|
+
const momentum::SkeletonStateT<T>& state,
|
|
35
|
+
const momentum::MeshStateT<T>& meshState) final;
|
|
36
|
+
double getGradient(
|
|
37
|
+
const momentum::ModelParametersT<T>& params,
|
|
38
|
+
const momentum::SkeletonStateT<T>& state,
|
|
39
|
+
const momentum::MeshStateT<T>& meshState,
|
|
40
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
41
|
+
double getJacobian(
|
|
42
|
+
const momentum::ModelParametersT<T>& params,
|
|
43
|
+
const momentum::SkeletonStateT<T>& state,
|
|
44
|
+
const momentum::MeshStateT<T>& meshState,
|
|
45
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
46
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
47
|
+
int& usedRows) final;
|
|
48
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
49
|
+
|
|
50
|
+
void addConstraint(const DistanceConstraintDataT<T>& constr) {
|
|
51
|
+
constraints_.push_back(constr);
|
|
52
|
+
}
|
|
53
|
+
void clearConstraints() {
|
|
54
|
+
constraints_.clear();
|
|
55
|
+
}
|
|
56
|
+
void setConstraints(std::vector<DistanceConstraintDataT<T>> constr) {
|
|
57
|
+
constraints_ = std::move(constr);
|
|
58
|
+
}
|
|
59
|
+
[[nodiscard]] bool empty() const {
|
|
60
|
+
return constraints_.empty();
|
|
61
|
+
}
|
|
62
|
+
[[nodiscard]] size_t numConstraints() const {
|
|
63
|
+
return constraints_.size();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
[[nodiscard]] const std::vector<DistanceConstraintDataT<T>>& getConstraints() const {
|
|
67
|
+
return constraints_;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
protected:
|
|
71
|
+
// TODO: what should we use here?
|
|
72
|
+
const T kDistanceWeight = 1.0f;
|
|
73
|
+
|
|
74
|
+
std::vector<DistanceConstraintDataT<T>> constraints_;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
} // namespace momentum
|