pymomentum-cpu 0.1.93.post0__cp312-cp312-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- include/axel/BoundingBox.h +59 -0
- include/axel/Bvh.h +708 -0
- include/axel/BvhBase.h +75 -0
- include/axel/BvhCommon.h +43 -0
- include/axel/BvhEmbree.h +87 -0
- include/axel/BvhFactory.h +34 -0
- include/axel/Checks.h +21 -0
- include/axel/DualContouring.h +79 -0
- include/axel/KdTree.h +208 -0
- include/axel/Log.h +22 -0
- include/axel/MeshToSdf.h +123 -0
- include/axel/Profile.h +64 -0
- include/axel/Ray.h +45 -0
- include/axel/SignedDistanceField.h +248 -0
- include/axel/SimdKdTree.h +515 -0
- include/axel/TriBvh.h +157 -0
- include/axel/TriBvhEmbree.h +57 -0
- include/axel/common/Constants.h +27 -0
- include/axel/common/Types.h +21 -0
- include/axel/common/VectorizationTypes.h +58 -0
- include/axel/math/BoundingBoxUtils.h +54 -0
- include/axel/math/ContinuousCollisionDetection.h +48 -0
- include/axel/math/CoplanarityCheck.h +30 -0
- include/axel/math/EdgeEdgeDistance.h +31 -0
- include/axel/math/MeshHoleFilling.h +117 -0
- include/axel/math/PointTriangleProjection.h +34 -0
- include/axel/math/PointTriangleProjectionDefinitions.h +209 -0
- include/axel/math/RayTriangleIntersection.h +36 -0
- include/momentum/character/blend_shape.h +97 -0
- include/momentum/character/blend_shape_base.h +86 -0
- include/momentum/character/blend_shape_skinning.h +96 -0
- include/momentum/character/character.h +272 -0
- include/momentum/character/character_state.h +108 -0
- include/momentum/character/character_utility.h +128 -0
- include/momentum/character/collision_geometry.h +80 -0
- include/momentum/character/collision_geometry_state.h +130 -0
- include/momentum/character/fwd.h +262 -0
- include/momentum/character/inverse_parameter_transform.h +58 -0
- include/momentum/character/joint.h +82 -0
- include/momentum/character/joint_state.h +241 -0
- include/momentum/character/linear_skinning.h +139 -0
- include/momentum/character/locator.h +94 -0
- include/momentum/character/locator_state.h +43 -0
- include/momentum/character/marker.h +48 -0
- include/momentum/character/mesh_state.h +71 -0
- include/momentum/character/parameter_limits.h +144 -0
- include/momentum/character/parameter_transform.h +207 -0
- include/momentum/character/pose_shape.h +65 -0
- include/momentum/character/skeleton.h +85 -0
- include/momentum/character/skeleton_state.h +227 -0
- include/momentum/character/skeleton_utility.h +38 -0
- include/momentum/character/skin_weights.h +67 -0
- include/momentum/character/skinned_locator.h +80 -0
- include/momentum/character/types.h +202 -0
- include/momentum/character_sequence_solver/fwd.h +200 -0
- include/momentum/character_sequence_solver/model_parameters_sequence_error_function.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver.h +65 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +82 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +104 -0
- include/momentum/character_sequence_solver/sequence_solver.h +155 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +158 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +117 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +123 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +92 -0
- include/momentum/character_solver/collision_error_function_stateless.h +75 -0
- include/momentum/character_solver/constraint_error_function-inl.h +324 -0
- include/momentum/character_solver/constraint_error_function.h +248 -0
- include/momentum/character_solver/distance_error_function.h +77 -0
- include/momentum/character_solver/error_function_utils.h +60 -0
- include/momentum/character_solver/fixed_axis_error_function.h +139 -0
- include/momentum/character_solver/fwd.h +943 -0
- include/momentum/character_solver/gauss_newton_solver_qr.h +64 -0
- include/momentum/character_solver/height_error_function.h +176 -0
- include/momentum/character_solver/joint_to_joint_distance_error_function.h +111 -0
- include/momentum/character_solver/limit_error_function.h +57 -0
- include/momentum/character_solver/model_parameters_error_function.h +64 -0
- include/momentum/character_solver/normal_error_function.h +73 -0
- include/momentum/character_solver/orientation_error_function.h +74 -0
- include/momentum/character_solver/plane_error_function.h +102 -0
- include/momentum/character_solver/point_triangle_vertex_error_function.h +141 -0
- include/momentum/character_solver/pose_prior_error_function.h +80 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +93 -0
- include/momentum/character_solver/simd_collision_error_function.h +99 -0
- include/momentum/character_solver/simd_normal_error_function.h +157 -0
- include/momentum/character_solver/simd_plane_error_function.h +164 -0
- include/momentum/character_solver/simd_position_error_function.h +165 -0
- include/momentum/character_solver/skeleton_error_function.h +151 -0
- include/momentum/character_solver/skeleton_solver_function.h +94 -0
- include/momentum/character_solver/skinned_locator_error_function.h +166 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +146 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +119 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +80 -0
- include/momentum/character_solver/vertex_error_function.h +155 -0
- include/momentum/character_solver/vertex_projection_error_function.h +117 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +147 -0
- include/momentum/common/aligned.h +155 -0
- include/momentum/common/checks.h +27 -0
- include/momentum/common/exception.h +70 -0
- include/momentum/common/filesystem.h +20 -0
- include/momentum/common/fwd.h +27 -0
- include/momentum/common/log.h +173 -0
- include/momentum/common/log_channel.h +17 -0
- include/momentum/common/memory.h +71 -0
- include/momentum/common/profile.h +79 -0
- include/momentum/common/progress_bar.h +37 -0
- include/momentum/common/string.h +52 -0
- include/momentum/diff_ik/ceres_utility.h +73 -0
- include/momentum/diff_ik/fully_differentiable_body_ik.h +58 -0
- include/momentum/diff_ik/fully_differentiable_distance_error_function.h +69 -0
- include/momentum/diff_ik/fully_differentiable_motion_error_function.h +46 -0
- include/momentum/diff_ik/fully_differentiable_orientation_error_function.h +114 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +138 -0
- include/momentum/diff_ik/fully_differentiable_projection_error_function.h +65 -0
- include/momentum/diff_ik/fully_differentiable_skeleton_error_function.h +160 -0
- include/momentum/diff_ik/fully_differentiable_state_error_function.h +54 -0
- include/momentum/diff_ik/fwd.h +385 -0
- include/momentum/diff_ik/union_error_function.h +67 -0
- include/momentum/gui/rerun/eigen_adapters.h +70 -0
- include/momentum/gui/rerun/logger.h +102 -0
- include/momentum/gui/rerun/logging_redirect.h +27 -0
- include/momentum/io/character_io.h +98 -0
- include/momentum/io/common/gsl_utils.h +50 -0
- include/momentum/io/common/stream_utils.h +65 -0
- include/momentum/io/fbx/fbx_io.h +135 -0
- include/momentum/io/fbx/fbx_memory_stream.h +70 -0
- include/momentum/io/fbx/openfbx_loader.h +62 -0
- include/momentum/io/fbx/polygon_data.h +60 -0
- include/momentum/io/file_save_options.h +107 -0
- include/momentum/io/gltf/gltf_builder.h +141 -0
- include/momentum/io/gltf/gltf_io.h +149 -0
- include/momentum/io/gltf/utils/accessor_utils.h +299 -0
- include/momentum/io/gltf/utils/coordinate_utils.h +60 -0
- include/momentum/io/gltf/utils/json_utils.h +102 -0
- include/momentum/io/legacy_json/legacy_json_io.h +70 -0
- include/momentum/io/marker/c3d_io.h +30 -0
- include/momentum/io/marker/conversions.h +57 -0
- include/momentum/io/marker/coordinate_system.h +30 -0
- include/momentum/io/marker/marker_io.h +56 -0
- include/momentum/io/marker/trc_io.h +27 -0
- include/momentum/io/motion/mmo_io.h +97 -0
- include/momentum/io/shape/blend_shape_io.h +82 -0
- include/momentum/io/shape/pose_shape_io.h +21 -0
- include/momentum/io/skeleton/locator_io.h +41 -0
- include/momentum/io/skeleton/mppca_io.h +26 -0
- include/momentum/io/skeleton/parameter_limits_io.h +38 -0
- include/momentum/io/skeleton/parameter_transform_io.h +80 -0
- include/momentum/io/skeleton/parameters_io.h +20 -0
- include/momentum/io/skeleton/utility.h +67 -0
- include/momentum/io/urdf/urdf_io.h +26 -0
- include/momentum/io/usd/usd_io.h +36 -0
- include/momentum/marker_tracking/app_utils.h +64 -0
- include/momentum/marker_tracking/marker_tracker.h +221 -0
- include/momentum/marker_tracking/process_markers.h +58 -0
- include/momentum/marker_tracking/tracker_utils.h +99 -0
- include/momentum/math/constants.h +82 -0
- include/momentum/math/covariance_matrix.h +84 -0
- include/momentum/math/fmt_eigen.h +23 -0
- include/momentum/math/fwd.h +132 -0
- include/momentum/math/generalized_loss.h +61 -0
- include/momentum/math/intersection.h +32 -0
- include/momentum/math/mesh.h +84 -0
- include/momentum/math/mppca.h +67 -0
- include/momentum/math/online_householder_qr.h +516 -0
- include/momentum/math/random-inl.h +404 -0
- include/momentum/math/random.h +310 -0
- include/momentum/math/simd_generalized_loss.h +40 -0
- include/momentum/math/transform.h +229 -0
- include/momentum/math/types.h +461 -0
- include/momentum/math/utility.h +324 -0
- include/momentum/rasterizer/camera.h +453 -0
- include/momentum/rasterizer/fwd.h +102 -0
- include/momentum/rasterizer/geometry.h +83 -0
- include/momentum/rasterizer/image.h +18 -0
- include/momentum/rasterizer/rasterizer.h +583 -0
- include/momentum/rasterizer/tensor.h +140 -0
- include/momentum/rasterizer/text_rasterizer.h +89 -0
- include/momentum/rasterizer/utility.h +268 -0
- include/momentum/simd/simd.h +221 -0
- include/momentum/solver/fwd.h +131 -0
- include/momentum/solver/gauss_newton_solver.h +136 -0
- include/momentum/solver/gradient_descent_solver.h +65 -0
- include/momentum/solver/solver.h +155 -0
- include/momentum/solver/solver_function.h +126 -0
- include/momentum/solver/subset_gauss_newton_solver.h +109 -0
- include/rerun/archetypes/annotation_context.hpp +157 -0
- include/rerun/archetypes/arrows2d.hpp +271 -0
- include/rerun/archetypes/arrows3d.hpp +257 -0
- include/rerun/archetypes/asset3d.hpp +262 -0
- include/rerun/archetypes/asset_video.hpp +275 -0
- include/rerun/archetypes/bar_chart.hpp +261 -0
- include/rerun/archetypes/boxes2d.hpp +293 -0
- include/rerun/archetypes/boxes3d.hpp +369 -0
- include/rerun/archetypes/capsules3d.hpp +333 -0
- include/rerun/archetypes/clear.hpp +180 -0
- include/rerun/archetypes/depth_image.hpp +425 -0
- include/rerun/archetypes/ellipsoids3d.hpp +384 -0
- include/rerun/archetypes/encoded_image.hpp +250 -0
- include/rerun/archetypes/geo_line_strings.hpp +166 -0
- include/rerun/archetypes/geo_points.hpp +177 -0
- include/rerun/archetypes/graph_edges.hpp +152 -0
- include/rerun/archetypes/graph_nodes.hpp +206 -0
- include/rerun/archetypes/image.hpp +434 -0
- include/rerun/archetypes/instance_poses3d.hpp +221 -0
- include/rerun/archetypes/line_strips2d.hpp +289 -0
- include/rerun/archetypes/line_strips3d.hpp +270 -0
- include/rerun/archetypes/mesh3d.hpp +387 -0
- include/rerun/archetypes/pinhole.hpp +385 -0
- include/rerun/archetypes/points2d.hpp +333 -0
- include/rerun/archetypes/points3d.hpp +369 -0
- include/rerun/archetypes/recording_properties.hpp +132 -0
- include/rerun/archetypes/scalar.hpp +170 -0
- include/rerun/archetypes/scalars.hpp +153 -0
- include/rerun/archetypes/segmentation_image.hpp +305 -0
- include/rerun/archetypes/series_line.hpp +274 -0
- include/rerun/archetypes/series_lines.hpp +271 -0
- include/rerun/archetypes/series_point.hpp +265 -0
- include/rerun/archetypes/series_points.hpp +251 -0
- include/rerun/archetypes/tensor.hpp +213 -0
- include/rerun/archetypes/text_document.hpp +200 -0
- include/rerun/archetypes/text_log.hpp +211 -0
- include/rerun/archetypes/transform3d.hpp +925 -0
- include/rerun/archetypes/video_frame_reference.hpp +295 -0
- include/rerun/archetypes/view_coordinates.hpp +393 -0
- include/rerun/archetypes.hpp +43 -0
- include/rerun/arrow_utils.hpp +32 -0
- include/rerun/as_components.hpp +90 -0
- include/rerun/blueprint/archetypes/background.hpp +113 -0
- include/rerun/blueprint/archetypes/container_blueprint.hpp +259 -0
- include/rerun/blueprint/archetypes/dataframe_query.hpp +178 -0
- include/rerun/blueprint/archetypes/entity_behavior.hpp +130 -0
- include/rerun/blueprint/archetypes/force_center.hpp +115 -0
- include/rerun/blueprint/archetypes/force_collision_radius.hpp +141 -0
- include/rerun/blueprint/archetypes/force_link.hpp +136 -0
- include/rerun/blueprint/archetypes/force_many_body.hpp +124 -0
- include/rerun/blueprint/archetypes/force_position.hpp +132 -0
- include/rerun/blueprint/archetypes/line_grid3d.hpp +178 -0
- include/rerun/blueprint/archetypes/map_background.hpp +104 -0
- include/rerun/blueprint/archetypes/map_zoom.hpp +103 -0
- include/rerun/blueprint/archetypes/near_clip_plane.hpp +109 -0
- include/rerun/blueprint/archetypes/panel_blueprint.hpp +95 -0
- include/rerun/blueprint/archetypes/plot_legend.hpp +118 -0
- include/rerun/blueprint/archetypes/scalar_axis.hpp +116 -0
- include/rerun/blueprint/archetypes/tensor_scalar_mapping.hpp +146 -0
- include/rerun/blueprint/archetypes/tensor_slice_selection.hpp +167 -0
- include/rerun/blueprint/archetypes/tensor_view_fit.hpp +95 -0
- include/rerun/blueprint/archetypes/view_blueprint.hpp +170 -0
- include/rerun/blueprint/archetypes/view_contents.hpp +142 -0
- include/rerun/blueprint/archetypes/viewport_blueprint.hpp +200 -0
- include/rerun/blueprint/archetypes/visible_time_ranges.hpp +116 -0
- include/rerun/blueprint/archetypes/visual_bounds2d.hpp +109 -0
- include/rerun/blueprint/archetypes/visualizer_overrides.hpp +113 -0
- include/rerun/blueprint/archetypes.hpp +29 -0
- include/rerun/blueprint/components/active_tab.hpp +82 -0
- include/rerun/blueprint/components/apply_latest_at.hpp +79 -0
- include/rerun/blueprint/components/auto_layout.hpp +77 -0
- include/rerun/blueprint/components/auto_views.hpp +77 -0
- include/rerun/blueprint/components/background_kind.hpp +66 -0
- include/rerun/blueprint/components/column_share.hpp +78 -0
- include/rerun/blueprint/components/component_column_selector.hpp +81 -0
- include/rerun/blueprint/components/container_kind.hpp +65 -0
- include/rerun/blueprint/components/corner2d.hpp +64 -0
- include/rerun/blueprint/components/enabled.hpp +77 -0
- include/rerun/blueprint/components/filter_by_range.hpp +74 -0
- include/rerun/blueprint/components/filter_is_not_null.hpp +77 -0
- include/rerun/blueprint/components/force_distance.hpp +82 -0
- include/rerun/blueprint/components/force_iterations.hpp +82 -0
- include/rerun/blueprint/components/force_strength.hpp +82 -0
- include/rerun/blueprint/components/grid_columns.hpp +78 -0
- include/rerun/blueprint/components/grid_spacing.hpp +78 -0
- include/rerun/blueprint/components/included_content.hpp +86 -0
- include/rerun/blueprint/components/lock_range_during_zoom.hpp +82 -0
- include/rerun/blueprint/components/map_provider.hpp +64 -0
- include/rerun/blueprint/components/near_clip_plane.hpp +82 -0
- include/rerun/blueprint/components/panel_state.hpp +61 -0
- include/rerun/blueprint/components/query_expression.hpp +89 -0
- include/rerun/blueprint/components/root_container.hpp +77 -0
- include/rerun/blueprint/components/row_share.hpp +78 -0
- include/rerun/blueprint/components/selected_columns.hpp +76 -0
- include/rerun/blueprint/components/tensor_dimension_index_slider.hpp +90 -0
- include/rerun/blueprint/components/timeline_name.hpp +76 -0
- include/rerun/blueprint/components/view_class.hpp +76 -0
- include/rerun/blueprint/components/view_fit.hpp +61 -0
- include/rerun/blueprint/components/view_maximized.hpp +79 -0
- include/rerun/blueprint/components/view_origin.hpp +81 -0
- include/rerun/blueprint/components/viewer_recommendation_hash.hpp +82 -0
- include/rerun/blueprint/components/visible_time_range.hpp +77 -0
- include/rerun/blueprint/components/visual_bounds2d.hpp +74 -0
- include/rerun/blueprint/components/visualizer_override.hpp +86 -0
- include/rerun/blueprint/components/zoom_level.hpp +78 -0
- include/rerun/blueprint/components.hpp +41 -0
- include/rerun/blueprint/datatypes/component_column_selector.hpp +61 -0
- include/rerun/blueprint/datatypes/filter_by_range.hpp +59 -0
- include/rerun/blueprint/datatypes/filter_is_not_null.hpp +61 -0
- include/rerun/blueprint/datatypes/selected_columns.hpp +62 -0
- include/rerun/blueprint/datatypes/tensor_dimension_index_slider.hpp +63 -0
- include/rerun/blueprint/datatypes.hpp +9 -0
- include/rerun/c/arrow_c_data_interface.h +111 -0
- include/rerun/c/compiler_utils.h +10 -0
- include/rerun/c/rerun.h +627 -0
- include/rerun/c/sdk_info.h +28 -0
- include/rerun/collection.hpp +496 -0
- include/rerun/collection_adapter.hpp +43 -0
- include/rerun/collection_adapter_builtins.hpp +138 -0
- include/rerun/compiler_utils.hpp +61 -0
- include/rerun/component_batch.hpp +163 -0
- include/rerun/component_column.hpp +111 -0
- include/rerun/component_descriptor.hpp +142 -0
- include/rerun/component_type.hpp +35 -0
- include/rerun/components/aggregation_policy.hpp +76 -0
- include/rerun/components/albedo_factor.hpp +74 -0
- include/rerun/components/annotation_context.hpp +102 -0
- include/rerun/components/axis_length.hpp +74 -0
- include/rerun/components/blob.hpp +73 -0
- include/rerun/components/class_id.hpp +71 -0
- include/rerun/components/clear_is_recursive.hpp +75 -0
- include/rerun/components/color.hpp +99 -0
- include/rerun/components/colormap.hpp +99 -0
- include/rerun/components/depth_meter.hpp +84 -0
- include/rerun/components/draw_order.hpp +79 -0
- include/rerun/components/entity_path.hpp +83 -0
- include/rerun/components/fill_mode.hpp +72 -0
- include/rerun/components/fill_ratio.hpp +79 -0
- include/rerun/components/gamma_correction.hpp +80 -0
- include/rerun/components/geo_line_string.hpp +63 -0
- include/rerun/components/graph_edge.hpp +75 -0
- include/rerun/components/graph_node.hpp +79 -0
- include/rerun/components/graph_type.hpp +57 -0
- include/rerun/components/half_size2d.hpp +91 -0
- include/rerun/components/half_size3d.hpp +95 -0
- include/rerun/components/image_buffer.hpp +86 -0
- include/rerun/components/image_format.hpp +84 -0
- include/rerun/components/image_plane_distance.hpp +77 -0
- include/rerun/components/interactive.hpp +76 -0
- include/rerun/components/keypoint_id.hpp +74 -0
- include/rerun/components/lat_lon.hpp +89 -0
- include/rerun/components/length.hpp +77 -0
- include/rerun/components/line_strip2d.hpp +73 -0
- include/rerun/components/line_strip3d.hpp +73 -0
- include/rerun/components/magnification_filter.hpp +63 -0
- include/rerun/components/marker_shape.hpp +82 -0
- include/rerun/components/marker_size.hpp +74 -0
- include/rerun/components/media_type.hpp +157 -0
- include/rerun/components/name.hpp +83 -0
- include/rerun/components/opacity.hpp +77 -0
- include/rerun/components/pinhole_projection.hpp +94 -0
- include/rerun/components/plane3d.hpp +75 -0
- include/rerun/components/pose_rotation_axis_angle.hpp +73 -0
- include/rerun/components/pose_rotation_quat.hpp +71 -0
- include/rerun/components/pose_scale3d.hpp +102 -0
- include/rerun/components/pose_transform_mat3x3.hpp +87 -0
- include/rerun/components/pose_translation3d.hpp +96 -0
- include/rerun/components/position2d.hpp +86 -0
- include/rerun/components/position3d.hpp +90 -0
- include/rerun/components/radius.hpp +98 -0
- include/rerun/components/range1d.hpp +75 -0
- include/rerun/components/resolution.hpp +88 -0
- include/rerun/components/rotation_axis_angle.hpp +72 -0
- include/rerun/components/rotation_quat.hpp +71 -0
- include/rerun/components/scalar.hpp +76 -0
- include/rerun/components/scale3d.hpp +102 -0
- include/rerun/components/series_visible.hpp +76 -0
- include/rerun/components/show_labels.hpp +79 -0
- include/rerun/components/stroke_width.hpp +74 -0
- include/rerun/components/tensor_data.hpp +94 -0
- include/rerun/components/tensor_dimension_index_selection.hpp +77 -0
- include/rerun/components/tensor_height_dimension.hpp +71 -0
- include/rerun/components/tensor_width_dimension.hpp +71 -0
- include/rerun/components/texcoord2d.hpp +101 -0
- include/rerun/components/text.hpp +83 -0
- include/rerun/components/text_log_level.hpp +110 -0
- include/rerun/components/timestamp.hpp +76 -0
- include/rerun/components/transform_mat3x3.hpp +92 -0
- include/rerun/components/transform_relation.hpp +66 -0
- include/rerun/components/translation3d.hpp +96 -0
- include/rerun/components/triangle_indices.hpp +85 -0
- include/rerun/components/value_range.hpp +78 -0
- include/rerun/components/vector2d.hpp +92 -0
- include/rerun/components/vector3d.hpp +96 -0
- include/rerun/components/video_timestamp.hpp +120 -0
- include/rerun/components/view_coordinates.hpp +346 -0
- include/rerun/components/visible.hpp +74 -0
- include/rerun/components.hpp +77 -0
- include/rerun/config.hpp +52 -0
- include/rerun/datatypes/angle.hpp +76 -0
- include/rerun/datatypes/annotation_info.hpp +76 -0
- include/rerun/datatypes/blob.hpp +67 -0
- include/rerun/datatypes/bool.hpp +57 -0
- include/rerun/datatypes/channel_datatype.hpp +87 -0
- include/rerun/datatypes/class_description.hpp +92 -0
- include/rerun/datatypes/class_description_map_elem.hpp +69 -0
- include/rerun/datatypes/class_id.hpp +62 -0
- include/rerun/datatypes/color_model.hpp +68 -0
- include/rerun/datatypes/dvec2d.hpp +76 -0
- include/rerun/datatypes/entity_path.hpp +60 -0
- include/rerun/datatypes/float32.hpp +62 -0
- include/rerun/datatypes/float64.hpp +62 -0
- include/rerun/datatypes/image_format.hpp +107 -0
- include/rerun/datatypes/keypoint_id.hpp +63 -0
- include/rerun/datatypes/keypoint_pair.hpp +65 -0
- include/rerun/datatypes/mat3x3.hpp +105 -0
- include/rerun/datatypes/mat4x4.hpp +119 -0
- include/rerun/datatypes/pixel_format.hpp +142 -0
- include/rerun/datatypes/plane3d.hpp +60 -0
- include/rerun/datatypes/quaternion.hpp +110 -0
- include/rerun/datatypes/range1d.hpp +59 -0
- include/rerun/datatypes/range2d.hpp +55 -0
- include/rerun/datatypes/rgba32.hpp +94 -0
- include/rerun/datatypes/rotation_axis_angle.hpp +67 -0
- include/rerun/datatypes/tensor_buffer.hpp +529 -0
- include/rerun/datatypes/tensor_data.hpp +100 -0
- include/rerun/datatypes/tensor_dimension_index_selection.hpp +58 -0
- include/rerun/datatypes/tensor_dimension_selection.hpp +56 -0
- include/rerun/datatypes/time_int.hpp +62 -0
- include/rerun/datatypes/time_range.hpp +55 -0
- include/rerun/datatypes/time_range_boundary.hpp +175 -0
- include/rerun/datatypes/uint16.hpp +62 -0
- include/rerun/datatypes/uint32.hpp +62 -0
- include/rerun/datatypes/uint64.hpp +62 -0
- include/rerun/datatypes/utf8.hpp +76 -0
- include/rerun/datatypes/utf8pair.hpp +62 -0
- include/rerun/datatypes/uuid.hpp +60 -0
- include/rerun/datatypes/uvec2d.hpp +76 -0
- include/rerun/datatypes/uvec3d.hpp +80 -0
- include/rerun/datatypes/uvec4d.hpp +59 -0
- include/rerun/datatypes/vec2d.hpp +76 -0
- include/rerun/datatypes/vec3d.hpp +80 -0
- include/rerun/datatypes/vec4d.hpp +84 -0
- include/rerun/datatypes/video_timestamp.hpp +67 -0
- include/rerun/datatypes/view_coordinates.hpp +87 -0
- include/rerun/datatypes/visible_time_range.hpp +57 -0
- include/rerun/datatypes.hpp +51 -0
- include/rerun/demo_utils.hpp +75 -0
- include/rerun/entity_path.hpp +20 -0
- include/rerun/error.hpp +180 -0
- include/rerun/half.hpp +10 -0
- include/rerun/image_utils.hpp +187 -0
- include/rerun/indicator_component.hpp +59 -0
- include/rerun/loggable.hpp +54 -0
- include/rerun/recording_stream.hpp +960 -0
- include/rerun/rerun_sdk_export.hpp +25 -0
- include/rerun/result.hpp +86 -0
- include/rerun/rotation3d.hpp +33 -0
- include/rerun/sdk_info.hpp +20 -0
- include/rerun/spawn.hpp +21 -0
- include/rerun/spawn_options.hpp +57 -0
- include/rerun/string_utils.hpp +16 -0
- include/rerun/third_party/cxxopts.hpp +2198 -0
- include/rerun/time_column.hpp +288 -0
- include/rerun/timeline.hpp +38 -0
- include/rerun/type_traits.hpp +40 -0
- include/rerun.hpp +86 -0
- lib/cmake/axel/axel-config.cmake +45 -0
- lib/cmake/axel/axelTargets-release.cmake +19 -0
- lib/cmake/axel/axelTargets.cmake +108 -0
- lib/cmake/momentum/FindFbxSdk.cmake +115 -0
- lib/cmake/momentum/Findre2.cmake +52 -0
- lib/cmake/momentum/momentum-config.cmake +67 -0
- lib/cmake/momentum/momentumTargets-release.cmake +259 -0
- lib/cmake/momentum/momentumTargets.cmake +385 -0
- lib/cmake/rerun_sdk/rerun_sdkConfig.cmake +70 -0
- lib/cmake/rerun_sdk/rerun_sdkConfigVersion.cmake +83 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets-release.cmake +19 -0
- lib/cmake/rerun_sdk/rerun_sdkTargets.cmake +108 -0
- lib/libarrow.a +0 -0
- lib/libarrow_bundled_dependencies.a +0 -0
- lib/libaxel.a +0 -0
- lib/libmomentum_app_utils.a +0 -0
- lib/libmomentum_character.a +0 -0
- lib/libmomentum_character_sequence_solver.a +0 -0
- lib/libmomentum_character_solver.a +0 -0
- lib/libmomentum_common.a +0 -0
- lib/libmomentum_diff_ik.a +0 -0
- lib/libmomentum_io.a +0 -0
- lib/libmomentum_io_common.a +0 -0
- lib/libmomentum_io_fbx.a +0 -0
- lib/libmomentum_io_gltf.a +0 -0
- lib/libmomentum_io_legacy_json.a +0 -0
- lib/libmomentum_io_marker.a +0 -0
- lib/libmomentum_io_motion.a +0 -0
- lib/libmomentum_io_shape.a +0 -0
- lib/libmomentum_io_skeleton.a +0 -0
- lib/libmomentum_io_urdf.a +0 -0
- lib/libmomentum_marker_tracker.a +0 -0
- lib/libmomentum_math.a +0 -0
- lib/libmomentum_online_qr.a +0 -0
- lib/libmomentum_process_markers.a +0 -0
- lib/libmomentum_rerun.a +0 -0
- lib/libmomentum_simd_constraints.a +0 -0
- lib/libmomentum_simd_generalized_loss.a +0 -0
- lib/libmomentum_skeleton.a +0 -0
- lib/libmomentum_solver.a +0 -0
- lib/librerun_c__macos_arm64.a +0 -0
- lib/librerun_sdk.a +0 -0
- pymomentum/axel.cpython-312-darwin.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +631 -0
- pymomentum/backend/trs_backend.py +889 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-312-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-darwin.so +0 -0
- pymomentum/solver2.cpython-312-darwin.so +0 -0
- pymomentum/torch/character.py +868 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.1.93.post0.dist-info/METADATA +126 -0
- pymomentum_cpu-0.1.93.post0.dist-info/RECORD +517 -0
- pymomentum_cpu-0.1.93.post0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.1.93.post0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,141 @@
|
|
|
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/file_save_options.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 FileSaveOptions& options = FileSaveOptions());
|
|
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
|
+
///
|
|
63
|
+
/// @param[in] character The character to add motion for.
|
|
64
|
+
/// @param[in] fps Frame rate of the motion in frames per second.
|
|
65
|
+
/// @param[in] motion Motion parameters (parameter names and poses matrix).
|
|
66
|
+
/// @param[in] offsets Identity/offset parameters (joint names and offsets vector).
|
|
67
|
+
/// @param[in] addExtensions Whether to add momentum extensions to the document.
|
|
68
|
+
/// @param[in] customName Custom name for the animation (default is "default").
|
|
69
|
+
/// @param[in] timestamps Per-frame timestamps. Size should match motion columns.
|
|
70
|
+
void addMotion(
|
|
71
|
+
const Character& character,
|
|
72
|
+
float fps = 120.0f,
|
|
73
|
+
const MotionParameters& motion = {},
|
|
74
|
+
const IdentityParameters& offsets = {},
|
|
75
|
+
bool addExtensions = true,
|
|
76
|
+
const std::string& customName = "default",
|
|
77
|
+
std::span<const int64_t> timestamps = {});
|
|
78
|
+
|
|
79
|
+
/// Add a skeleton states to the provided character. If addCharacter is not called before adding
|
|
80
|
+
/// the skeleton states, the character will be automatically added with the default settings.
|
|
81
|
+
void addSkeletonStates(
|
|
82
|
+
const Character& character,
|
|
83
|
+
float fps,
|
|
84
|
+
std::span<const SkeletonState> skeletonStates,
|
|
85
|
+
const std::string& customName = "default");
|
|
86
|
+
|
|
87
|
+
/// Add marker data to the file
|
|
88
|
+
///
|
|
89
|
+
/// @param[in] fps The frame rate of the motion capture data in frames per second.
|
|
90
|
+
/// @param[in] markerSequence A 2D vector specifying the Marker data (name/position/occlusion) for
|
|
91
|
+
/// all markers across all captured frames. Size: [numFrames][numMarkers]
|
|
92
|
+
/// @param[in] markerMesh Optional parameter specifying the MarkerMesh type (default is
|
|
93
|
+
/// MarkerMesh::None).
|
|
94
|
+
/// @param[in] animName Optional parameter specifying the animation name (default is "default").
|
|
95
|
+
void addMarkerSequence(
|
|
96
|
+
float fps,
|
|
97
|
+
std::span<const std::vector<momentum::Marker>> markerSequence,
|
|
98
|
+
MarkerMesh markerMesh = MarkerMesh::UnitCube,
|
|
99
|
+
const std::string& animName = "default");
|
|
100
|
+
|
|
101
|
+
// Save the file with the provided filename. If the fileFormat is 'GltfFileFormat::Auto',
|
|
102
|
+
// will deduct the file format by filename.
|
|
103
|
+
// When embedResources is true, it will set all the existing buffers to embed the data.
|
|
104
|
+
void save(
|
|
105
|
+
const filesystem::path& filename,
|
|
106
|
+
GltfFileFormat fileFormat = GltfFileFormat::Auto,
|
|
107
|
+
bool embedResources = false);
|
|
108
|
+
|
|
109
|
+
static void save(
|
|
110
|
+
fx::gltf::Document& document,
|
|
111
|
+
const filesystem::path& filename,
|
|
112
|
+
GltfFileFormat fileFormat = GltfFileFormat::Auto,
|
|
113
|
+
bool embedResources = false);
|
|
114
|
+
|
|
115
|
+
/// Set all existing buffers to embed resources.
|
|
116
|
+
void forceEmbedResources();
|
|
117
|
+
|
|
118
|
+
static void forceEmbedResources(fx::gltf::Document& document);
|
|
119
|
+
|
|
120
|
+
/// Allow copy the document, but do not allow modify the file
|
|
121
|
+
/// outside of the builder to keep metadata consistent
|
|
122
|
+
const fx::gltf::Document& getDocument();
|
|
123
|
+
|
|
124
|
+
size_t getNumCharacters();
|
|
125
|
+
|
|
126
|
+
size_t getCharacterRootIndex(const std::string& name);
|
|
127
|
+
|
|
128
|
+
size_t getNumJoints(const std::string& name);
|
|
129
|
+
|
|
130
|
+
size_t getNumMotions();
|
|
131
|
+
|
|
132
|
+
float getFps();
|
|
133
|
+
|
|
134
|
+
std::vector<size_t> getCharacterMotions(const std::string& characterName);
|
|
135
|
+
|
|
136
|
+
private:
|
|
137
|
+
struct Impl;
|
|
138
|
+
std::unique_ptr<Impl> impl_;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
} // namespace momentum
|
|
@@ -0,0 +1,149 @@
|
|
|
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/file_save_options.h>
|
|
14
|
+
#include <momentum/math/types.h>
|
|
15
|
+
|
|
16
|
+
#include <fx/gltf.h>
|
|
17
|
+
#include <span>
|
|
18
|
+
|
|
19
|
+
#include <tuple>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
namespace momentum {
|
|
23
|
+
|
|
24
|
+
Character loadGltfCharacter(const fx::gltf::Document& model);
|
|
25
|
+
|
|
26
|
+
Character loadGltfCharacter(const filesystem::path& gltfFilename);
|
|
27
|
+
|
|
28
|
+
Character loadGltfCharacter(std::span<const std::byte> byteSpan);
|
|
29
|
+
|
|
30
|
+
std::tuple<MotionParameters, IdentityParameters, float> loadMotion(
|
|
31
|
+
const filesystem::path& gltfFilename);
|
|
32
|
+
|
|
33
|
+
/// Load per-frame timestamps from a glTF file.
|
|
34
|
+
/// This function loads timestamps that were saved using GltfBuilder::addMotion
|
|
35
|
+
///
|
|
36
|
+
/// @param[in] gltfFilename The path to the glTF file.
|
|
37
|
+
/// @return A vector of per-frame timestamps (usually in microsecond).
|
|
38
|
+
std::vector<int64_t> loadMotionTimestamps(const filesystem::path& gltfFilename);
|
|
39
|
+
|
|
40
|
+
/// Load a glTF character from a local file path.
|
|
41
|
+
///
|
|
42
|
+
/// This function assumes the file format of the given path is glTF without checking the extension,
|
|
43
|
+
/// so please ensure the file is in glTF format.
|
|
44
|
+
///
|
|
45
|
+
/// @param[in] filepath The path to the glTF character file.
|
|
46
|
+
/// @return A tuple containing the loaded Character object, the motion represented in model
|
|
47
|
+
/// parameters, the identity vector represented as joint parameters, and the fps.
|
|
48
|
+
std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
|
|
49
|
+
const filesystem::path& gltfFilename);
|
|
50
|
+
|
|
51
|
+
/// Load a glTF character from a buffer.
|
|
52
|
+
///
|
|
53
|
+
/// @param[in] byteSpan The buffer containing the glTF character data.
|
|
54
|
+
/// @return A tuple containing the loaded Character object, the motion represented in model
|
|
55
|
+
/// parameters, the identity vector represented as joint parameters, and the fps.
|
|
56
|
+
std::tuple<Character, MatrixXf, VectorXf, float> loadCharacterWithMotion(
|
|
57
|
+
std::span<const std::byte> byteSpan);
|
|
58
|
+
|
|
59
|
+
/// Load a GLTF Character with motion in the form of skeleton states (transform matrices)
|
|
60
|
+
///
|
|
61
|
+
/// Unlike the other loadCharacterWithMotion functions, this function does not require the
|
|
62
|
+
/// file to be saved using momentum's functionality that saves model parameters in a
|
|
63
|
+
/// custom GTLF extension, however the resulting skeleton states may be harder to work with.
|
|
64
|
+
std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
|
|
65
|
+
loadCharacterWithSkeletonStates(std::span<const std::byte> byteSpan);
|
|
66
|
+
|
|
67
|
+
std::tuple<Character, std::vector<SkeletonState>, std::vector<float>>
|
|
68
|
+
loadCharacterWithSkeletonStates(const filesystem::path& gltfFilename);
|
|
69
|
+
|
|
70
|
+
/// Maps the loaded motion onto the input character by matching joint names and parameter names.
|
|
71
|
+
///
|
|
72
|
+
/// This function assumes the file format of the given path is glTF without checking the extension,
|
|
73
|
+
/// so please ensure the file is in glTF format.
|
|
74
|
+
///
|
|
75
|
+
/// @param[in] gltfFilename The path to the glTF motion file.
|
|
76
|
+
/// @param[in] character The Character object to map the motion onto.
|
|
77
|
+
/// @return A tuple containing the motion represented in model parameters, the identity vector
|
|
78
|
+
/// represented as joint parameters, and the fps. The model parameters and joint parameters are
|
|
79
|
+
/// mapped to the input character by name matching.
|
|
80
|
+
std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
|
|
81
|
+
const filesystem::path& gltfFilename,
|
|
82
|
+
const Character& character);
|
|
83
|
+
|
|
84
|
+
/// Buffer version of loadMotionOnCharacter()
|
|
85
|
+
///
|
|
86
|
+
/// @param[in] byteSpan The buffer containing the glTF motion data.
|
|
87
|
+
/// @param[in] character The Character object to map the motion onto.
|
|
88
|
+
/// @return A tuple containing the motion represented in model parameters, the identity vector
|
|
89
|
+
/// represented as joint parameters, and the fps. The model parameters and joint parameters are
|
|
90
|
+
/// mapped to the input character by name matching.
|
|
91
|
+
std::tuple<MatrixXf, VectorXf, float> loadMotionOnCharacter(
|
|
92
|
+
std::span<const std::byte> byteSpan,
|
|
93
|
+
const Character& character);
|
|
94
|
+
|
|
95
|
+
/// Loads a MarkerSequence from a file.
|
|
96
|
+
///
|
|
97
|
+
/// @param[in] filename Path to the file containing the MarkerSequence data.
|
|
98
|
+
/// @return A MarkerSequence object containing motion capture marker data.
|
|
99
|
+
MarkerSequence loadMarkerSequence(const filesystem::path& filename);
|
|
100
|
+
|
|
101
|
+
fx::gltf::Document makeCharacterDocument(
|
|
102
|
+
const Character& character,
|
|
103
|
+
float fps = 120.0f,
|
|
104
|
+
const MotionParameters& motion = {},
|
|
105
|
+
const IdentityParameters& offsets = {},
|
|
106
|
+
std::span<const std::vector<Marker>> markerSequence = {},
|
|
107
|
+
bool embedResource = true,
|
|
108
|
+
const FileSaveOptions& options = FileSaveOptions());
|
|
109
|
+
|
|
110
|
+
/// Saves character motion to a glb file.
|
|
111
|
+
///
|
|
112
|
+
/// @param[in] motion The model parameters representing the motion of the character (numModelParams,
|
|
113
|
+
/// numFrames)
|
|
114
|
+
/// @param[in] offsets Offset values per joint capturing the skeleton bone lengths using translation
|
|
115
|
+
/// and scale offset (7*numJoints, 1)
|
|
116
|
+
/// @param[in] options Optional file save options for controlling output (default:
|
|
117
|
+
/// FileSaveOptions{}).
|
|
118
|
+
void saveGltfCharacter(
|
|
119
|
+
const filesystem::path& filename,
|
|
120
|
+
const Character& character,
|
|
121
|
+
float fps = 120.0f,
|
|
122
|
+
const MotionParameters& motion = {},
|
|
123
|
+
const IdentityParameters& offsets = {},
|
|
124
|
+
std::span<const std::vector<Marker>> markerSequence = {},
|
|
125
|
+
const FileSaveOptions& options = FileSaveOptions());
|
|
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
|
+
/// @param[in] options Optional file save options for controlling output (default:
|
|
132
|
+
/// FileSaveOptions{}).
|
|
133
|
+
void saveGltfCharacter(
|
|
134
|
+
const filesystem::path& filename,
|
|
135
|
+
const Character& character,
|
|
136
|
+
float fps,
|
|
137
|
+
std::span<const SkeletonState> skeletonStates,
|
|
138
|
+
std::span<const std::vector<Marker>> markerSequence = {},
|
|
139
|
+
const FileSaveOptions& options = FileSaveOptions());
|
|
140
|
+
|
|
141
|
+
std::vector<std::byte> saveCharacterToBytes(
|
|
142
|
+
const Character& character,
|
|
143
|
+
float fps = 120.0f,
|
|
144
|
+
const MotionParameters& motion = {},
|
|
145
|
+
const IdentityParameters& offsets = {},
|
|
146
|
+
std::span<const std::vector<Marker>> markerSequence = {},
|
|
147
|
+
const FileSaveOptions& options = FileSaveOptions());
|
|
148
|
+
|
|
149
|
+
} // 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 = std::as_bytes(std::span<const uint8_t>(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 = std::as_bytes(std::span<const uint8_t>(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
|
+
std::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
|
+
std::span<T> data,
|
|
265
|
+
const std::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
|
+
std::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
|