pymomentum-cpu 0.1.82.post0__cp313-cp313-macosx_14_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymomentum-cpu might be problematic. Click here for more details.
- include/axel/BoundingBox.h +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-313-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-313-darwin.so +0 -0
- pymomentum/marker_tracking.cpython-313-darwin.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-313-darwin.so +0 -0
- pymomentum/solver2.cpython-313-darwin.so +0 -0
- pymomentum/torch/character.py +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,140 @@
|
|
|
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 <mdspan/mdspan.hpp>
|
|
11
|
+
#include <momentum/common/aligned.h>
|
|
12
|
+
#include <momentum/rasterizer/fwd.h>
|
|
13
|
+
#include <algorithm>
|
|
14
|
+
#include <array>
|
|
15
|
+
#include <memory>
|
|
16
|
+
#include <stdexcept>
|
|
17
|
+
|
|
18
|
+
namespace momentum::rasterizer {
|
|
19
|
+
|
|
20
|
+
using index_t = std::ptrdiff_t;
|
|
21
|
+
|
|
22
|
+
// Simplified Tensor class local to Rasterizer
|
|
23
|
+
// Uses std::vector with aligned allocator and provides conversion to std::mdspan
|
|
24
|
+
template <typename T, size_t Rank>
|
|
25
|
+
class Tensor {
|
|
26
|
+
private:
|
|
27
|
+
using extents_t = std::array<index_t, Rank>;
|
|
28
|
+
using allocator_t = momentum::AlignedAllocator<T, kSimdAlignment>;
|
|
29
|
+
using storage_t = std::vector<T, allocator_t>;
|
|
30
|
+
|
|
31
|
+
extents_t _extents = {};
|
|
32
|
+
storage_t _data;
|
|
33
|
+
|
|
34
|
+
public:
|
|
35
|
+
using element_type = T;
|
|
36
|
+
using value_type = std::remove_cv_t<T>;
|
|
37
|
+
|
|
38
|
+
Tensor() = default;
|
|
39
|
+
|
|
40
|
+
explicit Tensor(const extents_t& extents, const T& defaultValue = T{}) : _extents(extents) {
|
|
41
|
+
auto size = calculateSize(extents);
|
|
42
|
+
if (size > 0) {
|
|
43
|
+
_data.resize(size, defaultValue);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
template <typename... SizeTypes>
|
|
48
|
+
explicit Tensor(SizeTypes... dims) : Tensor(extents_t{static_cast<index_t>(dims)...}) {}
|
|
49
|
+
|
|
50
|
+
// Copy constructor, move constructor, copy assignment, and move assignment
|
|
51
|
+
// are automatically generated and work correctly with std::vector
|
|
52
|
+
|
|
53
|
+
// Conversion to mdspan
|
|
54
|
+
explicit operator Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>() {
|
|
55
|
+
return Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>(
|
|
56
|
+
_data.data(), Kokkos::dextents<index_t, Rank>(_extents));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
explicit operator Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>() const {
|
|
60
|
+
return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
|
|
61
|
+
_data.data(), Kokkos::dextents<index_t, Rank>(_extents));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// View method for compatibility
|
|
65
|
+
Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>> view() {
|
|
66
|
+
return Kokkos::mdspan<T, Kokkos::dextents<index_t, Rank>>(
|
|
67
|
+
_data.data(), Kokkos::dextents<index_t, Rank>(_extents));
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
[[nodiscard]] Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>> view() const {
|
|
71
|
+
return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
|
|
72
|
+
_data.data(), Kokkos::dextents<index_t, Rank>(_extents));
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[[nodiscard]] Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>> const_view() const {
|
|
76
|
+
return Kokkos::mdspan<const T, Kokkos::dextents<index_t, Rank>>(
|
|
77
|
+
_data.data(), Kokkos::dextents<index_t, Rank>(_extents));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Multi-dimensional indexing operator() inspired by ASpan
|
|
81
|
+
template <typename... Args>
|
|
82
|
+
std::enable_if_t<sizeof...(Args) == Rank, T&> operator()(Args... indices) {
|
|
83
|
+
static_assert(sizeof...(Args) == Rank, "Number of indices must match tensor rank");
|
|
84
|
+
return view()(indices...);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
template <typename... Args>
|
|
88
|
+
std::enable_if_t<sizeof...(Args) == Rank, const T&> operator()(Args... indices) const {
|
|
89
|
+
static_assert(sizeof...(Args) == Rank, "Number of indices must match tensor rank");
|
|
90
|
+
return view()(indices...);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Basic accessors
|
|
94
|
+
T* data() {
|
|
95
|
+
return _data.data();
|
|
96
|
+
}
|
|
97
|
+
[[nodiscard]] const T* data() const {
|
|
98
|
+
return _data.data();
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
[[nodiscard]] constexpr index_t extent(size_t dim) const {
|
|
102
|
+
return _extents[dim];
|
|
103
|
+
}
|
|
104
|
+
[[nodiscard]] constexpr extents_t extents() const {
|
|
105
|
+
return _extents;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
[[nodiscard]] index_t size() const {
|
|
109
|
+
return static_cast<index_t>(_data.size());
|
|
110
|
+
}
|
|
111
|
+
[[nodiscard]] bool empty() const {
|
|
112
|
+
return _data.empty();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
void resize(const extents_t& new_extents) {
|
|
116
|
+
auto new_size = calculateSize(new_extents);
|
|
117
|
+
_data.resize(new_size);
|
|
118
|
+
_extents = new_extents;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template <typename... SizeTypes>
|
|
122
|
+
void resize(SizeTypes... dims) {
|
|
123
|
+
resize(extents_t{static_cast<index_t>(dims)...});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private:
|
|
127
|
+
static index_t calculateSize(const extents_t& extents) {
|
|
128
|
+
index_t size = 1;
|
|
129
|
+
for (auto ext : extents) {
|
|
130
|
+
size *= ext;
|
|
131
|
+
}
|
|
132
|
+
return size;
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
using Tensor2f = Tensor<float, 2>;
|
|
137
|
+
using Tensor3f = Tensor<float, 3>;
|
|
138
|
+
using Tensor2i = Tensor<int, 2>;
|
|
139
|
+
|
|
140
|
+
} // namespace momentum::rasterizer
|
|
@@ -0,0 +1,268 @@
|
|
|
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 <drjit/array.h>
|
|
11
|
+
#include <drjit/fwd.h>
|
|
12
|
+
#include <drjit/matrix.h>
|
|
13
|
+
#include <mdspan/mdspan.hpp>
|
|
14
|
+
#include <momentum/rasterizer/fwd.h>
|
|
15
|
+
#include <Eigen/Core>
|
|
16
|
+
#include <Eigen/Geometry>
|
|
17
|
+
#include <array>
|
|
18
|
+
#include <memory>
|
|
19
|
+
#include <sstream>
|
|
20
|
+
#include <utility>
|
|
21
|
+
|
|
22
|
+
// Forward declarations to avoid circular dependencies
|
|
23
|
+
namespace momentum::rasterizer {
|
|
24
|
+
|
|
25
|
+
using index_t = std::ptrdiff_t;
|
|
26
|
+
|
|
27
|
+
// Actual implementations
|
|
28
|
+
|
|
29
|
+
template <std::size_t R>
|
|
30
|
+
std::string formatTensorSizes(const std::array<index_t, R>& extents) {
|
|
31
|
+
std::ostringstream oss;
|
|
32
|
+
oss << "[";
|
|
33
|
+
for (size_t i = 0; i < extents.size(); ++i) {
|
|
34
|
+
if (i != 0) {
|
|
35
|
+
oss << " x ";
|
|
36
|
+
}
|
|
37
|
+
oss << extents[i];
|
|
38
|
+
}
|
|
39
|
+
oss << "]";
|
|
40
|
+
return oss.str();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Overload for mdspan extents using parameter pack
|
|
44
|
+
template <class IndexType, size_t... Extents>
|
|
45
|
+
std::string formatTensorSizes(const Kokkos::extents<IndexType, Extents...>& extents) {
|
|
46
|
+
std::ostringstream oss;
|
|
47
|
+
oss << "[";
|
|
48
|
+
for (size_t i = 0; i < extents.rank(); ++i) {
|
|
49
|
+
if (i != 0) {
|
|
50
|
+
oss << " x ";
|
|
51
|
+
}
|
|
52
|
+
oss << extents.extent(i);
|
|
53
|
+
}
|
|
54
|
+
oss << "]";
|
|
55
|
+
return oss.str();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Validates that an mdspan buffer is suitable for rasterization operations.
|
|
59
|
+
// This function checks:
|
|
60
|
+
// 1. Data pointer is properly aligned for SIMD operations
|
|
61
|
+
// 2. All dimensions except the first are contiguous (rows are packed tightly)
|
|
62
|
+
// 3. The stride for the first dimension is a multiple of kSimdPacketSize
|
|
63
|
+
template <typename T, typename Extents>
|
|
64
|
+
bool isValidBuffer(const Kokkos::mdspan<T, Extents>& buffer) {
|
|
65
|
+
if (buffer.empty()) {
|
|
66
|
+
return true; // Empty buffers are always valid
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
constexpr auto rank = Kokkos::mdspan<T, Extents>::rank();
|
|
70
|
+
|
|
71
|
+
// Check alignment of data pointer
|
|
72
|
+
if (reinterpret_cast<uintptr_t>(buffer.data_handle()) % kSimdAlignment != 0) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// For 1D buffers, just check that the stride is compatible with SIMD
|
|
77
|
+
if (rank == 1) {
|
|
78
|
+
return buffer.stride(0) % kSimdPacketSize == 0;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// For multi-dimensional buffers, check contiguity of all dimensions except the first
|
|
82
|
+
// Start from the rightmost dimension and work backwards
|
|
83
|
+
index_t expected_stride = 1;
|
|
84
|
+
for (size_t dim = rank; dim > 1; --dim) {
|
|
85
|
+
size_t i = dim - 1;
|
|
86
|
+
if (buffer.stride(i) != expected_stride) {
|
|
87
|
+
return false; // Not contiguous in this dimension
|
|
88
|
+
}
|
|
89
|
+
expected_stride *= buffer.extent(i);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Check that the first dimension stride is a multiple of kSimdPacketSize
|
|
93
|
+
// This ensures proper SIMD alignment for accessing rows
|
|
94
|
+
return buffer.stride(0) % kSimdPacketSize == 0;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Helper function to get the row stride for accessing buffer rows properly
|
|
98
|
+
// This ensures we use the actual mdspan stride instead of assuming contiguity
|
|
99
|
+
template <typename T, typename Extents>
|
|
100
|
+
index_t getRowStride(const Kokkos::mdspan<T, Extents>& buffer) {
|
|
101
|
+
static_assert(
|
|
102
|
+
Kokkos::mdspan<T, Extents>::rank() >= 2, "getRowStride requires at least 2D buffer");
|
|
103
|
+
return buffer.stride(0);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Checks if an mdspan has a standard row-major contiguous layout
|
|
107
|
+
// This is useful for optimization decisions where contiguous access patterns can be used
|
|
108
|
+
template <typename T, typename Extents>
|
|
109
|
+
bool isContiguous(const Kokkos::mdspan<T, Extents>& buffer) {
|
|
110
|
+
if (buffer.empty()) {
|
|
111
|
+
return true; // Empty buffers are trivially contiguous
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
constexpr auto rank = Kokkos::mdspan<T, Extents>::rank();
|
|
115
|
+
|
|
116
|
+
// Check contiguity from the rightmost dimension working backwards
|
|
117
|
+
index_t expected_stride = 1;
|
|
118
|
+
for (size_t dim = rank; dim > 0; --dim) {
|
|
119
|
+
size_t i = dim - 1;
|
|
120
|
+
if (buffer.stride(i) != expected_stride) {
|
|
121
|
+
return false; // Not contiguous in this dimension
|
|
122
|
+
}
|
|
123
|
+
expected_stride *= buffer.extent(i);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return true;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
inline Vector3f toEnokiVec(const Eigen::Vector3f& v) {
|
|
130
|
+
return {v.x(), v.y(), v.z()};
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
inline Matrix3f toEnokiMat(const Eigen::Matrix3f& m) {
|
|
134
|
+
return Matrix3f(m(0, 0), m(0, 1), m(0, 2), m(1, 0), m(1, 1), m(1, 2), m(2, 0), m(2, 1), m(2, 2));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
inline auto extractSingleElement(const Matrix3dP& mat, int index) {
|
|
138
|
+
return Matrix3d{
|
|
139
|
+
mat(0, 0)[index],
|
|
140
|
+
mat(0, 1)[index],
|
|
141
|
+
mat(0, 2)[index],
|
|
142
|
+
mat(1, 0)[index],
|
|
143
|
+
mat(1, 1)[index],
|
|
144
|
+
mat(1, 2)[index],
|
|
145
|
+
mat(2, 0)[index],
|
|
146
|
+
mat(2, 1)[index],
|
|
147
|
+
mat(2, 2)[index]};
|
|
148
|
+
}
|
|
149
|
+
inline auto extractSingleElement(const Matrix3fP& mat, int index) {
|
|
150
|
+
return Matrix3f{
|
|
151
|
+
mat(0, 0)[index],
|
|
152
|
+
mat(0, 1)[index],
|
|
153
|
+
mat(0, 2)[index],
|
|
154
|
+
mat(1, 0)[index],
|
|
155
|
+
mat(1, 1)[index],
|
|
156
|
+
mat(1, 2)[index],
|
|
157
|
+
mat(2, 0)[index],
|
|
158
|
+
mat(2, 1)[index],
|
|
159
|
+
mat(2, 2)[index]};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
inline auto extractSingleElement(const Vector3dP& vec, int index) {
|
|
163
|
+
return Vector3d{vec.x()[index], vec.y()[index], vec.z()[index]};
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
inline auto extractSingleElement(const Vector3fP& vec, int index) {
|
|
167
|
+
return Vector3f{vec.x()[index], vec.y()[index], vec.z()[index]};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
inline auto extractSingleElement(const Vector2fP& vec, int index) {
|
|
171
|
+
return Vector2f(vec.x()[index], vec.y()[index]);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
inline auto extractSingleElement(const FloatP& vec, int index) {
|
|
175
|
+
return vec[index];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
class SimdCamera {
|
|
179
|
+
public:
|
|
180
|
+
// Camera that operates on drjit::Vector3fP.
|
|
181
|
+
SimdCamera(const Camera& camera, Eigen::Matrix4f modelMatrix, Eigen::Vector2f imageOffset)
|
|
182
|
+
: _modelMatrix(modelMatrix),
|
|
183
|
+
_imageOffset(std::move(imageOffset)),
|
|
184
|
+
_intrinsics(camera.intrinsicsModel()),
|
|
185
|
+
_modelToWorld_rotation(toEnokiMat(modelMatrix.topLeftCorner<3, 3>())),
|
|
186
|
+
_modelToWorld_translation(toEnokiVec(modelMatrix.block<3, 1>(0, 3))),
|
|
187
|
+
_modelToWorld_row3(toEnokiVec(modelMatrix.block<1, 3>(3, 0))),
|
|
188
|
+
_modelToWorld_33(modelMatrix(3, 3)),
|
|
189
|
+
_normalMatrix(toEnokiMat(
|
|
190
|
+
(camera.eyeFromWorld() * Eigen::Transform<float, 3, Eigen::Affine>(modelMatrix))
|
|
191
|
+
.linear()
|
|
192
|
+
.inverse()
|
|
193
|
+
.transpose())),
|
|
194
|
+
_worldToEye_translation(toEnokiVec(Eigen::Vector3f(camera.eyeFromWorld().translation()))),
|
|
195
|
+
_worldToEye_rotation(toEnokiMat(camera.eyeFromWorld().linear().matrix())),
|
|
196
|
+
_fx(camera.fx()),
|
|
197
|
+
_fy(camera.fy()),
|
|
198
|
+
_imageWidth(camera.imageWidth()),
|
|
199
|
+
_imageHeight(camera.imageHeight()) {}
|
|
200
|
+
|
|
201
|
+
[[nodiscard]] auto fx() const {
|
|
202
|
+
return _fx;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
[[nodiscard]] auto fy() const {
|
|
206
|
+
return _fy;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
[[nodiscard]] auto imageWidth() const {
|
|
210
|
+
return _imageWidth;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
[[nodiscard]] auto imageHeight() const {
|
|
214
|
+
return _imageHeight;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
[[nodiscard]] Vector3fP worldToEye(const Vector3fP& p_world) const {
|
|
218
|
+
// Because we support projection in the model-to-world matrix, we can't just combine it
|
|
219
|
+
// with the world-to-eye matrix, so we'll keep them separate.
|
|
220
|
+
// Model-to-world matrix looks like this:
|
|
221
|
+
// [ mR mT ]
|
|
222
|
+
// [ m3x m33 ]
|
|
223
|
+
// Blockwise multiplication gives:
|
|
224
|
+
// [ mR mT ] [ v ] = [ mR * v + mT ]
|
|
225
|
+
// [ m3x m33 ] [ 1 ] [ m3x^T * v + m33]
|
|
226
|
+
const Vector3fP p_world_unnormalized =
|
|
227
|
+
_modelToWorld_rotation * p_world + _modelToWorld_translation;
|
|
228
|
+
const FloatP p_world_w = drjit::dot(_modelToWorld_row3, p_world) + _modelToWorld_33;
|
|
229
|
+
const Vector3fP p_world_normalized = p_world_unnormalized / p_world_w;
|
|
230
|
+
|
|
231
|
+
return _worldToEye_rotation * p_world_normalized + _worldToEye_translation;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
[[nodiscard]] Vector3fP worldToEyeNormal(const Vector3fP& n_world) const {
|
|
235
|
+
return drjit::normalize(_normalMatrix * n_world);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
[[nodiscard]] auto eyeToWindow(const Vector3fP& p_eye) const {
|
|
239
|
+
return _intrinsics->project(p_eye);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
[[nodiscard]] auto worldToWindow(const Vector3fP& p_world) const {
|
|
243
|
+
return eyeToWindow(worldToEye(p_world));
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private:
|
|
247
|
+
const Eigen::Matrix4f _modelMatrix;
|
|
248
|
+
const Eigen::Vector2f _imageOffset;
|
|
249
|
+
std::shared_ptr<const IntrinsicsModelT<float>> _intrinsics;
|
|
250
|
+
|
|
251
|
+
const Matrix3f _modelToWorld_rotation;
|
|
252
|
+
const Vector3f _modelToWorld_translation;
|
|
253
|
+
const Vector3f _modelToWorld_row3;
|
|
254
|
+
const float _modelToWorld_33;
|
|
255
|
+
|
|
256
|
+
const Matrix3f _normalMatrix;
|
|
257
|
+
|
|
258
|
+
const Vector3f _worldToEye_translation;
|
|
259
|
+
const Matrix3f _worldToEye_rotation;
|
|
260
|
+
|
|
261
|
+
const float _fx;
|
|
262
|
+
const float _fy;
|
|
263
|
+
|
|
264
|
+
const int32_t _imageWidth;
|
|
265
|
+
const int32_t _imageHeight;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
} // namespace momentum::rasterizer
|
|
@@ -0,0 +1,221 @@
|
|
|
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
|
+
#include <momentum/math/transform.h>
|
|
12
|
+
|
|
13
|
+
#include <drjit/array.h>
|
|
14
|
+
#include <drjit/array_router.h>
|
|
15
|
+
#include <drjit/packet.h>
|
|
16
|
+
#include <drjit/util.h>
|
|
17
|
+
#include <Eigen/Core>
|
|
18
|
+
#include <Eigen/Geometry>
|
|
19
|
+
|
|
20
|
+
#define DRJIT_VERSION_GE(major, minor, patch) \
|
|
21
|
+
((DRJIT_VERSION_MAJOR > (major)) || \
|
|
22
|
+
(DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR > (minor)) || \
|
|
23
|
+
(DRJIT_VERSION_MAJOR == (major) && DRJIT_VERSION_MINOR == (minor) && \
|
|
24
|
+
DRJIT_VERSION_PATCH >= (patch)))
|
|
25
|
+
|
|
26
|
+
// Utilities for writing cross-platform SIMD code.
|
|
27
|
+
// This currently uses the DrJit library for SIMD primitives.
|
|
28
|
+
|
|
29
|
+
namespace momentum {
|
|
30
|
+
|
|
31
|
+
inline constexpr size_t kAvxPacketSize = 8;
|
|
32
|
+
inline constexpr size_t kAvxAlignment = kAvxPacketSize * sizeof(float);
|
|
33
|
+
|
|
34
|
+
inline constexpr size_t kSimdPacketSize = drjit::DefaultSize;
|
|
35
|
+
inline constexpr size_t kSimdAlignment = kSimdPacketSize * sizeof(float);
|
|
36
|
+
|
|
37
|
+
template <typename T>
|
|
38
|
+
using Packet = drjit::Packet<T, kSimdPacketSize>;
|
|
39
|
+
|
|
40
|
+
using FloatP = Packet<float>;
|
|
41
|
+
using DoubleP = Packet<double>;
|
|
42
|
+
using IntP = Packet<int>;
|
|
43
|
+
|
|
44
|
+
template <typename T, int Dim>
|
|
45
|
+
using VectorP = drjit::Array<Packet<T>, Dim>;
|
|
46
|
+
|
|
47
|
+
template <typename T>
|
|
48
|
+
using Vector2P = VectorP<T, 2>;
|
|
49
|
+
|
|
50
|
+
template <typename T>
|
|
51
|
+
using Vector3P = VectorP<T, 3>;
|
|
52
|
+
|
|
53
|
+
using Vector2fP = Vector2P<float>;
|
|
54
|
+
using Vector3fP = Vector3P<float>;
|
|
55
|
+
|
|
56
|
+
using Vector2dP = Vector2P<double>;
|
|
57
|
+
using Vector3dP = Vector3P<double>;
|
|
58
|
+
|
|
59
|
+
/// Computes the offset required for the matrix data to meet the alignment requirement.
|
|
60
|
+
template <size_t Alignment>
|
|
61
|
+
[[nodiscard]] size_t computeOffset(const Eigen::Ref<Eigen::MatrixXf>& mat) {
|
|
62
|
+
constexpr size_t sizeOfScalar = sizeof(typename Eigen::MatrixXf::Scalar);
|
|
63
|
+
const size_t addressOffset =
|
|
64
|
+
Alignment / sizeOfScalar - (((size_t)mat.data() % Alignment) / sizeOfScalar);
|
|
65
|
+
|
|
66
|
+
// If the current alignment already meets the requirement, no offset is needed.
|
|
67
|
+
if (addressOffset == Alignment / sizeOfScalar) {
|
|
68
|
+
return 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return addressOffset;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/// Checks if the data of the matrix is aligned correctly.
|
|
75
|
+
template <size_t Alignment>
|
|
76
|
+
void checkAlignment(const Eigen::Ref<Eigen::MatrixXf>& mat, size_t offset = 0) {
|
|
77
|
+
MT_THROW_IF(
|
|
78
|
+
(uintptr_t(mat.data() + offset)) % Alignment != 0,
|
|
79
|
+
"Matrix ({}x{}, ptr: {}) is not aligned ({}) correctly.",
|
|
80
|
+
mat.rows(),
|
|
81
|
+
mat.cols(),
|
|
82
|
+
uintptr_t(mat.data()),
|
|
83
|
+
Alignment);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/// Calculates dot product of Eigen::Vector3f and 3-vector of packets.
|
|
87
|
+
///
|
|
88
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
89
|
+
/// Eigen::Vector3f.
|
|
90
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
91
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
92
|
+
template <typename Derived, typename S>
|
|
93
|
+
FloatP dot(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
94
|
+
return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// Calculates dot product of Vector3P and Eigen::Vector3f.
|
|
98
|
+
///
|
|
99
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
100
|
+
/// Eigen::Vector3f.
|
|
101
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
102
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
103
|
+
template <typename Derived, typename S>
|
|
104
|
+
FloatP dot(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
105
|
+
return drjit::fmadd(v1.x(), v2.x(), drjit::fmadd(v1.y(), v2.y(), v1.z() * v2.z()));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/// Calculates summation of Eigen::Vector3f and Vector3P
|
|
109
|
+
///
|
|
110
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
111
|
+
/// Eigen::Vector3f.
|
|
112
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
113
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
114
|
+
template <typename S, typename Derived>
|
|
115
|
+
Vector3P<S> operator+(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
116
|
+
return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/// Calculates summation of Vector3P and Eigen::Vector3f
|
|
120
|
+
///
|
|
121
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
122
|
+
/// Eigen::Vector3f.
|
|
123
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
124
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
125
|
+
template <typename S, typename Derived>
|
|
126
|
+
Vector3P<S> operator+(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
127
|
+
return {v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/// Calculates subtraction of Eigen::Vector3f and Vector3P
|
|
131
|
+
///
|
|
132
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
133
|
+
/// Eigen::Vector3f.
|
|
134
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
135
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
136
|
+
template <typename S, typename Derived>
|
|
137
|
+
Vector3P<S> operator-(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
138
|
+
return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/// Calculates subtraction of Vector3P and Eigen::Vector3f
|
|
142
|
+
///
|
|
143
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
144
|
+
/// Eigen::Vector3f.
|
|
145
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
146
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
147
|
+
template <typename S, typename Derived>
|
|
148
|
+
Vector3P<S> operator-(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
149
|
+
return {v1.x() - v2.x(), v1.y() - v2.y(), v1.z() - v2.z()};
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// Calculates multiplication of quaternion and each 3x1 vector in packet
|
|
153
|
+
///
|
|
154
|
+
/// @param[in] q A quaternion.
|
|
155
|
+
/// @param[in] vec A 3-vector of packets.
|
|
156
|
+
template <typename S>
|
|
157
|
+
Vector3P<S> operator*(const Eigen::Quaternion<S>& q, const Vector3P<S>& vec) {
|
|
158
|
+
return q * vec;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Calculates multiplication of 3x3 matrix and each 3x1 vector in packet
|
|
162
|
+
///
|
|
163
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
164
|
+
/// Eigen::Matrix3f.
|
|
165
|
+
/// @param[in] xf A 3x3 matrix.
|
|
166
|
+
/// @param[in] vec A 3-vector of packets.
|
|
167
|
+
template <typename S, typename Derived>
|
|
168
|
+
Vector3P<S> operator*(const Eigen::MatrixBase<Derived>& xf, const Vector3P<S>& vec) {
|
|
169
|
+
return Vector3P<S>{
|
|
170
|
+
momentum::dot(xf.row(0), vec), momentum::dot(xf.row(1), vec), momentum::dot(xf.row(2), vec)};
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/// Calculates affine transformation on each 3x1 vector in packet
|
|
174
|
+
///
|
|
175
|
+
/// @param[in] xf An affine transformation matrix.
|
|
176
|
+
/// @param[in] vec A 3-vector of packets.
|
|
177
|
+
template <typename S>
|
|
178
|
+
Vector3P<S> operator*(const Eigen::Transform<S, 3, Eigen::Affine>& xf, const Vector3P<S>& vec) {
|
|
179
|
+
return momentum::operator+(momentum::operator*(xf.linear(), vec), xf.translation());
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/// Calculates transformation on each 3x1 vector in packet using momentum::Transform
|
|
183
|
+
///
|
|
184
|
+
/// @param[in] xf A momentum transform.
|
|
185
|
+
/// @param[in] vec A 3-vector of packets.
|
|
186
|
+
template <typename S>
|
|
187
|
+
Vector3P<S> operator*(const TransformT<S>& xf, const Vector3P<S>& vec) {
|
|
188
|
+
return momentum::operator+(momentum::operator*(xf.toLinear(), vec), xf.translation);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/// Calculates cross product of Eigen::Vector3f and Vector3P
|
|
192
|
+
///
|
|
193
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
194
|
+
/// Eigen::Vector3f.
|
|
195
|
+
/// @param[in] v1 A 3D vector of Eigen.
|
|
196
|
+
/// @param[in] v2 A 3-vector of packets.
|
|
197
|
+
template <typename S, typename Derived>
|
|
198
|
+
Vector3P<S> cross(const Eigen::MatrixBase<Derived>& v1, const Vector3P<S>& v2) {
|
|
199
|
+
return {
|
|
200
|
+
drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
|
|
201
|
+
drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
|
|
202
|
+
drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/// Calculates cross product of Vector3P and Eigen::Vector3f
|
|
207
|
+
///
|
|
208
|
+
/// @tparam Derived A derived class of Eigen::MatrixBase, which should be compatible with
|
|
209
|
+
/// Eigen::Vector3f.
|
|
210
|
+
/// @param[in] v1 A 3-vector of packets.
|
|
211
|
+
/// @param[in] v2 A 3D vector of Eigen.
|
|
212
|
+
template <typename S, typename Derived>
|
|
213
|
+
Vector3P<S> cross(const Vector3P<S>& v1, const Eigen::MatrixBase<Derived>& v2) {
|
|
214
|
+
return {
|
|
215
|
+
drjit::fmsub(v1.y(), v2.z(), v1.z() * v2.y()),
|
|
216
|
+
drjit::fmsub(v1.z(), v2.x(), v1.x() * v2.z()),
|
|
217
|
+
drjit::fmsub(v1.x(), v2.y(), v1.y() * v2.x()),
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
} // namespace momentum
|