pymomentum-cpu 0.1.82.post0__cp312-cp312-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymomentum-cpu might be problematic. Click here for more details.
- include/axel/BoundingBox.h +58 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +86 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +199 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +91 -0
- include/momentum/character/blend_shape_base.h +70 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +82 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +250 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +181 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +144 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +134 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +109 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +924 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +94 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +56 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +109 -0
- include/momentum/io/fbx/fbx_memory_stream.h +66 -0
- include/momentum/io/fbx/openfbx_loader.h +49 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/gltf/gltf_builder.h +132 -0
- include/momentum/io/gltf/gltf_file_format.h +19 -0
- include/momentum/io/gltf/gltf_io.h +148 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +70 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +25 -0
- include/momentum/io/skeleton/parameter_transform_io.h +41 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +62 -0
- include/momentum/marker_tracking/marker_tracker.h +213 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +90 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +251 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +377 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-312-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +614 -0
- pymomentum/backend/trs_backend.py +871 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-darwin.so +0 -0
- pymomentum/solver2.cpython-312-darwin.so +0 -0
- pymomentum/torch/character.py +856 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.82.post0.dist-info/METADATA +121 -0
- pymomentum_cpu-0.1.82.post0.dist-info/RECORD +512 -0
- pymomentum_cpu-0.1.82.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.82.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,148 @@
|
|
|
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/types.h>
|
|
12
|
+
#include <momentum/common/filesystem.h>
|
|
13
|
+
#include <momentum/io/gltf/gltf_file_format.h>
|
|
14
|
+
#include <momentum/math/types.h>
|
|
15
|
+
|
|
16
|
+
#include <fx/gltf.h>
|
|
17
|
+
#include <gsl/span>
|
|
18
|
+
|
|
19
|
+
#include <tuple>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
namespace momentum {
|
|
23
|
+
|
|
24
|
+
struct GltfOptions {
|
|
25
|
+
bool extensions = true;
|
|
26
|
+
bool collisions = true;
|
|
27
|
+
bool locators = true;
|
|
28
|
+
bool mesh = true;
|
|
29
|
+
bool blendShapes = true;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
Character loadGltfCharacter(const fx::gltf::Document& model);
|
|
33
|
+
|
|
34
|
+
Character loadGltfCharacter(const filesystem::path& gltfFilename);
|
|
35
|
+
|
|
36
|
+
Character loadGltfCharacter(gsl::span<const std::byte> byteSpan);
|
|
37
|
+
|
|
38
|
+
std::tuple<MotionParameters, IdentityParameters, float> loadMotion(
|
|
39
|
+
const filesystem::path& gltfFilename);
|
|
40
|
+
|
|
41
|
+
/// Load a glTF character from a local file path.
|
|
42
|
+
///
|
|
43
|
+
/// This function assumes the file format of the given path is glTF without checking the extension,
|
|
44
|
+
/// so please ensure the file is in glTF format.
|
|
45
|
+
///
|
|
46
|
+
/// @param[in] filepath The path to the glTF character file.
|
|
47
|
+
/// @return A tuple containing the loaded Character object, the motion represented in model
|
|
48
|
+
/// parameters, the identity vector represented as joint parameters, and the fps.
|
|
49
|
+
std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
|
|
50
|
+
const filesystem::path& gltfFilename);
|
|
51
|
+
|
|
52
|
+
/// Load a glTF character from a buffer.
|
|
53
|
+
///
|
|
54
|
+
/// @param[in] byteSpan The buffer containing the glTF character data.
|
|
55
|
+
/// @return A tuple containing the loaded Character object, the motion represented in model
|
|
56
|
+
/// parameters, the identity vector represented as joint parameters, and the fps.
|
|
57
|
+
std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
|
|
58
|
+
gsl::span<const std::byte> byteSpan);
|
|
59
|
+
|
|
60
|
+
/// Load a GLTF Character with motion in the form of skeleton states (transform matrices)
|
|
61
|
+
///
|
|
62
|
+
/// Unlike the other loadCharacterWithMotion functions, this function does not require the
|
|
63
|
+
/// file to be saved using momentum's functionality that saves model parameters in a
|
|
64
|
+
/// custom GTLF extension, however the resulting skeleton states may be harder to work with.
|
|
65
|
+
std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
|
|
66
|
+
loadCharacterWithSkeletonStates(gsl::span<const std::byte> byteSpan);
|
|
67
|
+
|
|
68
|
+
std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
|
|
69
|
+
loadCharacterWithSkeletonStates(const filesystem::path& gltfFilename);
|
|
70
|
+
|
|
71
|
+
/// Maps the loaded motion onto the input character by matching joint names and parameter names.
|
|
72
|
+
///
|
|
73
|
+
/// This function assumes the file format of the given path is glTF without checking the extension,
|
|
74
|
+
/// so please ensure the file is in glTF format.
|
|
75
|
+
///
|
|
76
|
+
/// @param[in] gltfFilename The path to the glTF motion file.
|
|
77
|
+
/// @param[in] character The Character object to map the motion onto.
|
|
78
|
+
/// @return A tuple containing the motion represented in model parameters, the identity vector
|
|
79
|
+
/// represented as joint parameters, and the fps. The model parameters and joint parameters are
|
|
80
|
+
/// mapped to the input character by name matching.
|
|
81
|
+
std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
|
|
82
|
+
const filesystem::path& gltfFilename,
|
|
83
|
+
const Character& character);
|
|
84
|
+
|
|
85
|
+
/// Buffer version of loadMotionOnCharacter()
|
|
86
|
+
///
|
|
87
|
+
/// @param[in] byteSpan The buffer containing the glTF motion data.
|
|
88
|
+
/// @param[in] character The Character object to map the motion onto.
|
|
89
|
+
/// @return A tuple containing the motion represented in model parameters, the identity vector
|
|
90
|
+
/// represented as joint parameters, and the fps. The model parameters and joint parameters are
|
|
91
|
+
/// mapped to the input character by name matching.
|
|
92
|
+
std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
|
|
93
|
+
gsl::span<const std::byte> byteSpan,
|
|
94
|
+
const Character& character);
|
|
95
|
+
|
|
96
|
+
/// Loads a MarkerSequence from a file.
|
|
97
|
+
///
|
|
98
|
+
/// @param[in] filename Path to the file containing the MarkerSequence data.
|
|
99
|
+
/// @return A MarkerSequence object containing motion capture marker data.
|
|
100
|
+
MarkerSequence loadMarkerSequence(const filesystem::path& filename);
|
|
101
|
+
|
|
102
|
+
fx::gltf::Document makeCharacterDocument(
|
|
103
|
+
const Character& character,
|
|
104
|
+
float fps = 120.0f,
|
|
105
|
+
const MotionParameters& motion = {},
|
|
106
|
+
const IdentityParameters& offsets = {},
|
|
107
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
108
|
+
bool embedResource = true,
|
|
109
|
+
const GltfOptions& options = GltfOptions());
|
|
110
|
+
|
|
111
|
+
/// Saves character motion to a glb file.
|
|
112
|
+
///
|
|
113
|
+
/// @param[in] motion The model parameters representing the motion of the character (numModelParams,
|
|
114
|
+
/// numFrames)
|
|
115
|
+
/// @param[in] offsets Offset values per joint capturing the skeleton bone lengths using translation
|
|
116
|
+
/// and scale offset (7*numJoints, 1)
|
|
117
|
+
void saveCharacter(
|
|
118
|
+
const filesystem::path& filename,
|
|
119
|
+
const Character& Character,
|
|
120
|
+
float fps = 120.0f,
|
|
121
|
+
const MotionParameters& motion = {},
|
|
122
|
+
const IdentityParameters& offsets = {},
|
|
123
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
124
|
+
GltfFileFormat fileFormat = GltfFileFormat::Extension,
|
|
125
|
+
const GltfOptions& options = GltfOptions());
|
|
126
|
+
|
|
127
|
+
/// Saves character skeleton states to a glb file.
|
|
128
|
+
///
|
|
129
|
+
/// @param[in] skeletonStates The skeleton states for each frame of the motion sequence (numFrames,
|
|
130
|
+
/// numJoints, 8)
|
|
131
|
+
void saveCharacter(
|
|
132
|
+
const filesystem::path& filename,
|
|
133
|
+
const Character& Character,
|
|
134
|
+
float fps,
|
|
135
|
+
gsl::span<const SkeletonState> skeletonStates,
|
|
136
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
137
|
+
GltfFileFormat fileFormat = GltfFileFormat::Extension,
|
|
138
|
+
const GltfOptions& options = GltfOptions());
|
|
139
|
+
|
|
140
|
+
std::vector<std::byte> saveCharacterToBytes(
|
|
141
|
+
const Character& character,
|
|
142
|
+
float fps = 120.0f,
|
|
143
|
+
const MotionParameters& motion = {},
|
|
144
|
+
const IdentityParameters& offsets = {},
|
|
145
|
+
const std::vector<std::vector<Marker>>& markerSequence = {},
|
|
146
|
+
const GltfOptions& options = GltfOptions());
|
|
147
|
+
|
|
148
|
+
} // namespace momentum
|
|
@@ -0,0 +1,299 @@
|
|
|
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/common/exception.h"
|
|
11
|
+
|
|
12
|
+
#include <fx/gltf.h>
|
|
13
|
+
#include <gsl/span_ext>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
static inline int32_t getComponentSize(const fx::gltf::Accessor::ComponentType& componentType) {
|
|
18
|
+
switch (componentType) {
|
|
19
|
+
case fx::gltf::Accessor::ComponentType::Byte:
|
|
20
|
+
case fx::gltf::Accessor::ComponentType::UnsignedByte:
|
|
21
|
+
return 1;
|
|
22
|
+
case fx::gltf::Accessor::ComponentType::Short:
|
|
23
|
+
case fx::gltf::Accessor::ComponentType::UnsignedShort:
|
|
24
|
+
return 2;
|
|
25
|
+
// case fx::gltf::Accessor::ComponentType::Int:
|
|
26
|
+
case fx::gltf::Accessor::ComponentType::UnsignedInt:
|
|
27
|
+
case fx::gltf::Accessor::ComponentType::Float:
|
|
28
|
+
return 4;
|
|
29
|
+
default:
|
|
30
|
+
return -1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
static inline int32_t getTypeSize(const fx::gltf::Accessor::Type& ty) {
|
|
35
|
+
switch (ty) {
|
|
36
|
+
case fx::gltf::Accessor::Type::Scalar:
|
|
37
|
+
return 1;
|
|
38
|
+
case fx::gltf::Accessor::Type::Vec2:
|
|
39
|
+
return 2;
|
|
40
|
+
case fx::gltf::Accessor::Type::Vec3:
|
|
41
|
+
return 3;
|
|
42
|
+
case fx::gltf::Accessor::Type::Vec4:
|
|
43
|
+
case fx::gltf::Accessor::Type::Mat2:
|
|
44
|
+
return 4;
|
|
45
|
+
case fx::gltf::Accessor::Type::Mat3:
|
|
46
|
+
return 9;
|
|
47
|
+
case fx::gltf::Accessor::Type::Mat4:
|
|
48
|
+
return 16;
|
|
49
|
+
default:
|
|
50
|
+
return -1;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
template <typename T>
|
|
55
|
+
std::vector<T> copyAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
|
|
56
|
+
const auto& accessor = model.accessors[id];
|
|
57
|
+
|
|
58
|
+
const auto tsize = getTypeSize(accessor.type);
|
|
59
|
+
const auto csize = getComponentSize(accessor.componentType);
|
|
60
|
+
const auto elsize = tsize * csize;
|
|
61
|
+
|
|
62
|
+
if (elsize != sizeof(T)) {
|
|
63
|
+
MT_LOGW(
|
|
64
|
+
"[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
|
|
65
|
+
__func__,
|
|
66
|
+
sizeof(T),
|
|
67
|
+
csize,
|
|
68
|
+
tsize);
|
|
69
|
+
return {};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const auto& view = model.bufferViews[accessor.bufferView];
|
|
73
|
+
const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
|
|
74
|
+
|
|
75
|
+
const auto& buf = model.buffers[view.buffer];
|
|
76
|
+
auto bytes = gsl::as_bytes(gsl::make_span(buf.data));
|
|
77
|
+
bytes = bytes.subspan(view.byteOffset, view.byteLength);
|
|
78
|
+
bytes = bytes.subspan(accessor.byteOffset);
|
|
79
|
+
|
|
80
|
+
std::vector<T> r(accessor.count);
|
|
81
|
+
for (size_t i = 0; i < accessor.count; i++) {
|
|
82
|
+
std::memcpy(&r[i], &bytes[i * stride], elsize);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
return r;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
template <typename T>
|
|
89
|
+
std::vector<T> copyAlignedAccessorBuffer(const fx::gltf::Document& model, int32_t id) {
|
|
90
|
+
const auto& accessor = model.accessors[id];
|
|
91
|
+
if (accessor.count == 0) {
|
|
92
|
+
MT_LOGW("Accessor count zero.");
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const auto tsize = getTypeSize(accessor.type);
|
|
97
|
+
const auto csize = getComponentSize(accessor.componentType);
|
|
98
|
+
const auto elsize = tsize * csize;
|
|
99
|
+
|
|
100
|
+
if (elsize != sizeof(T)) {
|
|
101
|
+
MT_LOGW(
|
|
102
|
+
"[{}] Accessor type mismatch. Expect to read {} bytes, but got type of {} bytes with {} components",
|
|
103
|
+
__func__,
|
|
104
|
+
sizeof(T),
|
|
105
|
+
csize,
|
|
106
|
+
tsize);
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const auto& view = model.bufferViews[accessor.bufferView];
|
|
111
|
+
const auto stride = view.byteStride == 0 ? elsize : view.byteStride;
|
|
112
|
+
|
|
113
|
+
const auto& buf = model.buffers[view.buffer];
|
|
114
|
+
auto bytes = gsl::as_bytes(gsl::make_span(buf.data));
|
|
115
|
+
bytes = bytes.subspan(view.byteOffset, view.byteLength);
|
|
116
|
+
bytes = bytes.subspan(accessor.byteOffset);
|
|
117
|
+
|
|
118
|
+
std::vector<T> r(accessor.count);
|
|
119
|
+
for (size_t i = 0; i < accessor.count; i++) {
|
|
120
|
+
std::memcpy(&r[i], &bytes[i * stride], elsize);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return r;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// template to set accessor
|
|
127
|
+
template <typename T>
|
|
128
|
+
void setAccessorType(fx::gltf::Accessor& /* accessor */) {
|
|
129
|
+
MT_THROW("Unsupported data type {}", typeid(T).name());
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// create accessor buffer
|
|
133
|
+
template <typename T>
|
|
134
|
+
int32_t createAccessorBuffer(
|
|
135
|
+
fx::gltf::Document& model,
|
|
136
|
+
gsl::span<T> data,
|
|
137
|
+
const bool align = false,
|
|
138
|
+
const bool normalized = false) {
|
|
139
|
+
// gltf 2.0 allows multiple buffers, but only the first buffer will be stored in
|
|
140
|
+
// the binary file, all other ones need to be external files. Because of this we will
|
|
141
|
+
// only ever store data in the first buffer
|
|
142
|
+
|
|
143
|
+
// check if we have a buffer
|
|
144
|
+
if (model.buffers.empty()) {
|
|
145
|
+
model.buffers.resize(1);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// create buffer for data
|
|
149
|
+
const size_t bufferIdx = 0;
|
|
150
|
+
auto& buffer = model.buffers.front();
|
|
151
|
+
|
|
152
|
+
// copy data from input buffer to output buffer
|
|
153
|
+
const size_t bufferDataStart = buffer.data.size();
|
|
154
|
+
const auto elementSize = sizeof(T);
|
|
155
|
+
auto alignedElementSize = elementSize;
|
|
156
|
+
auto dataSize = data.size() * alignedElementSize;
|
|
157
|
+
|
|
158
|
+
// check for necessary alignment
|
|
159
|
+
if (align && alignedElementSize % 4 != 0) {
|
|
160
|
+
// element is not aligned, need to get bigger element size
|
|
161
|
+
alignedElementSize = ((elementSize / 4) + 1) * 4;
|
|
162
|
+
dataSize = data.size() * alignedElementSize;
|
|
163
|
+
buffer.data.resize(bufferDataStart + dataSize);
|
|
164
|
+
// need to go over each element one by one to copy
|
|
165
|
+
for (size_t e = 0; e < data.size(); e++) {
|
|
166
|
+
std::memcpy(&buffer.data[bufferDataStart + alignedElementSize * e], &data[e], elementSize);
|
|
167
|
+
}
|
|
168
|
+
buffer.byteLength = buffer.data.size();
|
|
169
|
+
} else {
|
|
170
|
+
// no alignment needed or already aligned, just copy data in
|
|
171
|
+
buffer.data.resize(bufferDataStart + dataSize);
|
|
172
|
+
std::memcpy(&buffer.data[bufferDataStart], data.data(), dataSize);
|
|
173
|
+
buffer.byteLength = buffer.data.size();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// create bufferview
|
|
177
|
+
const size_t bufferViewIdx = model.bufferViews.size();
|
|
178
|
+
model.bufferViews.emplace_back();
|
|
179
|
+
auto& bufferView = model.bufferViews.back();
|
|
180
|
+
|
|
181
|
+
bufferView.buffer = bufferIdx;
|
|
182
|
+
bufferView.byteLength = dataSize;
|
|
183
|
+
bufferView.byteOffset = bufferDataStart;
|
|
184
|
+
if (align && elementSize % 4 != 0) {
|
|
185
|
+
bufferView.byteStride = alignedElementSize;
|
|
186
|
+
} else {
|
|
187
|
+
bufferView.byteStride = 0;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// create accessor
|
|
191
|
+
const size_t accessorIdx = model.accessors.size();
|
|
192
|
+
model.accessors.emplace_back();
|
|
193
|
+
auto& accessor = model.accessors.back();
|
|
194
|
+
|
|
195
|
+
// set component type and accessor size depending on the type
|
|
196
|
+
setAccessorType<T>(accessor);
|
|
197
|
+
accessor.bufferView = bufferViewIdx;
|
|
198
|
+
accessor.byteOffset = 0;
|
|
199
|
+
accessor.count = data.size();
|
|
200
|
+
accessor.normalized = normalized;
|
|
201
|
+
|
|
202
|
+
return accessorIdx;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
template <>
|
|
206
|
+
inline void setAccessorType<const int32_t>(fx::gltf::Accessor& accessor) {
|
|
207
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
|
|
208
|
+
accessor.type = fx::gltf::Accessor::Type::Scalar;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
template <>
|
|
212
|
+
inline void setAccessorType<const float>(fx::gltf::Accessor& accessor) {
|
|
213
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
|
|
214
|
+
accessor.type = fx::gltf::Accessor::Type::Scalar;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
template <>
|
|
218
|
+
inline void setAccessorType<const Vector2f>(fx::gltf::Accessor& accessor) {
|
|
219
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
|
|
220
|
+
accessor.type = fx::gltf::Accessor::Type::Vec2;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
template <>
|
|
224
|
+
inline void setAccessorType<const Vector3f>(fx::gltf::Accessor& accessor) {
|
|
225
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
|
|
226
|
+
accessor.type = fx::gltf::Accessor::Type::Vec3;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
template <>
|
|
230
|
+
inline void setAccessorType<const Vector4f>(fx::gltf::Accessor& accessor) {
|
|
231
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
|
|
232
|
+
accessor.type = fx::gltf::Accessor::Type::Vec4;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
template <>
|
|
236
|
+
inline void setAccessorType<const Vector3b>(fx::gltf::Accessor& accessor) {
|
|
237
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedByte;
|
|
238
|
+
accessor.type = fx::gltf::Accessor::Type::Vec3;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
template <>
|
|
242
|
+
inline void setAccessorType<const Vector3i>(fx::gltf::Accessor& accessor) {
|
|
243
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedInt;
|
|
244
|
+
accessor.type = fx::gltf::Accessor::Type::Vec3;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
template <>
|
|
248
|
+
inline void setAccessorType<const Vector4s>(fx::gltf::Accessor& accessor) {
|
|
249
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::UnsignedShort;
|
|
250
|
+
accessor.type = fx::gltf::Accessor::Type::Vec4;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
template <>
|
|
254
|
+
inline void setAccessorType<const Matrix4f>(fx::gltf::Accessor& accessor) {
|
|
255
|
+
accessor.componentType = fx::gltf::Accessor::ComponentType::Float;
|
|
256
|
+
accessor.type = fx::gltf::Accessor::Type::Mat4;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// add animation
|
|
260
|
+
template <typename T>
|
|
261
|
+
int32_t createSampler(
|
|
262
|
+
fx::gltf::Document& model,
|
|
263
|
+
fx::gltf::Animation& anim,
|
|
264
|
+
gsl::span<T> data,
|
|
265
|
+
const gsl::span<float>& timestamps) {
|
|
266
|
+
MT_CHECK(
|
|
267
|
+
data.size() == timestamps.size(), "data: {}, timestmaps: {}", data.size(), timestamps.size());
|
|
268
|
+
|
|
269
|
+
// create new sampler
|
|
270
|
+
const int32_t index = anim.samplers.size();
|
|
271
|
+
anim.samplers.emplace_back();
|
|
272
|
+
auto& sampler = anim.samplers.back();
|
|
273
|
+
sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
|
|
274
|
+
sampler.input = createAccessorBuffer(model, timestamps);
|
|
275
|
+
sampler.output = createAccessorBuffer(model, data);
|
|
276
|
+
|
|
277
|
+
// return sampler index
|
|
278
|
+
return index;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
template <typename T>
|
|
282
|
+
int32_t createSampler(
|
|
283
|
+
fx::gltf::Document& model,
|
|
284
|
+
fx::gltf::Animation& anim,
|
|
285
|
+
gsl::span<T> data,
|
|
286
|
+
const int32_t timestampAccessor) {
|
|
287
|
+
// create new sampler
|
|
288
|
+
const int32_t index = anim.samplers.size();
|
|
289
|
+
anim.samplers.emplace_back();
|
|
290
|
+
auto& sampler = anim.samplers.back();
|
|
291
|
+
sampler.interpolation = fx::gltf::Animation::Sampler::Type::Step;
|
|
292
|
+
sampler.input = timestampAccessor;
|
|
293
|
+
sampler.output = createAccessorBuffer(model, data);
|
|
294
|
+
|
|
295
|
+
// return sampler index
|
|
296
|
+
return index;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
} // 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/constants.h>
|
|
11
|
+
#include <momentum/math/types.h>
|
|
12
|
+
|
|
13
|
+
namespace momentum {
|
|
14
|
+
|
|
15
|
+
// Utility functions to convert gltf coordinate system to momentum coordinate system.
|
|
16
|
+
// #TODO: load coordinates by setting up CoordinateSystems so we don't need to worry about
|
|
17
|
+
// conversion.
|
|
18
|
+
[[nodiscard]] inline Vector3f toMomentumVec3f(const std::array<float, 3>& vec) noexcept {
|
|
19
|
+
return Vector3f(vec[0], vec[1], vec[2]) * toCm();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
[[nodiscard]] inline Vector3f fromMomentumVec3f(const Vector3f& vec) noexcept {
|
|
23
|
+
return vec * toM();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
[[nodiscard]] inline Quaternionf toMomentumQuaternionf(
|
|
27
|
+
const std::array<float, 4>& gltfQuat) noexcept {
|
|
28
|
+
return {gltfQuat[3], gltfQuat[0], gltfQuat[1], gltfQuat[2]};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
[[nodiscard]] inline std::array<float, 4> fromMomentumQuaternionf(
|
|
32
|
+
const Quaternionf& quat) noexcept {
|
|
33
|
+
return {quat.x(), quat.y(), quat.z(), quat.w()};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
inline void toMomentumVec3f(std::vector<Vector3f>& vec) {
|
|
37
|
+
if (vec.empty()) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toCm();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
inline void fromMomentumVec3f(std::vector<Vector3f>& vec) {
|
|
45
|
+
if (vec.empty()) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
Map<VectorXf>(&vec[0][0], vec.size() * 3) *= toM();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
inline void fromMomentumVec3f(VectorXf& vec) {
|
|
53
|
+
if (vec.size() == 0) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
vec *= toM();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
} // namespace momentum
|
|
@@ -0,0 +1,102 @@
|
|
|
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/parameter_limits.h>
|
|
11
|
+
#include <momentum/character/parameter_transform.h>
|
|
12
|
+
|
|
13
|
+
#include <nlohmann/json.hpp>
|
|
14
|
+
#include <Eigen/Core>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
// Converts Eigen matrix or vector types to nlohmann::json
|
|
19
|
+
//
|
|
20
|
+
// Note: We intentionally avoid defining nlohmann::adl_serializers for type conversion between Eigen
|
|
21
|
+
// types and nlohmann::json to prevent multiple definitions of the same type in different projects
|
|
22
|
+
// that are compiled in a single translation unit. Instead, we recommend using explicit conversion
|
|
23
|
+
// between the types using the toJson() and fromJson() functions provided in this header.
|
|
24
|
+
template <typename Derived>
|
|
25
|
+
void toJson(const Eigen::MatrixBase<Derived>& mat, nlohmann::json& j) {
|
|
26
|
+
// always save new format that's numpy compatible
|
|
27
|
+
// this works for both dynamic and statically sized matrices
|
|
28
|
+
j = nlohmann::json::array();
|
|
29
|
+
for (int col_i = 0; col_i < mat.cols(); ++col_i) {
|
|
30
|
+
nlohmann::json jcol = nlohmann::json::array();
|
|
31
|
+
for (int row_i = 0; row_i < mat.rows(); ++row_i) {
|
|
32
|
+
jcol.push_back(mat(row_i, col_i));
|
|
33
|
+
}
|
|
34
|
+
j.push_back(jcol);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Converts nlohmann::json to Eigen matrix or vector types
|
|
39
|
+
template <typename T>
|
|
40
|
+
T fromJson(const nlohmann::json& j) {
|
|
41
|
+
T result;
|
|
42
|
+
|
|
43
|
+
// partially dynamic matrix
|
|
44
|
+
if constexpr (T::RowsAtCompileTime == Eigen::Dynamic || T::ColsAtCompileTime == Eigen::Dynamic) {
|
|
45
|
+
// dynamic size matrix
|
|
46
|
+
// reads dimensions from the json
|
|
47
|
+
const auto numCols = j.size();
|
|
48
|
+
if (numCols > 0) {
|
|
49
|
+
const auto numRows = j.at(0).size();
|
|
50
|
+
result.resize(numRows, numCols);
|
|
51
|
+
|
|
52
|
+
for (int col_i = 0; col_i < numCols; ++col_i) {
|
|
53
|
+
std::vector<typename T::Scalar> coef = j[col_i];
|
|
54
|
+
std::copy(coef.begin(), coef.end(), result.col(col_i).begin());
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// fixed size matrix or vector
|
|
59
|
+
else {
|
|
60
|
+
const int Rows = T::RowsAtCompileTime;
|
|
61
|
+
const int Cols = T::ColsAtCompileTime;
|
|
62
|
+
|
|
63
|
+
// vector stored as array
|
|
64
|
+
if (Rows == 1 && Cols != -1 && j.size() == Cols &&
|
|
65
|
+
j[0].type() != nlohmann::json::value_t::array) {
|
|
66
|
+
std::vector<typename T::Scalar> coef = j;
|
|
67
|
+
std::copy(coef.begin(), coef.end(), result.row(0).begin());
|
|
68
|
+
} else if (
|
|
69
|
+
Cols == 1 && Rows != -1 && j.size() == Rows &&
|
|
70
|
+
j[0].type() != nlohmann::json::value_t::array) {
|
|
71
|
+
std::vector<typename T::Scalar> coef = j;
|
|
72
|
+
std::copy(coef.begin(), coef.end(), result.col(0).begin());
|
|
73
|
+
}
|
|
74
|
+
// fixed size matrix
|
|
75
|
+
else {
|
|
76
|
+
const auto numCols = j.size();
|
|
77
|
+
if (numCols > 0) {
|
|
78
|
+
for (int col_i = 0; col_i < Cols; ++col_i) {
|
|
79
|
+
std::vector<typename T::Scalar> coef = j[col_i];
|
|
80
|
+
std::copy(coef.begin(), coef.end(), result.col(col_i).begin());
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// to json conversion functions
|
|
90
|
+
void parameterLimitsToJson(const Character& character, nlohmann::json& j);
|
|
91
|
+
void parameterSetsToJson(const Character& character, nlohmann::json& j);
|
|
92
|
+
void poseConstraintsToJson(const Character& character, nlohmann::json& j);
|
|
93
|
+
void parameterTransformToJson(const Character& character, nlohmann::json& j);
|
|
94
|
+
void mppcaToJson(const Character& character, nlohmann::json& j);
|
|
95
|
+
|
|
96
|
+
// from json conversion functions
|
|
97
|
+
ParameterLimits parameterLimitsFromJson(const Character& character, const nlohmann::json& j);
|
|
98
|
+
ParameterSets parameterSetsFromJson(const Character& character, const nlohmann::json& j);
|
|
99
|
+
PoseConstraints poseConstraintsFromJson(const Character& character, const nlohmann::json& j);
|
|
100
|
+
ParameterTransform parameterTransformFromJson(const Character& character, const nlohmann::json& j);
|
|
101
|
+
|
|
102
|
+
} // namespace momentum
|
|
@@ -0,0 +1,70 @@
|
|
|
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/collision_geometry.h>
|
|
11
|
+
#include <momentum/character/fwd.h>
|
|
12
|
+
#include <momentum/character/locator.h>
|
|
13
|
+
#include <momentum/math/fwd.h>
|
|
14
|
+
|
|
15
|
+
#include <nlohmann/json.hpp>
|
|
16
|
+
#include <gsl/span>
|
|
17
|
+
#include <string>
|
|
18
|
+
|
|
19
|
+
namespace momentum {
|
|
20
|
+
|
|
21
|
+
/// Loads a Character from a legacy JSON format that was previously used by older Python libraries
|
|
22
|
+
/// (and some other tools).
|
|
23
|
+
///
|
|
24
|
+
/// The legacy JSON format contains:
|
|
25
|
+
/// - "skeleton": FBX skeleton structure with joints, hierarchy, and transforms
|
|
26
|
+
/// - "skinnedmodel": Mesh data with skinning weights
|
|
27
|
+
/// - "collision": Optional collision geometry (tapered capsules)
|
|
28
|
+
///
|
|
29
|
+
/// @param[in] jsonPath Path to the legacy JSON file
|
|
30
|
+
/// @return The loaded Character object
|
|
31
|
+
/// @throws std::runtime_error if the file cannot be loaded or parsed
|
|
32
|
+
[[nodiscard]] Character loadCharacterFromLegacyJson(const std::string& jsonPath);
|
|
33
|
+
|
|
34
|
+
/// Loads a Character from a legacy JSON buffer.
|
|
35
|
+
///
|
|
36
|
+
/// @param[in] jsonBuffer Buffer containing the legacy JSON data
|
|
37
|
+
/// @return The loaded Character object
|
|
38
|
+
/// @throws std::runtime_error if the buffer cannot be parsed
|
|
39
|
+
[[nodiscard]] Character loadCharacterFromLegacyJsonBuffer(gsl::span<const std::byte> jsonBuffer);
|
|
40
|
+
|
|
41
|
+
/// Loads a Character from a legacy JSON string.
|
|
42
|
+
///
|
|
43
|
+
/// @param[in] jsonString String containing the legacy JSON data
|
|
44
|
+
/// @return The loaded Character object
|
|
45
|
+
/// @throws std::runtime_error if the string cannot be parsed
|
|
46
|
+
[[nodiscard]] Character loadCharacterFromLegacyJsonString(const std::string& jsonString);
|
|
47
|
+
|
|
48
|
+
/// Saves a Character to legacy JSON format.
|
|
49
|
+
///
|
|
50
|
+
/// This function converts a momentum::Character back to the legacy JSON format
|
|
51
|
+
/// for compatibility with existing tools and workflows.
|
|
52
|
+
///
|
|
53
|
+
/// @param[in] character The Character to save
|
|
54
|
+
/// @param[in] jsonPath Path where to save the legacy JSON file
|
|
55
|
+
/// @throws std::runtime_error if the file cannot be written
|
|
56
|
+
void saveCharacterToLegacyJson(const Character& character, const std::string& jsonPath);
|
|
57
|
+
|
|
58
|
+
/// Converts a Character to legacy JSON string.
|
|
59
|
+
///
|
|
60
|
+
/// @param[in] character The Character to convert
|
|
61
|
+
/// @return String containing the legacy JSON representation
|
|
62
|
+
[[nodiscard]] std::string characterToLegacyJsonString(const Character& character);
|
|
63
|
+
|
|
64
|
+
/// Converts a Character to legacy JSON object.
|
|
65
|
+
///
|
|
66
|
+
/// @param[in] character The Character to convert
|
|
67
|
+
/// @return nlohmann::json object containing the legacy JSON representation
|
|
68
|
+
[[nodiscard]] nlohmann::json characterToLegacyJson(const Character& character);
|
|
69
|
+
|
|
70
|
+
} // namespace momentum
|