pymomentum-cpu 0.0.0__cp312-cp312-manylinux_2_39_x86_64.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/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 +237 -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 +98 -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 +243 -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/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 +62 -0
- include/momentum/character_sequence_solver/multipose_solver.h +63 -0
- include/momentum/character_sequence_solver/multipose_solver_function.h +80 -0
- include/momentum/character_sequence_solver/sequence_error_function.h +95 -0
- include/momentum/character_sequence_solver/sequence_solver.h +144 -0
- include/momentum/character_sequence_solver/sequence_solver_function.h +126 -0
- include/momentum/character_sequence_solver/state_sequence_error_function.h +106 -0
- include/momentum/character_sequence_solver/vertex_sequence_error_function.h +125 -0
- include/momentum/character_solver/aim_error_function.h +112 -0
- include/momentum/character_solver/collision_error_function.h +88 -0
- include/momentum/character_solver/collision_error_function_stateless.h +71 -0
- include/momentum/character_solver/constraint_error_function-inl.h +321 -0
- include/momentum/character_solver/constraint_error_function.h +241 -0
- include/momentum/character_solver/distance_error_function.h +74 -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 +62 -0
- include/momentum/character_solver/limit_error_function.h +53 -0
- include/momentum/character_solver/model_parameters_error_function.h +61 -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 +140 -0
- include/momentum/character_solver/pose_prior_error_function.h +76 -0
- include/momentum/character_solver/position_error_function.h +75 -0
- include/momentum/character_solver/projection_error_function.h +90 -0
- include/momentum/character_solver/simd_collision_error_function.h +95 -0
- include/momentum/character_solver/simd_normal_error_function.h +151 -0
- include/momentum/character_solver/simd_plane_error_function.h +154 -0
- include/momentum/character_solver/simd_position_error_function.h +155 -0
- include/momentum/character_solver/skeleton_error_function.h +136 -0
- include/momentum/character_solver/skeleton_solver_function.h +72 -0
- include/momentum/character_solver/skinned_locator_error_function.h +163 -0
- include/momentum/character_solver/skinned_locator_triangle_error_function.h +138 -0
- include/momentum/character_solver/skinning_weight_iterator.h +80 -0
- include/momentum/character_solver/state_error_function.h +90 -0
- include/momentum/character_solver/transform_pose.h +80 -0
- include/momentum/character_solver/trust_region_qr.h +78 -0
- include/momentum/character_solver/vertex_error_function.h +154 -0
- include/momentum/character_solver/vertex_projection_error_function.h +118 -0
- include/momentum/character_solver/vertex_vertex_distance_error_function.h +143 -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 +109 -0
- include/momentum/diff_ik/fully_differentiable_pose_prior_error_function.h +76 -0
- include/momentum/diff_ik/fully_differentiable_position_error_function.h +133 -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 +63 -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 +135 -0
- include/momentum/io/gltf/gltf_file_format.h +19 -0
- include/momentum/io/gltf/gltf_io.h +136 -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 +29 -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 +54 -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/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/librerun_c__linux_x64.a +0 -0
- lib/librerun_sdk.a +0 -0
- lib64/cmake/axel/axel-config.cmake +45 -0
- lib64/cmake/axel/axelTargets-release.cmake +19 -0
- lib64/cmake/axel/axelTargets.cmake +108 -0
- lib64/cmake/momentum/Findre2.cmake +52 -0
- lib64/cmake/momentum/momentum-config.cmake +67 -0
- lib64/cmake/momentum/momentumTargets-release.cmake +269 -0
- lib64/cmake/momentum/momentumTargets.cmake +445 -0
- lib64/libaxel.a +0 -0
- lib64/libmomentum_app_utils.a +0 -0
- lib64/libmomentum_character.a +0 -0
- lib64/libmomentum_character_sequence_solver.a +0 -0
- lib64/libmomentum_character_solver.a +0 -0
- lib64/libmomentum_common.a +0 -0
- lib64/libmomentum_diff_ik.a +0 -0
- lib64/libmomentum_io.a +0 -0
- lib64/libmomentum_io_common.a +0 -0
- lib64/libmomentum_io_fbx.a +0 -0
- lib64/libmomentum_io_gltf.a +0 -0
- lib64/libmomentum_io_legacy_json.a +0 -0
- lib64/libmomentum_io_marker.a +0 -0
- lib64/libmomentum_io_motion.a +0 -0
- lib64/libmomentum_io_shape.a +0 -0
- lib64/libmomentum_io_skeleton.a +0 -0
- lib64/libmomentum_io_urdf.a +0 -0
- lib64/libmomentum_marker_tracker.a +0 -0
- lib64/libmomentum_math.a +0 -0
- lib64/libmomentum_online_qr.a +0 -0
- lib64/libmomentum_process_markers.a +0 -0
- lib64/libmomentum_rasterizer.a +0 -0
- lib64/libmomentum_rerun.a +0 -0
- lib64/libmomentum_simd_constraints.a +0 -0
- lib64/libmomentum_simd_generalized_loss.a +0 -0
- lib64/libmomentum_skeleton.a +0 -0
- lib64/libmomentum_solver.a +0 -0
- pymomentum/axel.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/backend/__init__.py +16 -0
- pymomentum/backend/skel_state_backend.py +614 -0
- pymomentum/backend/trs_backend.py +871 -0
- pymomentum/backend/utils.py +224 -0
- pymomentum/geometry.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/marker_tracking.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/quaternion.py +740 -0
- pymomentum/renderer.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/skel_state.py +514 -0
- pymomentum/solver.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/solver2.cpython-312-x86_64-linux-gnu.so +0 -0
- pymomentum/torch/character.py +809 -0
- pymomentum/torch/parameter_limits.py +494 -0
- pymomentum/torch/utility.py +20 -0
- pymomentum/trs.py +535 -0
- pymomentum_cpu-0.0.0.dist-info/METADATA +209 -0
- pymomentum_cpu-0.0.0.dist-info/RECORD +555 -0
- pymomentum_cpu-0.0.0.dist-info/WHEEL +5 -0
- pymomentum_cpu-0.0.0.dist-info/licenses/LICENSE +21 -0
- pymomentum_cpu.libs/libabsl_base-86f3b38c.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_city-31b65ca2.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_debugging_internal-38680253.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_decode_rust_punycode-750652c3.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_demangle_internal-9a0351a3.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_demangle_rust-71629506.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_examine_stack-57661ecd.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_hash-8c523b7e.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_hashtablez_sampler-b5c3e343.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_int128-295bfed5.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_kernel_timeout_internal-29296ac1.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_globals-6cfa8af5.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_format-a5c79460.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_globals-481e9a7c.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_log_sink_set-ac08f942.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_message-7dfe150a.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_nullguard-883adc72.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_proto-a5da8c75.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_internal_structured_proto-e601fd9b.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_log_sink-894261b2.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_low_level_hash-a3284638.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_malloc_internal-814569de.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_raw_hash_set-922d64ad.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_raw_logging_internal-477f78ec.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_spinlock_wait-8b85a473.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_stacktrace-7369e71d.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_str_format_internal-98de729d.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_strerror-39a52998.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_strings-a57d5127.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_strings_internal-ed8c7c0d.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_symbolize-eba17dd1.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_synchronization-2f8cf326.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_time-066c0dde.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_time_zone-72867365.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_tracing_internal-021e37ee.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libabsl_utf8_for_code_point-de2a4d4a.so.2505.0.0 +0 -0
- pymomentum_cpu.libs/libconsole_bridge-f26e11cc.so.1.0 +0 -0
- pymomentum_cpu.libs/libdeflate-577b71e3.so.0 +0 -0
- pymomentum_cpu.libs/libdispenso-67ac1721.so.1.4.0 +0 -0
- pymomentum_cpu.libs/libezc3d-4a95ab2c.so +0 -0
- pymomentum_cpu.libs/libre2-985fb83c.so.11 +0 -0
- pymomentum_cpu.libs/libtinyxml2-8d10763c.so.11.0.0 +0 -0
- pymomentum_cpu.libs/liburdfdom_model-7b26ae88.so.4.0 +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/types.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
14
|
+
#include <momentum/common/aligned.h>
|
|
15
|
+
|
|
16
|
+
#include <array>
|
|
17
|
+
#include <atomic>
|
|
18
|
+
#include <cstdint>
|
|
19
|
+
|
|
20
|
+
namespace momentum {
|
|
21
|
+
|
|
22
|
+
struct SimdPositionConstraints final {
|
|
23
|
+
public:
|
|
24
|
+
explicit SimdPositionConstraints(const Skeleton* skel);
|
|
25
|
+
|
|
26
|
+
~SimdPositionConstraints();
|
|
27
|
+
|
|
28
|
+
void clearConstraints();
|
|
29
|
+
|
|
30
|
+
void addConstraint(
|
|
31
|
+
size_t jointIndex,
|
|
32
|
+
const Vector3f& offset,
|
|
33
|
+
const Vector3f& target,
|
|
34
|
+
float targetWeight);
|
|
35
|
+
|
|
36
|
+
[[nodiscard]] VectorXi getNumConstraints() const;
|
|
37
|
+
|
|
38
|
+
public:
|
|
39
|
+
// max number of constraints per segment
|
|
40
|
+
static constexpr size_t kMaxConstraints = 4096;
|
|
41
|
+
static constexpr size_t kMaxJoints = 512;
|
|
42
|
+
|
|
43
|
+
// striped arrays for storing the offset
|
|
44
|
+
std::unique_ptr<float, AlignedDeleter> data;
|
|
45
|
+
float* offsetX;
|
|
46
|
+
float* offsetY;
|
|
47
|
+
float* offsetZ;
|
|
48
|
+
// striped arrays for storing the normal + target
|
|
49
|
+
float* targetX;
|
|
50
|
+
float* targetY;
|
|
51
|
+
float* targetZ;
|
|
52
|
+
// array for constraint weight
|
|
53
|
+
float* weights;
|
|
54
|
+
|
|
55
|
+
// store the number of constraints per joint
|
|
56
|
+
std::array<std::atomic<uint32_t>, kMaxJoints> constraintCount;
|
|
57
|
+
int numJoints;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/// A highly optimized error function for 3d position errors.
|
|
61
|
+
///
|
|
62
|
+
/// This class is best used when dealing with a large number of constraints. For fewer constraints,
|
|
63
|
+
/// consider using the generic PositionErrorFunction instead.
|
|
64
|
+
///
|
|
65
|
+
/// @warning Due to the multi-threaded evaluation of the error/gradient, the functions are
|
|
66
|
+
/// non-deterministic, which may cause numerical inconsistencies. As a result, slightly different
|
|
67
|
+
/// results may be produced on multiple calls with the same data.
|
|
68
|
+
class SimdPositionErrorFunction : public SkeletonErrorFunction {
|
|
69
|
+
public:
|
|
70
|
+
/// The dimensionality of each constraint.
|
|
71
|
+
static constexpr size_t kConstraintDim = 3;
|
|
72
|
+
|
|
73
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
74
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
75
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
76
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
77
|
+
explicit SimdPositionErrorFunction(
|
|
78
|
+
const Skeleton& skel,
|
|
79
|
+
const ParameterTransform& pt,
|
|
80
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
81
|
+
|
|
82
|
+
/// @param maxThreads An optional parameter that specifies the maximum number of threads to be
|
|
83
|
+
/// used with dispenso::parallel_for. If this parameter is set to zero, the function will run in
|
|
84
|
+
/// serial mode, i.e., it will not use any additional threads. By default, the value is set to the
|
|
85
|
+
/// maximum allowable size of a uint32_t, which is also the default for dispenso.
|
|
86
|
+
explicit SimdPositionErrorFunction(
|
|
87
|
+
const Character& character,
|
|
88
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
89
|
+
|
|
90
|
+
[[nodiscard]] double getError(const ModelParameters& params, const SkeletonState& state) override;
|
|
91
|
+
|
|
92
|
+
double getGradient(
|
|
93
|
+
const ModelParameters& params,
|
|
94
|
+
const SkeletonState& state,
|
|
95
|
+
Ref<VectorXf> gradient) override;
|
|
96
|
+
|
|
97
|
+
double getJacobian(
|
|
98
|
+
const ModelParameters& /* params */,
|
|
99
|
+
const SkeletonState& state,
|
|
100
|
+
Ref<MatrixXf> jacobian,
|
|
101
|
+
Ref<VectorXf> residual,
|
|
102
|
+
int& usedRows) override;
|
|
103
|
+
|
|
104
|
+
[[nodiscard]] size_t getJacobianSize() const override;
|
|
105
|
+
|
|
106
|
+
void setConstraints(const SimdPositionConstraints* cstrs);
|
|
107
|
+
|
|
108
|
+
protected:
|
|
109
|
+
// weights for the error functions
|
|
110
|
+
static constexpr float kPositionWeight = 1e-4f;
|
|
111
|
+
|
|
112
|
+
mutable std::vector<size_t> jacobianOffset_;
|
|
113
|
+
|
|
114
|
+
// constraints to use
|
|
115
|
+
const SimdPositionConstraints* constraints_;
|
|
116
|
+
|
|
117
|
+
uint32_t maxThreads_;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
#ifdef MOMENTUM_ENABLE_AVX
|
|
121
|
+
|
|
122
|
+
// A version of SimdPositionErrorFunction where the Jacobian has been hand-unrolled using
|
|
123
|
+
// AVX instructions. On some platforms this performs better than the generic SIMD version
|
|
124
|
+
// but it only works on Intel platforms that support AVX.
|
|
125
|
+
class SimdPositionErrorFunctionAVX : public SimdPositionErrorFunction {
|
|
126
|
+
public:
|
|
127
|
+
explicit SimdPositionErrorFunctionAVX(
|
|
128
|
+
const Skeleton& skel,
|
|
129
|
+
const ParameterTransform& pt,
|
|
130
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
131
|
+
|
|
132
|
+
explicit SimdPositionErrorFunctionAVX(
|
|
133
|
+
const Character& character,
|
|
134
|
+
uint32_t maxThreads = std::numeric_limits<uint32_t>::max());
|
|
135
|
+
|
|
136
|
+
double getError(const ModelParameters& params, const SkeletonState& state) final;
|
|
137
|
+
|
|
138
|
+
double getGradient(
|
|
139
|
+
const ModelParameters& params,
|
|
140
|
+
const SkeletonState& state,
|
|
141
|
+
Ref<VectorXf> gradient) final;
|
|
142
|
+
|
|
143
|
+
double getJacobian(
|
|
144
|
+
const ModelParameters& params,
|
|
145
|
+
const SkeletonState& state,
|
|
146
|
+
Ref<MatrixXf> jacobian,
|
|
147
|
+
Ref<VectorXf> residual,
|
|
148
|
+
int& usedRows) final;
|
|
149
|
+
|
|
150
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
#endif // MOMENTUM_ENABLE_AVX
|
|
154
|
+
|
|
155
|
+
} // namespace momentum
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/parameter_transform.h>
|
|
12
|
+
#include <momentum/character/types.h>
|
|
13
|
+
#include <momentum/character_solver/fwd.h>
|
|
14
|
+
|
|
15
|
+
namespace momentum {
|
|
16
|
+
|
|
17
|
+
template <typename T>
|
|
18
|
+
class SkeletonErrorFunctionT {
|
|
19
|
+
public:
|
|
20
|
+
SkeletonErrorFunctionT(const Skeleton& skel, const ParameterTransform& pt)
|
|
21
|
+
: skeleton_(skel),
|
|
22
|
+
parameterTransform_(pt),
|
|
23
|
+
weight_(1.0),
|
|
24
|
+
activeJointParams_(pt.activeJointParams) {
|
|
25
|
+
enabledParameters_.flip(); // all parameters enabled by default
|
|
26
|
+
}
|
|
27
|
+
virtual ~SkeletonErrorFunctionT() = default;
|
|
28
|
+
|
|
29
|
+
[[nodiscard]] const Skeleton& getSkeleton() const {
|
|
30
|
+
return skeleton_;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
[[nodiscard]] const ParameterTransform& getParameterTransform() const {
|
|
34
|
+
return parameterTransform_;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void setWeight(T w) {
|
|
38
|
+
weight_ = w;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[[nodiscard]] T getWeight() const {
|
|
42
|
+
return weight_;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
void setActiveJoints(const VectorX<bool>& aj) {
|
|
46
|
+
activeJointParams_ = aj;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
void setEnabledParameters(const ParameterSet& ps) {
|
|
50
|
+
enabledParameters_ = ps;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
virtual double getError(
|
|
54
|
+
const ModelParametersT<T>& /* params */,
|
|
55
|
+
const SkeletonStateT<T>& /* state */) {
|
|
56
|
+
return 0.0f;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
virtual double getGradient(
|
|
60
|
+
const ModelParametersT<T>& /* params */,
|
|
61
|
+
const SkeletonStateT<T>& /* state */,
|
|
62
|
+
Eigen::Ref<Eigen::VectorX<T>> /* gradient */) {
|
|
63
|
+
return 0.0f;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
virtual double getJacobian(
|
|
67
|
+
const ModelParametersT<T>& /* params */,
|
|
68
|
+
const SkeletonStateT<T>& /* state */,
|
|
69
|
+
Eigen::Ref<Eigen::MatrixX<T>> /* jacobian */,
|
|
70
|
+
Eigen::Ref<Eigen::VectorX<T>> /* residual */,
|
|
71
|
+
int& usedRows) {
|
|
72
|
+
usedRows = 0;
|
|
73
|
+
return 0.0f;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
virtual void getHessian(
|
|
77
|
+
const ModelParametersT<T>& /* params */,
|
|
78
|
+
const SkeletonStateT<T>& /* state */,
|
|
79
|
+
Eigen::Ref<Eigen::MatrixX<T>> /* hessian */) {
|
|
80
|
+
throw;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
virtual double getSolverDerivatives(
|
|
84
|
+
const ModelParametersT<T>& parameters,
|
|
85
|
+
const SkeletonStateT<T>& state,
|
|
86
|
+
const size_t actualParameters,
|
|
87
|
+
Eigen::MatrixX<T>& hess,
|
|
88
|
+
Eigen::VectorX<T>& grad) {
|
|
89
|
+
const int paramSize = static_cast<int>(parameters.size());
|
|
90
|
+
double error = 0.0;
|
|
91
|
+
|
|
92
|
+
if (useHessian_) {
|
|
93
|
+
// get some ice cream, you deserve it
|
|
94
|
+
error = getGradient(parameters, state, grad);
|
|
95
|
+
getHessian(parameters, state, hess);
|
|
96
|
+
} else {
|
|
97
|
+
const int residualSize = static_cast<int>(getJacobianSize());
|
|
98
|
+
|
|
99
|
+
Eigen::MatrixX<T> jacobian = Eigen::MatrixX<T>::Zero(residualSize, paramSize);
|
|
100
|
+
Eigen::VectorX<T> residual = Eigen::VectorX<T>::Zero(residualSize);
|
|
101
|
+
int rows = 0;
|
|
102
|
+
error = getJacobian(parameters, state, jacobian, residual, rows);
|
|
103
|
+
|
|
104
|
+
// Update JtJ
|
|
105
|
+
if (rows > 0) {
|
|
106
|
+
// ! In truth, on the the "actualParameters" leftmost block will be used
|
|
107
|
+
// We take advantage of this here and skip the other computations
|
|
108
|
+
const auto JtBlock2 =
|
|
109
|
+
(jacobian.topLeftCorner(rows, actualParameters).transpose() * 2.0).eval();
|
|
110
|
+
|
|
111
|
+
// Update Hessian (Hessian += 2.0 * J^T * J) using selfadjointView with rankUpdate,
|
|
112
|
+
// replacing triangularView
|
|
113
|
+
hess.template selfadjointView<Eigen::Lower>().rankUpdate(JtBlock2);
|
|
114
|
+
|
|
115
|
+
// Update JtR
|
|
116
|
+
grad.noalias() += JtBlock2 * residual.head(rows);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return error;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
[[nodiscard]] virtual size_t getJacobianSize() const {
|
|
124
|
+
return 0;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
protected:
|
|
128
|
+
const Skeleton& skeleton_;
|
|
129
|
+
const ParameterTransform& parameterTransform_;
|
|
130
|
+
T weight_;
|
|
131
|
+
VectorX<bool> activeJointParams_;
|
|
132
|
+
ParameterSet enabledParameters_; // set to zero by default constr
|
|
133
|
+
bool useHessian_{false}; // this can be true only if the getHessian is implemented
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
} // namespace momentum
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/fwd.h>
|
|
11
|
+
#include <momentum/character/parameter_transform.h>
|
|
12
|
+
#include <momentum/character/types.h>
|
|
13
|
+
#include <momentum/character_solver/fwd.h>
|
|
14
|
+
#include <momentum/solver/solver_function.h>
|
|
15
|
+
|
|
16
|
+
namespace momentum {
|
|
17
|
+
|
|
18
|
+
template <typename T>
|
|
19
|
+
class SkeletonSolverFunctionT : public SolverFunctionT<T> {
|
|
20
|
+
public:
|
|
21
|
+
SkeletonSolverFunctionT(const Skeleton* skel, const ParameterTransformT<T>* parameterTransform);
|
|
22
|
+
|
|
23
|
+
double getError(const Eigen::VectorX<T>& parameters) final;
|
|
24
|
+
|
|
25
|
+
double getGradient(const Eigen::VectorX<T>& parameters, Eigen::VectorX<T>& gradient) final;
|
|
26
|
+
|
|
27
|
+
double getJacobian(
|
|
28
|
+
const Eigen::VectorX<T>& parameters,
|
|
29
|
+
Eigen::MatrixX<T>& jacobian,
|
|
30
|
+
Eigen::VectorX<T>& residual,
|
|
31
|
+
size_t& actualRows) final;
|
|
32
|
+
|
|
33
|
+
double getJtJR(
|
|
34
|
+
const Eigen::VectorX<T>& parameters,
|
|
35
|
+
Eigen::MatrixX<T>& jtj,
|
|
36
|
+
Eigen::VectorX<T>& jtr) override;
|
|
37
|
+
|
|
38
|
+
// overriding this to get a mix of JtJs and analytical Hessians from skeleton_ errorFunctions_
|
|
39
|
+
double getSolverDerivatives(
|
|
40
|
+
const Eigen::VectorX<T>& parameters,
|
|
41
|
+
Eigen::MatrixX<T>& hess,
|
|
42
|
+
Eigen::VectorX<T>& grad) override;
|
|
43
|
+
|
|
44
|
+
void updateParameters(Eigen::VectorX<T>& parameters, const Eigen::VectorX<T>& delta) final;
|
|
45
|
+
void setEnabledParameters(const ParameterSet& ps) final;
|
|
46
|
+
|
|
47
|
+
void addErrorFunction(std::shared_ptr<SkeletonErrorFunctionT<T>> solvable);
|
|
48
|
+
void clearErrorFunctions();
|
|
49
|
+
|
|
50
|
+
[[nodiscard]] const std::vector<std::shared_ptr<SkeletonErrorFunctionT<T>>>& getErrorFunctions()
|
|
51
|
+
const;
|
|
52
|
+
|
|
53
|
+
[[nodiscard]] const Skeleton* getSkeleton() const {
|
|
54
|
+
return skeleton_;
|
|
55
|
+
}
|
|
56
|
+
[[nodiscard]] const ParameterTransformT<T>* getParameterTransform() const {
|
|
57
|
+
return parameterTransform_;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private:
|
|
61
|
+
const Skeleton* skeleton_;
|
|
62
|
+
const ParameterTransformT<T>* parameterTransform_;
|
|
63
|
+
std::unique_ptr<SkeletonStateT<T>> state_;
|
|
64
|
+
VectorX<bool> activeJointParams_;
|
|
65
|
+
|
|
66
|
+
Eigen::MatrixX<T> tJacobian_;
|
|
67
|
+
Eigen::VectorX<T> tResidual_;
|
|
68
|
+
|
|
69
|
+
std::vector<std::shared_ptr<SkeletonErrorFunctionT<T>>> errorFunctions_;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
} // namespace momentum
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/skinned_locator.h>
|
|
11
|
+
#include <momentum/character_solver/error_function_utils.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/plane_error_function.h>
|
|
14
|
+
#include <momentum/character_solver/position_error_function.h>
|
|
15
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
16
|
+
#include <momentum/math/fwd.h>
|
|
17
|
+
|
|
18
|
+
namespace momentum {
|
|
19
|
+
|
|
20
|
+
/// Constraint structure for skinned locator error function.
|
|
21
|
+
///
|
|
22
|
+
/// Represents a constraint that pulls a skinned locator towards a target position
|
|
23
|
+
/// in world space with a specified weight.
|
|
24
|
+
template <typename T>
|
|
25
|
+
struct SkinnedLocatorConstraintT {
|
|
26
|
+
int locatorIndex = -1;
|
|
27
|
+
T weight = 1;
|
|
28
|
+
Eigen::Vector3<T> targetPosition;
|
|
29
|
+
|
|
30
|
+
template <typename T2>
|
|
31
|
+
SkinnedLocatorConstraintT<T2> cast() const {
|
|
32
|
+
return {
|
|
33
|
+
this->locatorIndex,
|
|
34
|
+
static_cast<T2>(this->weight),
|
|
35
|
+
this->targetPosition.template cast<T2>()};
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/// Error function for skinned locator constraints.
|
|
40
|
+
///
|
|
41
|
+
/// This error function computes the error between skinned locator positions and their
|
|
42
|
+
/// target positions. Skinned locators are points that are deformed by the character's
|
|
43
|
+
/// skeleton and can be used to constrain the character to specific world positions.
|
|
44
|
+
/// The error is computed as the weighted squared distance between the current skinned
|
|
45
|
+
/// locator position and the target position.
|
|
46
|
+
template <typename T>
|
|
47
|
+
class SkinnedLocatorErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
48
|
+
public:
|
|
49
|
+
/// Constructs a skinned locator error function for the given character.
|
|
50
|
+
explicit SkinnedLocatorErrorFunctionT(const Character& character_in);
|
|
51
|
+
~SkinnedLocatorErrorFunctionT() override;
|
|
52
|
+
|
|
53
|
+
SkinnedLocatorErrorFunctionT(const SkinnedLocatorErrorFunctionT<T>& other) = delete;
|
|
54
|
+
SkinnedLocatorErrorFunctionT<T>& operator=(const SkinnedLocatorErrorFunctionT<T>& other) = delete;
|
|
55
|
+
SkinnedLocatorErrorFunctionT(SkinnedLocatorErrorFunctionT<T>&& other) = delete;
|
|
56
|
+
SkinnedLocatorErrorFunctionT<T>& operator=(SkinnedLocatorErrorFunctionT<T>&& other) = delete;
|
|
57
|
+
|
|
58
|
+
/// Computes the total error for all skinned locator constraints.
|
|
59
|
+
///
|
|
60
|
+
/// @param modelParameters The current model parameters
|
|
61
|
+
/// @param state The current skeleton state
|
|
62
|
+
/// @return The sum of weighted squared distances between locators and targets
|
|
63
|
+
[[nodiscard]] double getError(
|
|
64
|
+
const ModelParametersT<T>& modelParameters,
|
|
65
|
+
const SkeletonStateT<T>& state) final;
|
|
66
|
+
|
|
67
|
+
/// Computes the gradient of the error function with respect to model parameters.
|
|
68
|
+
///
|
|
69
|
+
/// @param modelParameters The current model parameters
|
|
70
|
+
/// @param state The current skeleton state
|
|
71
|
+
/// @param gradient Output gradient vector to be filled
|
|
72
|
+
/// @return The total error value
|
|
73
|
+
double getGradient(
|
|
74
|
+
const ModelParametersT<T>& modelParameters,
|
|
75
|
+
const SkeletonStateT<T>& state,
|
|
76
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
77
|
+
|
|
78
|
+
/// Computes the Jacobian matrix and residual vector for the error function.
|
|
79
|
+
///
|
|
80
|
+
/// @param modelParameters The current model parameters
|
|
81
|
+
/// @param state The current skeleton state
|
|
82
|
+
/// @param jacobian Output Jacobian matrix to be filled
|
|
83
|
+
/// @param residual Output residual vector to be filled
|
|
84
|
+
/// @param usedRows Number of rows used in the Jacobian (output parameter)
|
|
85
|
+
/// @return The total error value
|
|
86
|
+
double getJacobian(
|
|
87
|
+
const ModelParametersT<T>& modelParameters,
|
|
88
|
+
const SkeletonStateT<T>& state,
|
|
89
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
90
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
91
|
+
int& usedRows) final;
|
|
92
|
+
|
|
93
|
+
/// Returns the number of rows needed for the Jacobian matrix.
|
|
94
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
95
|
+
|
|
96
|
+
/// Adds a new skinned locator constraint.
|
|
97
|
+
///
|
|
98
|
+
/// @param locatorIndex Index of the skinned locator in the character
|
|
99
|
+
/// @param weight Weight for this constraint
|
|
100
|
+
/// @param targetPosition Target position in world space
|
|
101
|
+
void addConstraint(int locatorIndex, T weight, const Eigen::Vector3<T>& targetPosition);
|
|
102
|
+
|
|
103
|
+
/// Removes all constraints.
|
|
104
|
+
void clearConstraints();
|
|
105
|
+
|
|
106
|
+
/// Sets all constraints at once, replacing any existing constraints.
|
|
107
|
+
///
|
|
108
|
+
/// @param constraints Vector of constraints to set
|
|
109
|
+
void setConstraints(const std::vector<SkinnedLocatorConstraintT<T>>& constraints);
|
|
110
|
+
|
|
111
|
+
/// Returns the current list of constraints.
|
|
112
|
+
[[nodiscard]] const std::vector<SkinnedLocatorConstraintT<T>>& getConstraints() const {
|
|
113
|
+
return constraints_;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// Returns the character associated with this error function.
|
|
117
|
+
[[nodiscard]] const Character& getCharacter() const {
|
|
118
|
+
return character_;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private:
|
|
122
|
+
// Get the parameter index for a skinned locator, or -1 if not parameterized
|
|
123
|
+
[[nodiscard]] int getSkinnedLocatorParameterIndex(int locatorIndex) const {
|
|
124
|
+
if (locatorIndex <
|
|
125
|
+
static_cast<int>(character_.parameterTransform.skinnedLocatorParameters.size())) {
|
|
126
|
+
return character_.parameterTransform.skinnedLocatorParameters[locatorIndex];
|
|
127
|
+
}
|
|
128
|
+
return -1;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// Calculate the derivative of the world position with respect to the rest position
|
|
132
|
+
void calculateDWorldPos(
|
|
133
|
+
const SkeletonStateT<T>& state,
|
|
134
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
135
|
+
const Eigen::Vector3<T>& d_restPos,
|
|
136
|
+
Eigen::Vector3<T>& d_worldPos) const;
|
|
137
|
+
double calculatePositionJacobian(
|
|
138
|
+
const ModelParametersT<T>& modelParameters,
|
|
139
|
+
const SkeletonStateT<T>& state,
|
|
140
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
141
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
142
|
+
Ref<Eigen::VectorX<T>> res) const;
|
|
143
|
+
|
|
144
|
+
double calculatePositionGradient(
|
|
145
|
+
const ModelParametersT<T>& modelParameters,
|
|
146
|
+
const SkeletonStateT<T>& state,
|
|
147
|
+
const SkinnedLocatorConstraintT<T>& constr,
|
|
148
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
149
|
+
|
|
150
|
+
// Calculate the skinned locator position in world space
|
|
151
|
+
Eigen::Vector3<T> calculateSkinnedLocatorPosition(
|
|
152
|
+
const SkeletonStateT<T>& state,
|
|
153
|
+
int locatorIndex,
|
|
154
|
+
const Eigen::Vector3<T>& locatorRestPos) const;
|
|
155
|
+
Eigen::Vector3<T> getLocatorRestPosition(const ModelParametersT<T>& modelParams, int locatorIndex)
|
|
156
|
+
const;
|
|
157
|
+
|
|
158
|
+
const Character& character_;
|
|
159
|
+
|
|
160
|
+
std::vector<SkinnedLocatorConstraintT<T>> constraints_;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
} // namespace momentum
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <momentum/character/skinned_locator.h>
|
|
11
|
+
#include <momentum/character_solver/error_function_utils.h>
|
|
12
|
+
#include <momentum/character_solver/fwd.h>
|
|
13
|
+
#include <momentum/character_solver/skeleton_error_function.h>
|
|
14
|
+
#include <momentum/character_solver/vertex_error_function.h>
|
|
15
|
+
#include <momentum/math/fwd.h>
|
|
16
|
+
|
|
17
|
+
namespace momentum {
|
|
18
|
+
|
|
19
|
+
template <typename T>
|
|
20
|
+
struct SkinnedLocatorTriangleConstraintT {
|
|
21
|
+
int locatorIndex = -1;
|
|
22
|
+
Eigen::Vector3i tgtTriangleIndices;
|
|
23
|
+
Eigen::Vector3<T> tgtTriangleBaryCoords;
|
|
24
|
+
T depth = 0;
|
|
25
|
+
T weight = 1;
|
|
26
|
+
|
|
27
|
+
template <typename T2>
|
|
28
|
+
SkinnedLocatorTriangleConstraintT<T2> cast() const {
|
|
29
|
+
return {
|
|
30
|
+
this->locatorIndex,
|
|
31
|
+
this->tgtTriangleIndices,
|
|
32
|
+
this->tgtTriangleBaryCoords.template cast<T2>(),
|
|
33
|
+
static_cast<T2>(this->depth),
|
|
34
|
+
static_cast<T2>(this->weight)};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/// Support constraining a skinned locator to a location on the mesh defined by a target triangle
|
|
39
|
+
/// and its normal. The target point is specified as sum_i (bary_i * target_triangle_vertex_i) +
|
|
40
|
+
/// depth * target_triangle_normal. This constraint applies "forces" both to the skinned locator and
|
|
41
|
+
/// every vertex in the mesh target triangle, so it will actually try to pull both toward each
|
|
42
|
+
/// other.
|
|
43
|
+
template <typename T>
|
|
44
|
+
class SkinnedLocatorTriangleErrorFunctionT : public SkeletonErrorFunctionT<T> {
|
|
45
|
+
public:
|
|
46
|
+
explicit SkinnedLocatorTriangleErrorFunctionT(
|
|
47
|
+
const Character& character,
|
|
48
|
+
VertexConstraintType type = VertexConstraintType::Position);
|
|
49
|
+
~SkinnedLocatorTriangleErrorFunctionT() override;
|
|
50
|
+
|
|
51
|
+
SkinnedLocatorTriangleErrorFunctionT(const SkinnedLocatorTriangleErrorFunctionT& other) = delete;
|
|
52
|
+
SkinnedLocatorTriangleErrorFunctionT& operator=(const SkinnedLocatorTriangleErrorFunctionT&) =
|
|
53
|
+
delete;
|
|
54
|
+
SkinnedLocatorTriangleErrorFunctionT(SkinnedLocatorTriangleErrorFunctionT&&) = delete;
|
|
55
|
+
SkinnedLocatorTriangleErrorFunctionT& operator=(SkinnedLocatorTriangleErrorFunctionT&&) = delete;
|
|
56
|
+
|
|
57
|
+
[[nodiscard]] double getError(
|
|
58
|
+
const ModelParametersT<T>& modelParameters,
|
|
59
|
+
const SkeletonStateT<T>& state) final;
|
|
60
|
+
|
|
61
|
+
double getGradient(
|
|
62
|
+
const ModelParametersT<T>& modelParameters,
|
|
63
|
+
const SkeletonStateT<T>& state,
|
|
64
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) final;
|
|
65
|
+
|
|
66
|
+
double getJacobian(
|
|
67
|
+
const ModelParametersT<T>& modelParameters,
|
|
68
|
+
const SkeletonStateT<T>& state,
|
|
69
|
+
Eigen::Ref<Eigen::MatrixX<T>> jacobian,
|
|
70
|
+
Eigen::Ref<Eigen::VectorX<T>> residual,
|
|
71
|
+
int& usedRows) final;
|
|
72
|
+
|
|
73
|
+
[[nodiscard]] size_t getJacobianSize() const final;
|
|
74
|
+
|
|
75
|
+
void addConstraint(
|
|
76
|
+
int locatorIndex,
|
|
77
|
+
const Eigen::Vector3i& triangleIndices,
|
|
78
|
+
const Eigen::Vector3<T>& triangleBaryCoords,
|
|
79
|
+
float depth = 0,
|
|
80
|
+
T weight = 1);
|
|
81
|
+
void clearConstraints();
|
|
82
|
+
void setConstraints(const std::vector<SkinnedLocatorTriangleConstraintT<T>>& constraints);
|
|
83
|
+
|
|
84
|
+
[[nodiscard]] const std::vector<SkinnedLocatorTriangleConstraintT<T>>& getConstraints() const {
|
|
85
|
+
return constraints_;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
[[nodiscard]] const Character& getCharacter() const {
|
|
89
|
+
return character_;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
private:
|
|
93
|
+
// Get the parameter index for a skinned locator, or -1 if not parameterized
|
|
94
|
+
[[nodiscard]] int getSkinnedLocatorParameterIndex(int locatorIndex) const {
|
|
95
|
+
if (locatorIndex <
|
|
96
|
+
static_cast<int>(character_.parameterTransform.skinnedLocatorParameters.size())) {
|
|
97
|
+
return character_.parameterTransform.skinnedLocatorParameters[locatorIndex];
|
|
98
|
+
}
|
|
99
|
+
return -1;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
double calculatePositionJacobian(
|
|
103
|
+
const ModelParametersT<T>& modelParameters,
|
|
104
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
105
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
106
|
+
Ref<Eigen::VectorX<T>> res) const;
|
|
107
|
+
|
|
108
|
+
double calculatePlaneJacobian(
|
|
109
|
+
const ModelParametersT<T>& modelParameters,
|
|
110
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
111
|
+
Ref<Eigen::MatrixX<T>> jac,
|
|
112
|
+
T& res) const;
|
|
113
|
+
|
|
114
|
+
double calculatePositionGradient(
|
|
115
|
+
const ModelParametersT<T>& modelParameters,
|
|
116
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
117
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
118
|
+
|
|
119
|
+
double calculatePlaneGradient(
|
|
120
|
+
const ModelParametersT<T>& modelParameters,
|
|
121
|
+
const SkinnedLocatorTriangleConstraintT<T>& constr,
|
|
122
|
+
Eigen::Ref<Eigen::VectorX<T>> gradient) const;
|
|
123
|
+
|
|
124
|
+
Eigen::Vector3<T> getLocatorRestPosition(const ModelParametersT<T>& modelParams, int locatorIndex)
|
|
125
|
+
const;
|
|
126
|
+
|
|
127
|
+
const Character& character_;
|
|
128
|
+
|
|
129
|
+
std::vector<SkinnedLocatorTriangleConstraintT<T>> constraints_;
|
|
130
|
+
|
|
131
|
+
std::unique_ptr<MeshT<T>> neutralMesh_; // Rest mesh without facial expression basis
|
|
132
|
+
std::unique_ptr<MeshT<T>> restMesh_; // Rest positions after shape basis is applied
|
|
133
|
+
|
|
134
|
+
const VertexConstraintType constraintType_;
|
|
135
|
+
void updateMeshes(const ModelParametersT<T>& modelParameters);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
} // namespace momentum
|