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,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,89 @@
|
|
|
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/rasterizer/camera.h>
|
|
11
|
+
#include <momentum/rasterizer/fwd.h>
|
|
12
|
+
#include <momentum/rasterizer/rasterizer.h>
|
|
13
|
+
#include <Eigen/Core>
|
|
14
|
+
#include <gsl/span>
|
|
15
|
+
#include <string>
|
|
16
|
+
|
|
17
|
+
namespace momentum::rasterizer {
|
|
18
|
+
|
|
19
|
+
/// Horizontal alignment options for text rendering
|
|
20
|
+
enum class HorizontalAlignment {
|
|
21
|
+
Left,
|
|
22
|
+
Center,
|
|
23
|
+
Right,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/// Vertical alignment options for text rendering
|
|
27
|
+
enum class VerticalAlignment {
|
|
28
|
+
Top,
|
|
29
|
+
Center,
|
|
30
|
+
Bottom,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/// Rasterize text at 3D world positions
|
|
34
|
+
///
|
|
35
|
+
/// Projects 3D positions to image space using the camera and renders text strings at those
|
|
36
|
+
/// locations. Uses an embedded bitmap font for rendering.
|
|
37
|
+
///
|
|
38
|
+
/// @param positionsWorld 3D positions in world coordinates where text should be rendered
|
|
39
|
+
/// @param texts Text strings to render at each position
|
|
40
|
+
/// @param camera Camera to render from
|
|
41
|
+
/// @param modelMatrix Model transformation matrix
|
|
42
|
+
/// @param nearClip Near clipping distance
|
|
43
|
+
/// @param color RGB color for the text
|
|
44
|
+
/// @param textScale Integer scaling factor for text size (1 = 1 pixel per font pixel)
|
|
45
|
+
/// @param zBuffer Input/output depth buffer (SIMD-aligned)
|
|
46
|
+
/// @param rgbBuffer Optional input/output RGB color buffer
|
|
47
|
+
/// @param imageOffset Pixel offset for positioning
|
|
48
|
+
/// @param horizontalAlignment Horizontal text alignment relative to position
|
|
49
|
+
/// @param verticalAlignment Vertical text alignment relative to position
|
|
50
|
+
void rasterizeText(
|
|
51
|
+
gsl::span<const Eigen::Vector3f> positionsWorld,
|
|
52
|
+
gsl::span<const std::string> texts,
|
|
53
|
+
const Camera& camera,
|
|
54
|
+
const Eigen::Matrix4f& modelMatrix,
|
|
55
|
+
float nearClip,
|
|
56
|
+
const Eigen::Vector3f& color,
|
|
57
|
+
int textScale,
|
|
58
|
+
Span2f zBuffer,
|
|
59
|
+
Span3f rgbBuffer = {},
|
|
60
|
+
float depthOffset = 0,
|
|
61
|
+
const Eigen::Vector2f& imageOffset = {0, 0},
|
|
62
|
+
HorizontalAlignment horizontalAlignment = HorizontalAlignment::Left,
|
|
63
|
+
VerticalAlignment verticalAlignment = VerticalAlignment::Top);
|
|
64
|
+
|
|
65
|
+
/// Rasterize text directly in 2D image space
|
|
66
|
+
///
|
|
67
|
+
/// Renders text at 2D image positions without camera projection or depth testing.
|
|
68
|
+
///
|
|
69
|
+
/// @param positionsImage 2D positions in image coordinates where text should be rendered
|
|
70
|
+
/// @param texts Text strings to render at each position
|
|
71
|
+
/// @param color RGB color for the text
|
|
72
|
+
/// @param textScale Integer scaling factor for text size (1 = 1 pixel per font pixel)
|
|
73
|
+
/// @param rgbBuffer Input/output RGB color buffer
|
|
74
|
+
/// @param zBuffer Optional depth buffer (fills with zeros when provided)
|
|
75
|
+
/// @param imageOffset Pixel offset for positioning
|
|
76
|
+
/// @param horizontalAlignment Horizontal text alignment relative to position
|
|
77
|
+
/// @param verticalAlignment Vertical text alignment relative to position
|
|
78
|
+
void rasterizeText2D(
|
|
79
|
+
gsl::span<const Eigen::Vector2f> positionsImage,
|
|
80
|
+
gsl::span<const std::string> texts,
|
|
81
|
+
const Eigen::Vector3f& color,
|
|
82
|
+
int textScale,
|
|
83
|
+
Span3f rgbBuffer,
|
|
84
|
+
Span2f zBuffer = {},
|
|
85
|
+
const Eigen::Vector2f& imageOffset = {0, 0},
|
|
86
|
+
HorizontalAlignment horizontalAlignment = HorizontalAlignment::Left,
|
|
87
|
+
VerticalAlignment verticalAlignment = VerticalAlignment::Top);
|
|
88
|
+
|
|
89
|
+
} // 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
|