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,157 @@
|
|
|
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_solver/fwd.h>
|
|
12
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
13
|
+
#include <momentum/common/aligned.h>
|
|
14
|
+
|
|
15
|
+
#include <array>
|
|
16
|
+
#include <atomic>
|
|
17
|
+
#include <cstdint>
|
|
18
|
+
|
|
19
|
+
namespace momentum {
|
|
20
|
+
|
|
21
|
+
struct SimdNormalConstraints {
|
|
22
|
+
public:
|
|
23
|
+
explicit SimdNormalConstraints(const Skeleton* skel);
|
|
24
|
+
~SimdNormalConstraints();
|
|
25
|
+
|
|
26
|
+
void clearConstraints();
|
|
27
|
+
|
|
28
|
+
bool addConstraint(
|
|
29
|
+
size_t jointIndex,
|
|
30
|
+
const Vector3f& offset,
|
|
31
|
+
const Vector3f& normal,
|
|
32
|
+
const Vector3f& target,
|
|
33
|
+
float targetWeight);
|
|
34
|
+
|
|
35
|
+
[[nodiscard]] VectorXi getNumConstraints() const;
|
|
36
|
+
|
|
37
|
+
public:
|
|
38
|
+
// max number of constraints per segment
|
|
39
|
+
static constexpr size_t kMaxConstraints = 4096;
|
|
40
|
+
static constexpr size_t kMaxJoints = 512;
|
|
41
|
+
|
|
42
|
+
// striped arrays for storing the offset
|
|
43
|
+
std::unique_ptr<float, AlignedDeleter> data;
|
|
44
|
+
float* offsetX;
|
|
45
|
+
float* offsetY;
|
|
46
|
+
float* offsetZ;
|
|
47
|
+
// striped arrays for storing the normal + target
|
|
48
|
+
float* normalX;
|
|
49
|
+
float* normalY;
|
|
50
|
+
float* normalZ;
|
|
51
|
+
float* targetX;
|
|
52
|
+
float* targetY;
|
|
53
|
+
float* targetZ;
|
|
54
|
+
// array for constraint weight
|
|
55
|
+
float* weights;
|
|
56
|
+
|
|
57
|
+
// store the number of constraints per joint
|
|
58
|
+
std::array<std::atomic<uint32_t>, kMaxJoints> constraintCount;
|
|
59
|
+
int numJoints;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/// A highly optimized error function for "point-to-plane" (signed) distance errors. See
|
|
63
|
+
/// NormalErrorFunction for detailed explanation.
|
|
64
|
+
///
|
|
65
|
+
/// This function should primarily be used when dealing with a large number of constraints. For
|
|
66
|
+
/// smaller numbers of constraints, consider using the generic NormalErrorFunction.
|
|
67
|
+
///
|
|
68
|
+
/// @warning Due to the multi-threaded evaluation of the error/gradient, the functions are
|
|
69
|
+
/// non-deterministic, which may cause numerical inconsistencies. As a result, slightly different
|
|
70
|
+
/// results may occur on multiple calls with the same data.
|
|
71
|
+
class SimdNormalErrorFunction : public SkeletonErrorFunction {
|
|
72
|
+
public:
|
|
73
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
74
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
75
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
76
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
77
|
+
explicit SimdNormalErrorFunction(
|
|
78
|
+
const Skeleton& skel,
|
|
79
|
+
const ParameterTransform& pt,
|
|
80
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
81
|
+
|
|
82
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
83
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
84
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
85
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
86
|
+
explicit SimdNormalErrorFunction(
|
|
87
|
+
const Character& character,
|
|
88
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
89
|
+
|
|
90
|
+
[[nodiscard]] double getError(
|
|
91
|
+
const ModelParameters& params,
|
|
92
|
+
const SkeletonState& state,
|
|
93
|
+
const MeshState& meshState) final;
|
|
94
|
+
|
|
95
|
+
double getGradient(
|
|
96
|
+
const ModelParameters& params,
|
|
97
|
+
const SkeletonState& state,
|
|
98
|
+
const MeshState& meshState,
|
|
99
|
+
Ref<VectorXf> gradient) final;
|
|
100
|
+
|
|
101
|
+
double getJacobian(
|
|
102
|
+
const ModelParameters& params,
|
|
103
|
+
const SkeletonState& state,
|
|
104
|
+
const MeshState& meshState,
|
|
105
|
+
Ref<MatrixXf> jacobian,
|
|
106
|
+
Ref<VectorXf> residual,
|
|
107
|
+
int& usedRows) override;
|
|
108
|
+
|
|
109
|
+
[[nodiscard]] size_t getJacobianSize() const override;
|
|
110
|
+
|
|
111
|
+
void setConstraints(const SimdNormalConstraints* cstrs) {
|
|
112
|
+
constraints_ = cstrs;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
protected:
|
|
116
|
+
// weights for the error functions
|
|
117
|
+
static constexpr float kPlaneWeight = 1e-4f;
|
|
118
|
+
|
|
119
|
+
mutable std::vector<size_t> jacobianOffset_;
|
|
120
|
+
|
|
121
|
+
// constraints to use
|
|
122
|
+
const SimdNormalConstraints* constraints_;
|
|
123
|
+
|
|
124
|
+
uint32_t maxThreads_;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
#ifdef MOMENTUM_ENABLE_AVX
|
|
128
|
+
|
|
129
|
+
// A version of SimdNormalErrorFunction where the Jacobian has been hand-unrolled using
|
|
130
|
+
// AVX instructions. On some platforms this performs better than the generic SIMD version
|
|
131
|
+
// but it only works on Intel platforms that support AVX.
|
|
132
|
+
class SimdNormalErrorFunctionAVX : public SimdNormalErrorFunction {
|
|
133
|
+
public:
|
|
134
|
+
explicit SimdNormalErrorFunctionAVX(
|
|
135
|
+
const Skeleton& skel,
|
|
136
|
+
const ParameterTransform& pt,
|
|
137
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max())
|
|
138
|
+
: SimdNormalErrorFunction(skel, pt, maxThreads) {}
|
|
139
|
+
explicit SimdNormalErrorFunctionAVX(
|
|
140
|
+
const Character& character,
|
|
141
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max())
|
|
142
|
+
: SimdNormalErrorFunction(character, maxThreads) {}
|
|
143
|
+
|
|
144
|
+
double getJacobian(
|
|
145
|
+
const ModelParameters& params,
|
|
146
|
+
const SkeletonState& state,
|
|
147
|
+
const MeshState& meshState,
|
|
148
|
+
Ref<MatrixXf> jacobian,
|
|
149
|
+
Ref<VectorXf> residual,
|
|
150
|
+
int& usedRows) final;
|
|
151
|
+
|
|
152
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
#endif // MOMENTUM_ENABLE_AVX
|
|
156
|
+
|
|
157
|
+
} // namespace momentum
|
|
@@ -0,0 +1,164 @@
|
|
|
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_solver/fwd.h>
|
|
12
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
13
|
+
#include <momentum/common/aligned.h>
|
|
14
|
+
|
|
15
|
+
#include <array>
|
|
16
|
+
#include <atomic>
|
|
17
|
+
#include <cstdint>
|
|
18
|
+
#include <vector>
|
|
19
|
+
|
|
20
|
+
namespace momentum {
|
|
21
|
+
|
|
22
|
+
struct SimdPlaneConstraints final {
|
|
23
|
+
public:
|
|
24
|
+
explicit SimdPlaneConstraints(const Skeleton* skel);
|
|
25
|
+
|
|
26
|
+
~SimdPlaneConstraints();
|
|
27
|
+
|
|
28
|
+
void clearConstraints();
|
|
29
|
+
|
|
30
|
+
void addConstraint(
|
|
31
|
+
size_t jointIndex,
|
|
32
|
+
const Vector3f& offset,
|
|
33
|
+
const Vector3f& targetNormal,
|
|
34
|
+
float targetOffset,
|
|
35
|
+
float targetWeight);
|
|
36
|
+
|
|
37
|
+
[[nodiscard]] VectorXi getNumConstraints() const;
|
|
38
|
+
|
|
39
|
+
public:
|
|
40
|
+
// max number of constraints per segment
|
|
41
|
+
static constexpr size_t kMaxConstraints = 4096;
|
|
42
|
+
static constexpr size_t kMaxJoints = 512;
|
|
43
|
+
|
|
44
|
+
// striped arrays for storing the offset
|
|
45
|
+
std::unique_ptr<float, AlignedDeleter> data;
|
|
46
|
+
float* offsetX;
|
|
47
|
+
float* offsetY;
|
|
48
|
+
float* offsetZ;
|
|
49
|
+
// striped arrays for storing the normal + target
|
|
50
|
+
float* normalX;
|
|
51
|
+
float* normalY;
|
|
52
|
+
float* normalZ;
|
|
53
|
+
float* targets;
|
|
54
|
+
// array for constraint weight
|
|
55
|
+
float* weights;
|
|
56
|
+
|
|
57
|
+
// store the number of constraints per joint
|
|
58
|
+
std::array<std::atomic<uint32_t>, kMaxJoints> constraintCount;
|
|
59
|
+
int numJoints;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
/// A highly optimized error function for "point-on-plane" or "point-in-half-plane" errors.
|
|
63
|
+
///
|
|
64
|
+
/// This function is recommended for use only when dealing with a large number of constraints. For a
|
|
65
|
+
/// smaller number of constraints, consider using the generic PlaneErrorFunction.
|
|
66
|
+
///
|
|
67
|
+
/// @warning Due to the multi-threaded evaluation of the error/gradient, the functions are
|
|
68
|
+
/// non-deterministic. This might lead to numerical inconsistencies, resulting in slightly different
|
|
69
|
+
/// outcomes on multiple calls with the same data.
|
|
70
|
+
class SimdPlaneErrorFunction : public SkeletonErrorFunction {
|
|
71
|
+
public:
|
|
72
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
73
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
74
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
75
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
76
|
+
explicit SimdPlaneErrorFunction(
|
|
77
|
+
const Skeleton& skel,
|
|
78
|
+
const ParameterTransform& pt,
|
|
79
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
80
|
+
|
|
81
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
82
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
83
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
84
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
85
|
+
explicit SimdPlaneErrorFunction(
|
|
86
|
+
const Character& character,
|
|
87
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
88
|
+
|
|
89
|
+
[[nodiscard]] double getError(
|
|
90
|
+
const ModelParameters& params,
|
|
91
|
+
const SkeletonState& state,
|
|
92
|
+
const MeshState& /* unused */) override;
|
|
93
|
+
|
|
94
|
+
double getGradient(
|
|
95
|
+
const ModelParameters& params,
|
|
96
|
+
const SkeletonState& state,
|
|
97
|
+
const MeshState& /* meshState */,
|
|
98
|
+
Ref<VectorXf> gradient) override;
|
|
99
|
+
|
|
100
|
+
double getJacobian(
|
|
101
|
+
const ModelParameters& params,
|
|
102
|
+
const SkeletonState& state,
|
|
103
|
+
const MeshState& /* meshState */,
|
|
104
|
+
Ref<MatrixXf> jacobian,
|
|
105
|
+
Ref<VectorXf> residual,
|
|
106
|
+
int& usedRows) override;
|
|
107
|
+
|
|
108
|
+
[[nodiscard]] size_t getJacobianSize() const override;
|
|
109
|
+
|
|
110
|
+
void setConstraints(const SimdPlaneConstraints* cstrs);
|
|
111
|
+
|
|
112
|
+
protected:
|
|
113
|
+
// weights for the error functions
|
|
114
|
+
static constexpr float kPlaneWeight = 1e-4f;
|
|
115
|
+
|
|
116
|
+
mutable std::vector<size_t> jacobianOffset_;
|
|
117
|
+
|
|
118
|
+
// constraints to use
|
|
119
|
+
const SimdPlaneConstraints* constraints_;
|
|
120
|
+
|
|
121
|
+
uint32_t maxThreads_;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
#ifdef MOMENTUM_ENABLE_AVX
|
|
125
|
+
|
|
126
|
+
// A version of SimdPlaneErrorFunction where the Jacobian has been hand-unrolled using
|
|
127
|
+
// AVX instructions. On some platforms this performs better than the generic SIMD version
|
|
128
|
+
// but it only works on Intel platforms that support AVX.
|
|
129
|
+
class SimdPlaneErrorFunctionAVX : public SimdPlaneErrorFunction {
|
|
130
|
+
public:
|
|
131
|
+
explicit SimdPlaneErrorFunctionAVX(
|
|
132
|
+
const Skeleton& skel,
|
|
133
|
+
const ParameterTransform& pt,
|
|
134
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
135
|
+
|
|
136
|
+
explicit SimdPlaneErrorFunctionAVX(
|
|
137
|
+
const Character& character,
|
|
138
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
139
|
+
|
|
140
|
+
[[nodiscard]] double getError(
|
|
141
|
+
const ModelParameters& params,
|
|
142
|
+
const SkeletonState& state,
|
|
143
|
+
const MeshState& /* unused */) final;
|
|
144
|
+
|
|
145
|
+
double getGradient(
|
|
146
|
+
const ModelParameters& params,
|
|
147
|
+
const SkeletonState& state,
|
|
148
|
+
const MeshState& /* unused */,
|
|
149
|
+
Ref<VectorXf> gradient) final;
|
|
150
|
+
|
|
151
|
+
double getJacobian(
|
|
152
|
+
const ModelParameters& params,
|
|
153
|
+
const SkeletonState& state,
|
|
154
|
+
const MeshState& /* unused */,
|
|
155
|
+
Ref<MatrixXf> jacobian,
|
|
156
|
+
Ref<VectorXf> residual,
|
|
157
|
+
int& usedRows) final;
|
|
158
|
+
|
|
159
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
#endif // MOMENTUM_ENABLE_AVX
|
|
163
|
+
|
|
164
|
+
} // namespace momentum
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
14
|
+
#include <momentum/common/aligned.h>
|
|
15
|
+
|
|
16
|
+
#include <array>
|
|
17
|
+
#include <atomic>
|
|
18
|
+
#include <cstdint>
|
|
19
|
+
|
|
20
|
+
namespace momentum {
|
|
21
|
+
|
|
22
|
+
struct SimdPositionConstraints final {
|
|
23
|
+
public:
|
|
24
|
+
explicit SimdPositionConstraints(const Skeleton* skel);
|
|
25
|
+
|
|
26
|
+
~SimdPositionConstraints();
|
|
27
|
+
|
|
28
|
+
void clearConstraints();
|
|
29
|
+
|
|
30
|
+
void addConstraint(
|
|
31
|
+
size_t jointIndex,
|
|
32
|
+
const Vector3f& offset,
|
|
33
|
+
const Vector3f& target,
|
|
34
|
+
float targetWeight);
|
|
35
|
+
|
|
36
|
+
[[nodiscard]] VectorXi getNumConstraints() const;
|
|
37
|
+
|
|
38
|
+
public:
|
|
39
|
+
// max number of constraints per segment
|
|
40
|
+
static constexpr size_t kMaxConstraints = 4096;
|
|
41
|
+
static constexpr size_t kMaxJoints = 512;
|
|
42
|
+
|
|
43
|
+
// striped arrays for storing the offset
|
|
44
|
+
std::unique_ptr<float, AlignedDeleter> data;
|
|
45
|
+
float* offsetX;
|
|
46
|
+
float* offsetY;
|
|
47
|
+
float* offsetZ;
|
|
48
|
+
// striped arrays for storing the normal + target
|
|
49
|
+
float* targetX;
|
|
50
|
+
float* targetY;
|
|
51
|
+
float* targetZ;
|
|
52
|
+
// array for constraint weight
|
|
53
|
+
float* weights;
|
|
54
|
+
|
|
55
|
+
// store the number of constraints per joint
|
|
56
|
+
std::array<std::atomic<uint32_t>, kMaxJoints> constraintCount;
|
|
57
|
+
int numJoints;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/// A highly optimized error function for 3d position errors.
|
|
61
|
+
///
|
|
62
|
+
/// This class is best used when dealing with a large number of constraints. For fewer constraints,
|
|
63
|
+
/// consider using the generic PositionErrorFunction instead.
|
|
64
|
+
///
|
|
65
|
+
/// @warning Due to the multi-threaded evaluation of the error/gradient, the functions are
|
|
66
|
+
/// non-deterministic, which may cause numerical inconsistencies. As a result, slightly different
|
|
67
|
+
/// results may be produced on multiple calls with the same data.
|
|
68
|
+
class SimdPositionErrorFunction : public SkeletonErrorFunction {
|
|
69
|
+
public:
|
|
70
|
+
/// The dimensionality of each constraint.
|
|
71
|
+
static constexpr size_t kConstraintDim = 3;
|
|
72
|
+
|
|
73
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
74
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
75
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
76
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
77
|
+
explicit SimdPositionErrorFunction(
|
|
78
|
+
const Skeleton& skel,
|
|
79
|
+
const ParameterTransform& pt,
|
|
80
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
81
|
+
|
|
82
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
83
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
84
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
85
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
86
|
+
explicit SimdPositionErrorFunction(
|
|
87
|
+
const Character& character,
|
|
88
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
89
|
+
|
|
90
|
+
[[nodiscard]] double getError(
|
|
91
|
+
const ModelParameters& params,
|
|
92
|
+
const SkeletonState& state,
|
|
93
|
+
const MeshState& /* unused */) override;
|
|
94
|
+
|
|
95
|
+
double getGradient(
|
|
96
|
+
const ModelParameters& params,
|
|
97
|
+
const SkeletonState& state,
|
|
98
|
+
const MeshState& /* unused */,
|
|
99
|
+
Ref<VectorXf> gradient) override;
|
|
100
|
+
|
|
101
|
+
double getJacobian(
|
|
102
|
+
const ModelParameters& /* params */,
|
|
103
|
+
const SkeletonState& state,
|
|
104
|
+
const MeshState& /* unused */,
|
|
105
|
+
Ref<MatrixXf> jacobian,
|
|
106
|
+
Ref<VectorXf> residual,
|
|
107
|
+
int& usedRows) override;
|
|
108
|
+
|
|
109
|
+
[[nodiscard]] size_t getJacobianSize() const override;
|
|
110
|
+
|
|
111
|
+
void setConstraints(const SimdPositionConstraints* cstrs);
|
|
112
|
+
|
|
113
|
+
protected:
|
|
114
|
+
// weights for the error functions
|
|
115
|
+
static constexpr float kPositionWeight = 1e-4f;
|
|
116
|
+
|
|
117
|
+
mutable std::vector<size_t> jacobianOffset_;
|
|
118
|
+
|
|
119
|
+
// constraints to use
|
|
120
|
+
const SimdPositionConstraints* constraints_;
|
|
121
|
+
|
|
122
|
+
uint32_t maxThreads_;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
#ifdef MOMENTUM_ENABLE_AVX
|
|
126
|
+
|
|
127
|
+
// A version of SimdPositionErrorFunction where the Jacobian has been hand-unrolled using
|
|
128
|
+
// AVX instructions. On some platforms this performs better than the generic SIMD version
|
|
129
|
+
// but it only works on Intel platforms that support AVX.
|
|
130
|
+
class SimdPositionErrorFunctionAVX : public SimdPositionErrorFunction {
|
|
131
|
+
public:
|
|
132
|
+
explicit SimdPositionErrorFunctionAVX(
|
|
133
|
+
const Skeleton& skel,
|
|
134
|
+
const ParameterTransform& pt,
|
|
135
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
136
|
+
|
|
137
|
+
explicit SimdPositionErrorFunctionAVX(
|
|
138
|
+
const Character& character,
|
|
139
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
140
|
+
|
|
141
|
+
double getError(
|
|
142
|
+
const ModelParameters& params,
|
|
143
|
+
const SkeletonState& state,
|
|
144
|
+
const MeshState& /* unused */) final;
|
|
145
|
+
|
|
146
|
+
double getGradient(
|
|
147
|
+
const ModelParameters& params,
|
|
148
|
+
const SkeletonState& state,
|
|
149
|
+
const MeshState& /* unused */,
|
|
150
|
+
Ref<VectorXf> gradient) final;
|
|
151
|
+
|
|
152
|
+
double getJacobian(
|
|
153
|
+
const ModelParameters& params,
|
|
154
|
+
const SkeletonState& state,
|
|
155
|
+
const MeshState& /* unused */,
|
|
156
|
+
Ref<MatrixXf> jacobian,
|
|
157
|
+
Ref<VectorXf> residual,
|
|
158
|
+
int& usedRows) final;
|
|
159
|
+
|
|
160
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
#endif // MOMENTUM_ENABLE_AVX
|
|
164
|
+
|
|
165
|
+
} // namespace momentum
|
|
@@ -0,0 +1,151 @@
|
|
|
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/parameter_transform.h>
|
|
12
|
+
#include <momentum/character/types.h>
|
|
13
|
+
#include <momentum/character_solver/fwd.h>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
template <typename T>
|
|
18
|
+
class SkeletonErrorFunctionT {
|
|
19
|
+
public:
|
|
20
|
+
SkeletonErrorFunctionT(const Skeleton& skel, const ParameterTransform& pt)
|
|
21
|
+
: skeleton_(skel),
|
|
22
|
+
parameterTransform_(pt),
|
|
23
|
+
weight_(1.0),
|
|
24
|
+
activeJointParams_(pt.activeJointParams) {
|
|
25
|
+
enabledParameters_.flip(); // all parameters enabled by default
|
|
26
|
+
}
|
|
27
|
+
virtual ~SkeletonErrorFunctionT() = default;
|
|
28
|
+
|
|
29
|
+
[[nodiscard]] const Skeleton& getSkeleton() const {
|
|
30
|
+
return skeleton_;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
[[nodiscard]] const ParameterTransform& getParameterTransform() const {
|
|
34
|
+
return parameterTransform_;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// For mesh-based error functions, get access to the underlying character. Error functions
|
|
38
|
+
/// that depend only on the skeleton can return nullptr.
|
|
39
|
+
[[nodiscard]] virtual const Character* getCharacter() const {
|
|
40
|
+
return nullptr;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void setWeight(T w) {
|
|
44
|
+
weight_ = w;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
[[nodiscard]] T getWeight() const {
|
|
48
|
+
return weight_;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void setActiveJoints(const VectorX<bool>& aj) {
|
|
52
|
+
activeJointParams_ = aj;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
void setEnabledParameters(const ParameterSet& ps) {
|
|
56
|
+
enabledParameters_ = ps;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
virtual double getError(
|
|
60
|
+
const ModelParametersT<T>& /* params */,
|
|
61
|
+
const SkeletonStateT<T>& /* state */,
|
|
62
|
+
const MeshStateT<T>& /* meshState */) {
|
|
63
|
+
return 0.0f;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
virtual double getGradient(
|
|
67
|
+
const ModelParametersT<T>& /* params */,
|
|
68
|
+
const SkeletonStateT<T>& /* state */,
|
|
69
|
+
const MeshStateT<T>& /* meshState */,
|
|
70
|
+
Eigen::Ref<Eigen::VectorX<T>> /* gradient */) {
|
|
71
|
+
return 0.0f;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
virtual double getJacobian(
|
|
75
|
+
const ModelParametersT<T>& /* params */,
|
|
76
|
+
const SkeletonStateT<T>& /* state */,
|
|
77
|
+
const MeshStateT<T>& /* meshState */,
|
|
78
|
+
Eigen::Ref<Eigen::MatrixX<T>> /* jacobian */,
|
|
79
|
+
Eigen::Ref<Eigen::VectorX<T>> /* residual */,
|
|
80
|
+
int& usedRows) {
|
|
81
|
+
usedRows = 0;
|
|
82
|
+
return 0.0f;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
virtual void getHessian(
|
|
86
|
+
const ModelParametersT<T>& /* params */,
|
|
87
|
+
const SkeletonStateT<T>& /* state */,
|
|
88
|
+
const MeshStateT<T>& /* meshState */,
|
|
89
|
+
Eigen::Ref<Eigen::MatrixX<T>> /* hessian */) {
|
|
90
|
+
throw;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
virtual double getSolverDerivatives(
|
|
94
|
+
const ModelParametersT<T>& parameters,
|
|
95
|
+
const SkeletonStateT<T>& state,
|
|
96
|
+
const MeshStateT<T>& meshState,
|
|
97
|
+
const size_t actualParameters,
|
|
98
|
+
Eigen::MatrixX<T>& hess,
|
|
99
|
+
Eigen::VectorX<T>& grad) {
|
|
100
|
+
const int paramSize = static_cast<int>(parameters.size());
|
|
101
|
+
double error = 0.0;
|
|
102
|
+
|
|
103
|
+
if (useHessian_) {
|
|
104
|
+
// get some ice cream, you deserve it
|
|
105
|
+
error = getGradient(parameters, state, meshState, grad);
|
|
106
|
+
getHessian(parameters, state, meshState, hess);
|
|
107
|
+
} else {
|
|
108
|
+
const int residualSize = static_cast<int>(getJacobianSize());
|
|
109
|
+
|
|
110
|
+
Eigen::MatrixX<T> jacobian = Eigen::MatrixX<T>::Zero(residualSize, paramSize);
|
|
111
|
+
Eigen::VectorX<T> residual = Eigen::VectorX<T>::Zero(residualSize);
|
|
112
|
+
int rows = 0;
|
|
113
|
+
error = getJacobian(parameters, state, meshState, jacobian, residual, rows);
|
|
114
|
+
|
|
115
|
+
// Update JtJ
|
|
116
|
+
if (rows > 0) {
|
|
117
|
+
// ! In truth, on the the "actualParameters" leftmost block will be used
|
|
118
|
+
// We take advantage of this here and skip the other computations
|
|
119
|
+
const auto JtBlock2 =
|
|
120
|
+
(jacobian.topLeftCorner(rows, actualParameters).transpose() * 2.0).eval();
|
|
121
|
+
|
|
122
|
+
// Update Hessian (Hessian += 2.0 * J^T * J) using selfadjointView with rankUpdate,
|
|
123
|
+
// replacing triangularView
|
|
124
|
+
hess.template selfadjointView<Eigen::Lower>().rankUpdate(JtBlock2);
|
|
125
|
+
|
|
126
|
+
// Update JtR
|
|
127
|
+
grad.noalias() += JtBlock2 * residual.head(rows);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return error;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
[[nodiscard]] virtual size_t getJacobianSize() const {
|
|
135
|
+
return 0;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
[[nodiscard]] virtual bool needsMesh() const {
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
protected:
|
|
143
|
+
const Skeleton& skeleton_;
|
|
144
|
+
const ParameterTransform& parameterTransform_;
|
|
145
|
+
T weight_;
|
|
146
|
+
VectorX<bool> activeJointParams_;
|
|
147
|
+
ParameterSet enabledParameters_; // set to zero by default constr
|
|
148
|
+
bool useHessian_{false}; // this can be true only if the getHessian is implemented
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
} // namespace momentum
|