pymomentum-cpu 0.1.84.post0__cp313-cp313-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymomentum-cpu might be problematic. Click here for more details.
- include/axel/BoundingBox.h +59 -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 +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 +144 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +924 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +94 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +56 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +161 -0
- include/momentum/io/fbx/fbx_memory_stream.h +66 -0
- include/momentum/io/fbx/openfbx_loader.h +62 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/gltf/gltf_builder.h +132 -0
- include/momentum/io/gltf/gltf_file_format.h +19 -0
- include/momentum/io/gltf/gltf_io.h +148 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +70 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +25 -0
- include/momentum/io/skeleton/parameter_transform_io.h +41 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +62 -0
- include/momentum/marker_tracking/marker_tracker.h +213 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +90 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +282 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +377 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-313-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-313-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-313-darwin.so +0 -0
- pymomentum/solver2.cpython-313-darwin.so +0 -0
- pymomentum/torch/character.py +863 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.84.post0.dist-info/METADATA +126 -0
- pymomentum_cpu-0.1.84.post0.dist-info/RECORD +512 -0
- pymomentum_cpu-0.1.84.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.84.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,56 @@
|
|
|
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/math/fwd.h>
|
|
12
|
+
#include <momentum/math/types.h>
|
|
13
|
+
|
|
14
|
+
#include <string>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
/// Represents the supported character formats.
|
|
19
|
+
enum class CharacterFormat : uint8_t {
|
|
20
|
+
Fbx, ///< FBX file format.
|
|
21
|
+
Gltf, ///< glTF file format.
|
|
22
|
+
Usd, ///< USD file format.
|
|
23
|
+
Unknown ///< Unknown or unsupported file format.
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/// High level function to load a character of any type, with a local path.
|
|
27
|
+
///
|
|
28
|
+
/// @param[in] characterPath The path to the character file.
|
|
29
|
+
/// @param[in] parametersPath The optional path to the file containing additional parameters for the
|
|
30
|
+
/// character.
|
|
31
|
+
/// @param[in] locatorsPath The optional path to the file containing additional locators for the
|
|
32
|
+
/// character.
|
|
33
|
+
/// @return The loaded Character object.
|
|
34
|
+
///
|
|
35
|
+
/// Currently, only supports .glb and .fbx. If you want to parse from a non-local path, you may need
|
|
36
|
+
/// to parse it using your favorite resource retriever into a buffer and use the buffer version of
|
|
37
|
+
/// this function.
|
|
38
|
+
[[nodiscard]] Character loadFullCharacter(
|
|
39
|
+
const std::string& characterPath,
|
|
40
|
+
const std::string& parametersPath = std::string(),
|
|
41
|
+
const std::string& locatorsPath = std::string());
|
|
42
|
+
|
|
43
|
+
/// Buffer version of loadFullCharacter function, supports .glb and .fbx file formats.
|
|
44
|
+
///
|
|
45
|
+
/// @param[in] format The character file format.
|
|
46
|
+
/// @param[in] characterBuffer The buffer containing the character data.
|
|
47
|
+
/// @param[in] paramBuffer The optional buffer containing additional parameters for the character.
|
|
48
|
+
/// @param[in] locBuffer The optional buffer containing additional locators for the character.
|
|
49
|
+
/// @return The loaded Character object.
|
|
50
|
+
[[nodiscard]] Character loadFullCharacterFromBuffer(
|
|
51
|
+
CharacterFormat format,
|
|
52
|
+
std::span<const std::byte> characterBuffer,
|
|
53
|
+
std::span<const std::byte> paramBuffer = std::span<const std::byte>(),
|
|
54
|
+
std::span<const std::byte> locBuffer = std::span<const std::byte>());
|
|
55
|
+
|
|
56
|
+
} // namespace momentum
|
|
@@ -0,0 +1,50 @@
|
|
|
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 <gsl/gsl>
|
|
11
|
+
|
|
12
|
+
namespace momentum {
|
|
13
|
+
|
|
14
|
+
/// Casts a span of bytes to a span of a different type
|
|
15
|
+
///
|
|
16
|
+
/// This function takes a span of bytes and returns a span of a different type, by reinterpreting
|
|
17
|
+
/// the bytes as the new type. This function is useful when working with serialized data or when
|
|
18
|
+
/// dealing with raw memory. The function assumes that the size of the new type is an exact multiple
|
|
19
|
+
/// of the size of the original span.
|
|
20
|
+
///
|
|
21
|
+
/// @tparam T The type to cast the span to
|
|
22
|
+
/// @param bs The original span of bytes to cast
|
|
23
|
+
///
|
|
24
|
+
/// @return A span of the new type, with the same number of elements as the original span
|
|
25
|
+
template <typename T>
|
|
26
|
+
[[nodiscard]] std::span<T> cast_span(std::span<std::byte> bs) {
|
|
27
|
+
auto ptr = reinterpret_cast<T*>(bs.data());
|
|
28
|
+
auto tsize = gsl::narrow<decltype(bs)::size_type>(sizeof(T));
|
|
29
|
+
return {ptr, bs.size_bytes() / tsize};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/// Casts a span of const bytes to a span of a different type
|
|
33
|
+
///
|
|
34
|
+
/// This function takes a span of const bytes and returns a span of a different type, by
|
|
35
|
+
/// reinterpreting the bytes as the new type. This function is useful when working with serialized
|
|
36
|
+
/// data or when dealing with raw memory. The function assumes that the size of the new type is an
|
|
37
|
+
/// exact multiple of the size of the original span.
|
|
38
|
+
///
|
|
39
|
+
/// @tparam T The type to cast the span to
|
|
40
|
+
/// @param bs The original span of const bytes to cast
|
|
41
|
+
///
|
|
42
|
+
/// @return A span of the new type, with the same number of elements as the original span
|
|
43
|
+
template <typename T>
|
|
44
|
+
[[nodiscard]] std::span<const T> cast_span(std::span<const std::byte> bs) {
|
|
45
|
+
auto ptr = reinterpret_cast<const T*>(bs.data());
|
|
46
|
+
auto tsize = gsl::narrow<decltype(bs)::size_type>(sizeof(T));
|
|
47
|
+
return {ptr, bs.size_bytes() / tsize};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
} // namespace momentum
|
|
@@ -0,0 +1,65 @@
|
|
|
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 <gsl/gsl>
|
|
11
|
+
|
|
12
|
+
#include <istream>
|
|
13
|
+
#include <streambuf>
|
|
14
|
+
#include <string>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
/// Stream buffer based on a span.
|
|
19
|
+
/// Used to avoid copying the span when creating a std::istream:
|
|
20
|
+
/// spanstreambuf sbuf(str);
|
|
21
|
+
/// std::istream inputStream(&sbuf);
|
|
22
|
+
struct spanstreambuf : std::streambuf {
|
|
23
|
+
/// Construct a spanstreambuf with an optional buffer.
|
|
24
|
+
///
|
|
25
|
+
/// @param buffer A std::span of const std::byte (default: empty span).
|
|
26
|
+
spanstreambuf(std::span<const std::byte> buffer = {});
|
|
27
|
+
|
|
28
|
+
/// Destructor.
|
|
29
|
+
virtual ~spanstreambuf() override;
|
|
30
|
+
|
|
31
|
+
protected:
|
|
32
|
+
/// Write a sequence of characters to the output buffer.
|
|
33
|
+
///
|
|
34
|
+
/// @param s A pointer to the character sequence to be written.
|
|
35
|
+
/// @param n The number of characters to write.
|
|
36
|
+
/// @return The number of characters successfully written.
|
|
37
|
+
std::streamsize xsputn(const char_type* s, std::streamsize n) override;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
/// istream that takes a span of const bytes as input.
|
|
41
|
+
struct ispanstream : std::istream {
|
|
42
|
+
/// Construct an ispanstream with a buffer.
|
|
43
|
+
///
|
|
44
|
+
/// @param buffer A std::span of const std::byte.
|
|
45
|
+
explicit ispanstream(std::span<const std::byte> buffer);
|
|
46
|
+
|
|
47
|
+
/// Destructor.
|
|
48
|
+
virtual ~ispanstream();
|
|
49
|
+
|
|
50
|
+
private:
|
|
51
|
+
/// Internal spanstreambuf instance.
|
|
52
|
+
spanstreambuf sbuf_;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/// Reads a line from the input stream, handling line endings for different platforms.
|
|
56
|
+
///
|
|
57
|
+
/// This function reads a line from the given input stream and stores it in the 'line' parameter.
|
|
58
|
+
/// It properly handles line endings for different platforms (e.g., LF for Unix, CRLF for Windows).
|
|
59
|
+
///
|
|
60
|
+
/// @param[in,out] is Reference to the input stream from which the line should be read.
|
|
61
|
+
/// @param[in,out] line Reference to the string variable where the line will be stored.
|
|
62
|
+
/// @return Reference to the input stream after reading the line.
|
|
63
|
+
std::istream& GetLineCrossPlatform(std::istream& is, std::string& line);
|
|
64
|
+
|
|
65
|
+
} // namespace momentum
|
|
@@ -0,0 +1,161 @@
|
|
|
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/marker.h>
|
|
12
|
+
#include <momentum/common/filesystem.h>
|
|
13
|
+
#include <momentum/math/types.h>
|
|
14
|
+
|
|
15
|
+
#include <span>
|
|
16
|
+
|
|
17
|
+
#include <string_view>
|
|
18
|
+
|
|
19
|
+
namespace momentum {
|
|
20
|
+
|
|
21
|
+
// UpVector Specifies which canonical axis represents up in the system
|
|
22
|
+
// (typically Y or Z). Maps to fbxsdk::FbxAxisSystem::EUpVector
|
|
23
|
+
enum class FBXUpVector { XAxis = 1, YAxis = 2, ZAxis = 3 };
|
|
24
|
+
|
|
25
|
+
// FrontVector Vector with origin at the screen pointing toward the camera.
|
|
26
|
+
// This is a subset of enum EUpVector because axis cannot be repeated.
|
|
27
|
+
// We use the system of "parity" to define this vector because its value (X,Y or
|
|
28
|
+
// Z axis) really depends on the up-vector. The EPreDefinedAxisSystem list the
|
|
29
|
+
// up-vector, parity and coordinate system values for the predefined systems.
|
|
30
|
+
// Maps to fbxsdk::FbxAxisSystem::EFrontVector
|
|
31
|
+
enum class FBXFrontVector { ParityEven = 1, ParityOdd = 2 };
|
|
32
|
+
|
|
33
|
+
// CoordSystem Specifies the third vector of the system.
|
|
34
|
+
// Maps to fbxsdk::FbxAxisSystem::ECoordSystem
|
|
35
|
+
enum class FBXCoordSystem { RightHanded, LeftHanded };
|
|
36
|
+
|
|
37
|
+
// KeepLocators Specifies whether Nulls in the transform hierarchy should be turned into Locators.
|
|
38
|
+
enum class KeepLocators { No, Yes };
|
|
39
|
+
|
|
40
|
+
// LoadBlendShapes Specifies whether blendshapes should be loaded or not
|
|
41
|
+
enum class LoadBlendShapes { No, Yes };
|
|
42
|
+
|
|
43
|
+
// A struct containing the up, front vectors and coordinate system
|
|
44
|
+
struct FBXCoordSystemInfo {
|
|
45
|
+
// Default to the same orientations as FbxAxisSystem::eMayaYUp
|
|
46
|
+
FBXUpVector upVector = FBXUpVector::YAxis;
|
|
47
|
+
FBXFrontVector frontVector = FBXFrontVector::ParityOdd;
|
|
48
|
+
FBXCoordSystem coordSystem = FBXCoordSystem::RightHanded;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
|
|
52
|
+
// This is different from historical momentum behavior so it's off by default.
|
|
53
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
54
|
+
Character loadFbxCharacter(
|
|
55
|
+
const filesystem::path& inputPath,
|
|
56
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
57
|
+
bool permissive = false,
|
|
58
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
59
|
+
bool stripNamespaces = true);
|
|
60
|
+
|
|
61
|
+
// Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
|
|
62
|
+
// This is different from historical momentum behavior so it's off by default.
|
|
63
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
64
|
+
Character loadFbxCharacter(
|
|
65
|
+
std::span<const std::byte> inputSpan,
|
|
66
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
67
|
+
bool permissive = false,
|
|
68
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
69
|
+
bool stripNamespaces = true);
|
|
70
|
+
|
|
71
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
72
|
+
std::tuple<Character, std::vector<MatrixXf>, float> loadFbxCharacterWithMotion(
|
|
73
|
+
const filesystem::path& inputPath,
|
|
74
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
75
|
+
bool permissive = false,
|
|
76
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
77
|
+
bool stripNamespaces = true);
|
|
78
|
+
|
|
79
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
80
|
+
std::tuple<Character, std::vector<MatrixXf>, float> loadFbxCharacterWithMotion(
|
|
81
|
+
std::span<const std::byte> inputSpan,
|
|
82
|
+
KeepLocators keepLocatorss = KeepLocators::No,
|
|
83
|
+
bool permissive = false,
|
|
84
|
+
LoadBlendShapes loadBlendShape = LoadBlendShapes::No,
|
|
85
|
+
bool stripNamespaces = true);
|
|
86
|
+
|
|
87
|
+
/// Save a character with animation to an FBX file.
|
|
88
|
+
/// @param filename Path to the output FBX file
|
|
89
|
+
/// @param character The character to save
|
|
90
|
+
/// @param poses Model parameters for each frame (empty for bind pose only)
|
|
91
|
+
/// @param identity Identity pose parameters (empty to use bind pose)
|
|
92
|
+
/// @param framerate Animation framerate in frames per second
|
|
93
|
+
/// @param saveMesh Whether to include mesh geometry in the output
|
|
94
|
+
/// @param coordSystemInfo Coordinate system configuration for the FBX file
|
|
95
|
+
/// @param permissive Permissive mode allows saving mesh-only characters (without skin weights)
|
|
96
|
+
/// @param fbxNamespace Optional namespace to prepend to all node names (e.g., "ns" will become
|
|
97
|
+
/// "ns:")
|
|
98
|
+
void saveFbx(
|
|
99
|
+
const filesystem::path& filename,
|
|
100
|
+
const Character& character,
|
|
101
|
+
const MatrixXf& poses = MatrixXf(),
|
|
102
|
+
const VectorXf& identity = VectorXf(),
|
|
103
|
+
double framerate = 120.0,
|
|
104
|
+
bool saveMesh = false,
|
|
105
|
+
const FBXCoordSystemInfo& coordSystemInfo = FBXCoordSystemInfo(),
|
|
106
|
+
bool permissive = false,
|
|
107
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
108
|
+
std::string_view fbxNamespace = "");
|
|
109
|
+
|
|
110
|
+
/// Save a character with animation using joint parameters directly.
|
|
111
|
+
/// @param filename Path to the output FBX file
|
|
112
|
+
/// @param character The character to save
|
|
113
|
+
/// @param jointParams Joint parameters for each frame (empty for bind pose only)
|
|
114
|
+
/// @param framerate Animation framerate in frames per second
|
|
115
|
+
/// @param saveMesh Whether to include mesh geometry in the output
|
|
116
|
+
/// @param coordSystemInfo Coordinate system configuration for the FBX file
|
|
117
|
+
/// @param permissive Permissive mode allows saving mesh-only characters (without skin weights)
|
|
118
|
+
/// @param markerSequence Optional marker sequence data to save with the character
|
|
119
|
+
/// @param fbxNamespace Optional namespace to prepend to all node names (e.g., "ns" will become
|
|
120
|
+
/// "ns:")
|
|
121
|
+
void saveFbxWithJointParams(
|
|
122
|
+
const filesystem::path& filename,
|
|
123
|
+
const Character& character,
|
|
124
|
+
const MatrixXf& jointParams = MatrixXf(),
|
|
125
|
+
double framerate = 120.0,
|
|
126
|
+
bool saveMesh = false,
|
|
127
|
+
const FBXCoordSystemInfo& coordSystemInfo = FBXCoordSystemInfo(),
|
|
128
|
+
bool permissive = false,
|
|
129
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
130
|
+
std::string_view fbxNamespace = "");
|
|
131
|
+
|
|
132
|
+
/// Save a character model (skeleton and mesh) without animation.
|
|
133
|
+
/// @param filename Path to the output FBX file
|
|
134
|
+
/// @param character The character to save
|
|
135
|
+
/// @param coordSystemInfo Coordinate system configuration for the FBX file
|
|
136
|
+
/// @param permissive Permissive mode allows saving mesh-only characters (without skin weights)
|
|
137
|
+
/// @param fbxNamespace Optional namespace to prepend to all node names (e.g., "ns" will become
|
|
138
|
+
/// "ns:")
|
|
139
|
+
void saveFbxModel(
|
|
140
|
+
const filesystem::path& filename,
|
|
141
|
+
const Character& character,
|
|
142
|
+
const FBXCoordSystemInfo& coordSystemInfo = FBXCoordSystemInfo(),
|
|
143
|
+
bool permissive = false,
|
|
144
|
+
std::string_view fbxNamespace = "");
|
|
145
|
+
|
|
146
|
+
/// Loads a MarkerSequence from an FBX file.
|
|
147
|
+
///
|
|
148
|
+
/// This function reads motion capture marker data from an FBX file and returns
|
|
149
|
+
/// it as a MarkerSequence. The markers must be stored in the FBX scene hierarchy
|
|
150
|
+
/// under a "Markers" root node, and each marker node must have the custom property
|
|
151
|
+
/// "Momentum_Marker" to be recognized. The Markers root node must have the custom
|
|
152
|
+
/// property "Momentum_Markers_Root" to be identified.
|
|
153
|
+
///
|
|
154
|
+
/// @param[in] filename Path to the FBX file containing marker data.
|
|
155
|
+
/// @param stripNamespaces Removes namespace from joints when true. True by default
|
|
156
|
+
/// @return A MarkerSequence object containing the marker animation data, including
|
|
157
|
+
/// marker positions per frame and fps. Returns an empty sequence if no
|
|
158
|
+
/// markers or animations are found.
|
|
159
|
+
MarkerSequence loadFbxMarkerSequence(const filesystem::path& filename, bool stripNamespaces = true);
|
|
160
|
+
|
|
161
|
+
} // namespace momentum
|
|
@@ -0,0 +1,66 @@
|
|
|
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 <fbxsdk.h>
|
|
11
|
+
#include <fbxsdk/core/fbxstream.h>
|
|
12
|
+
#include <span>
|
|
13
|
+
|
|
14
|
+
#include <string_view>
|
|
15
|
+
|
|
16
|
+
#define FBX_VERSION_GE(major, minor, patch) \
|
|
17
|
+
((FBXSDK_VERSION_MAJOR > (major)) || \
|
|
18
|
+
(FBXSDK_VERSION_MAJOR == (major) && FBXSDK_VERSION_MINOR > (minor)) || \
|
|
19
|
+
(FBXSDK_VERSION_MAJOR == (major) && FBXSDK_VERSION_MINOR == (minor) && \
|
|
20
|
+
FBXSDK_VERSION_POINT >= (patch)))
|
|
21
|
+
|
|
22
|
+
namespace momentum {
|
|
23
|
+
|
|
24
|
+
// Simplest FbxStream to read file from a string_view memory buffer
|
|
25
|
+
class FbxMemoryStream : public FbxStream {
|
|
26
|
+
public:
|
|
27
|
+
FbxMemoryStream(std::span<const std::byte> buffer, int pReaderId);
|
|
28
|
+
~FbxMemoryStream() override;
|
|
29
|
+
EState GetState() override;
|
|
30
|
+
bool Open(void* pStreamData) override;
|
|
31
|
+
bool Close() override;
|
|
32
|
+
bool Flush() override;
|
|
33
|
+
#if FBX_VERSION_GE(2020, 3, 2)
|
|
34
|
+
size_t Write(const void* buffer, FbxUInt64 count) override;
|
|
35
|
+
size_t Read(void* buffer, FbxUInt64 count) const override;
|
|
36
|
+
#else
|
|
37
|
+
int Write(const void* buffer, int count) override;
|
|
38
|
+
int Read(void* buffer, int count) const override;
|
|
39
|
+
#endif
|
|
40
|
+
int GetReaderID() const override;
|
|
41
|
+
int GetWriterID() const override;
|
|
42
|
+
void Seek(const FbxInt64& pOffset, const FbxFile::ESeekPos& pSeekPos) override;
|
|
43
|
+
#if FBX_VERSION_GE(2020, 3, 2)
|
|
44
|
+
FbxInt64 GetPosition() const override;
|
|
45
|
+
void SetPosition(FbxInt64 pPosition) override;
|
|
46
|
+
#else
|
|
47
|
+
long GetPosition() const override;
|
|
48
|
+
void SetPosition(long pPosition) override;
|
|
49
|
+
#endif
|
|
50
|
+
int GetError() const override;
|
|
51
|
+
void ClearError() override;
|
|
52
|
+
|
|
53
|
+
private:
|
|
54
|
+
std::span<const std::byte> buffer_;
|
|
55
|
+
long length_;
|
|
56
|
+
#if FBX_VERSION_GE(2020, 3, 2)
|
|
57
|
+
mutable FbxInt64 position_{0};
|
|
58
|
+
#else
|
|
59
|
+
mutable long position_;
|
|
60
|
+
#endif
|
|
61
|
+
EState state_;
|
|
62
|
+
int readerId_;
|
|
63
|
+
mutable int errorCode_;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
} // namespace momentum
|
|
@@ -0,0 +1,62 @@
|
|
|
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/marker.h>
|
|
12
|
+
#include <momentum/common/filesystem.h>
|
|
13
|
+
#include <momentum/io/fbx/fbx_io.h>
|
|
14
|
+
#include <momentum/math/types.h>
|
|
15
|
+
|
|
16
|
+
#include <span>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
// Custom property names for identifying Momentum-specific FBX nodes
|
|
21
|
+
constexpr const char* kMomentumMarkersRootProperty = "Momentum_Markers_Root";
|
|
22
|
+
constexpr const char* kMomentumMarkerProperty = "Momentum_Marker";
|
|
23
|
+
|
|
24
|
+
// Using keepLocators means the Nulls in the transform hierarchy will be turned into Locators.
|
|
25
|
+
// This is different from historical momentum behavior so it's off by default.
|
|
26
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
27
|
+
Character loadOpenFbxCharacter(
|
|
28
|
+
const filesystem::path& inputPath,
|
|
29
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
30
|
+
bool permissive = false,
|
|
31
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
32
|
+
bool stripNamespaces = true);
|
|
33
|
+
|
|
34
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
35
|
+
Character loadOpenFbxCharacter(
|
|
36
|
+
std::span<const std::byte> inputData,
|
|
37
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
38
|
+
bool permissive = false,
|
|
39
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
40
|
+
bool stripNamespaces = true);
|
|
41
|
+
|
|
42
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
43
|
+
std::tuple<Character, std::vector<MatrixXf>, float> loadOpenFbxCharacterWithMotion(
|
|
44
|
+
const filesystem::path& inputPath,
|
|
45
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
46
|
+
bool permissive = false,
|
|
47
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
48
|
+
bool stripNamespaces = true);
|
|
49
|
+
|
|
50
|
+
// Permissive mode allows loading mesh-only characters (without skin weights).
|
|
51
|
+
std::tuple<Character, std::vector<MatrixXf>, float> loadOpenFbxCharacterWithMotion(
|
|
52
|
+
std::span<const std::byte> inputData,
|
|
53
|
+
KeepLocators keepLocators = KeepLocators::No,
|
|
54
|
+
bool permissive = false,
|
|
55
|
+
LoadBlendShapes loadBlendShapes = LoadBlendShapes::No,
|
|
56
|
+
bool stripNamespaces = true);
|
|
57
|
+
|
|
58
|
+
MarkerSequence loadOpenFbxMarkerSequence(
|
|
59
|
+
const filesystem::path& filename,
|
|
60
|
+
bool stripNamespaces = true);
|
|
61
|
+
|
|
62
|
+
} // namespace momentum
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/math/types.h>
|
|
11
|
+
|
|
12
|
+
#include <span>
|
|
13
|
+
|
|
14
|
+
#include <string>
|
|
15
|
+
#include <vector>
|
|
16
|
+
|
|
17
|
+
namespace momentum {
|
|
18
|
+
|
|
19
|
+
// Structure for holding arbitrary polygon data. We will read the data as-is from the
|
|
20
|
+
// FBX file and then triangulate at the end for momentum. Doing it this way allows us
|
|
21
|
+
// to split up the functionality (triangulating while you read complicates handling
|
|
22
|
+
// texture coordinates for example).
|
|
23
|
+
struct PolygonData {
|
|
24
|
+
// We will pack polygons in an array like this:
|
|
25
|
+
// The indices array will contain all the polygons indices packed back-to-back.
|
|
26
|
+
// 1 2 3 4 2 3 4 6 ...
|
|
27
|
+
// The offsets array will include an offset for the start and end of each polygon.
|
|
28
|
+
// 0 4 8 ...
|
|
29
|
+
// The advantage of doing it this way is that we have random access into the
|
|
30
|
+
// polygons. The disadvantage (compared to just providing an array of vertex counts)
|
|
31
|
+
// is that the offset array should always have one more than the number of polygons,
|
|
32
|
+
// which is a little confusing.
|
|
33
|
+
std::vector<uint32_t> indices;
|
|
34
|
+
std::vector<uint32_t> offsets;
|
|
35
|
+
|
|
36
|
+
// The texture coordinate indices for each face.
|
|
37
|
+
// Uses the same offsets array as the indices array.
|
|
38
|
+
// Note that this is allowed to be empty, but if not empty it
|
|
39
|
+
// must be the same size as the indices array.
|
|
40
|
+
std::vector<uint32_t> textureIndices;
|
|
41
|
+
|
|
42
|
+
PolygonData() : offsets{0} {}
|
|
43
|
+
|
|
44
|
+
// If there's a problem with the mesh, returns an error message.
|
|
45
|
+
// If everything is kosher, returns an empty string.
|
|
46
|
+
// This function is used in a few places when reading the mesh from
|
|
47
|
+
// disk to make sure it's valid.
|
|
48
|
+
[[nodiscard]] std::string errorMessage(size_t numVertices) const;
|
|
49
|
+
|
|
50
|
+
// Similar to errorMessage, but the issue is not severe enough to terminate.
|
|
51
|
+
[[nodiscard]] std::string warnMessage(size_t numTexVertices) const;
|
|
52
|
+
|
|
53
|
+
[[nodiscard]] size_t numPolygons() const;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
std::vector<Eigen::Vector3i> triangulate(
|
|
57
|
+
std::span<const uint32_t> indices,
|
|
58
|
+
std::span<const uint32_t> offsets);
|
|
59
|
+
|
|
60
|
+
} // namespace momentum
|
|
@@ -0,0 +1,132 @@
|
|
|
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/marker.h>
|
|
11
|
+
#include <momentum/character/skeleton.h>
|
|
12
|
+
#include <momentum/common/filesystem.h>
|
|
13
|
+
#include <momentum/io/gltf/gltf_file_format.h>
|
|
14
|
+
#include <momentum/io/gltf/gltf_io.h>
|
|
15
|
+
#include <momentum/math/mesh.h>
|
|
16
|
+
#include <momentum/math/types.h>
|
|
17
|
+
|
|
18
|
+
#include <fx/gltf.h>
|
|
19
|
+
|
|
20
|
+
namespace fx::gltf {
|
|
21
|
+
struct Document;
|
|
22
|
+
} // namespace fx::gltf
|
|
23
|
+
|
|
24
|
+
namespace momentum {
|
|
25
|
+
|
|
26
|
+
using MotionParameters = std::tuple<std::vector<std::string>, MatrixXf>;
|
|
27
|
+
using IdentityParameters = std::tuple<std::vector<std::string>, VectorXf>;
|
|
28
|
+
|
|
29
|
+
/// Helper class to build a glb scene. It supports adding multiple characters
|
|
30
|
+
/// and motions for each character.
|
|
31
|
+
/// By default, momentum extension is added to the glb nodes. This is required if you
|
|
32
|
+
/// want to correctly load the exported character back.
|
|
33
|
+
class GltfBuilder final {
|
|
34
|
+
public:
|
|
35
|
+
GltfBuilder();
|
|
36
|
+
|
|
37
|
+
~GltfBuilder();
|
|
38
|
+
|
|
39
|
+
GltfBuilder(GltfBuilder const&) = delete;
|
|
40
|
+
|
|
41
|
+
void operator=(GltfBuilder const&) = delete;
|
|
42
|
+
|
|
43
|
+
/// Specify how marker mesh is represented in the glb file
|
|
44
|
+
enum class MarkerMesh : uint8_t { None, UnitCube };
|
|
45
|
+
|
|
46
|
+
/// Add a character to the scene. Each character will have a root node with the character's
|
|
47
|
+
/// name as the parent of the skeleton root and the character mesh.
|
|
48
|
+
/// positionOffset and rotationOffset can be provided as an initial offset to the character.
|
|
49
|
+
void addCharacter(
|
|
50
|
+
const Character& character,
|
|
51
|
+
const Vector3f& positionOffset = Vector3f::Zero(),
|
|
52
|
+
const Quaternionf& rotationOffset = Quaternionf::Identity(),
|
|
53
|
+
const GltfOptions& options = GltfOptions());
|
|
54
|
+
|
|
55
|
+
/// Add a static mesh, such as an environment or a target scan
|
|
56
|
+
void addMesh(const Mesh& mesh, const std::string& name, bool addColor = false);
|
|
57
|
+
|
|
58
|
+
void setFps(float fps);
|
|
59
|
+
|
|
60
|
+
/// Add a motion to the provided character. If addCharacter is not called before adding
|
|
61
|
+
/// the motion, the character will be automatically added with the default settings.
|
|
62
|
+
void addMotion(
|
|
63
|
+
const Character& character,
|
|
64
|
+
float fps = 120.0f,
|
|
65
|
+
const MotionParameters& motion = {},
|
|
66
|
+
const IdentityParameters& offsets = {},
|
|
67
|
+
bool addExtensions = true,
|
|
68
|
+
const std::string& customName = "default");
|
|
69
|
+
|
|
70
|
+
/// Add a skeleton states to the provided character. If addCharacter is not called before adding
|
|
71
|
+
/// the skeleton states, the character will be automatically added with the default settings.
|
|
72
|
+
void addSkeletonStates(
|
|
73
|
+
const Character& character,
|
|
74
|
+
float fps,
|
|
75
|
+
std::span<const SkeletonState> skeletonStates,
|
|
76
|
+
const std::string& customName = "default");
|
|
77
|
+
|
|
78
|
+
/// Add marker data to the file
|
|
79
|
+
///
|
|
80
|
+
/// @param[in] fps The frame rate of the motion capture data in frames per second.
|
|
81
|
+
/// @param[in] markerSequence A 2D vector specifying the Marker data (name/position/occlusion) for
|
|
82
|
+
/// all markers across all captured frames. Size: [numFrames][numMarkers]
|
|
83
|
+
/// @param[in] markerMesh Optional parameter specifying the MarkerMesh type (default is
|
|
84
|
+
/// MarkerMesh::None).
|
|
85
|
+
/// @param[in] animName Optional parameter specifying the animation name (default is "default").
|
|
86
|
+
void addMarkerSequence(
|
|
87
|
+
float fps,
|
|
88
|
+
std::span<const std::vector<momentum::Marker>> markerSequence,
|
|
89
|
+
MarkerMesh markerMesh = MarkerMesh::None,
|
|
90
|
+
const std::string& animName = "default");
|
|
91
|
+
|
|
92
|
+
// Save the file with the provided filename. If the fileFormat is 'GltfFileFormat::Extension',
|
|
93
|
+
// will deduct the file format by filename.
|
|
94
|
+
// When embedResources is true, it will set all the existing buffers to embed the data.
|
|
95
|
+
void save(
|
|
96
|
+
const filesystem::path& filename,
|
|
97
|
+
GltfFileFormat fileFormat = GltfFileFormat::Extension,
|
|
98
|
+
bool embedResources = false);
|
|
99
|
+
|
|
100
|
+
static void save(
|
|
101
|
+
fx::gltf::Document& document,
|
|
102
|
+
const filesystem::path& filename,
|
|
103
|
+
GltfFileFormat fileFormat = GltfFileFormat::Extension,
|
|
104
|
+
bool embedResources = false);
|
|
105
|
+
|
|
106
|
+
/// Set all existing buffers to embed resources.
|
|
107
|
+
void forceEmbedResources();
|
|
108
|
+
|
|
109
|
+
static void forceEmbedResources(fx::gltf::Document& document);
|
|
110
|
+
|
|
111
|
+
/// Allow copy the document, but do not allow modify the file
|
|
112
|
+
/// outside of the builder to keep metadata consistent
|
|
113
|
+
const fx::gltf::Document& getDocument();
|
|
114
|
+
|
|
115
|
+
size_t getNumCharacters();
|
|
116
|
+
|
|
117
|
+
size_t getCharacterRootIndex(const std::string& name);
|
|
118
|
+
|
|
119
|
+
size_t getNumJoints(const std::string& name);
|
|
120
|
+
|
|
121
|
+
size_t getNumMotions();
|
|
122
|
+
|
|
123
|
+
float getFps();
|
|
124
|
+
|
|
125
|
+
std::vector<size_t> getCharacterMotions(const std::string& characterName);
|
|
126
|
+
|
|
127
|
+
private:
|
|
128
|
+
struct Impl;
|
|
129
|
+
std::unique_ptr<Impl> impl_;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
} // namespace momentum
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
namespace momentum {
|
|
11
|
+
|
|
12
|
+
// File format in which the character is saved
|
|
13
|
+
enum class GltfFileFormat {
|
|
14
|
+
Extension = 0, // The file extension is used for deduction (e.g. ".gltf" --> ASCII)
|
|
15
|
+
GltfBinary = 1, // Binary format (generally .glb)
|
|
16
|
+
GltfAscii = 2, // ASCII format (generally .gltf)
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
} // namespace momentum
|