|
Blender V4.3
|
#include "BLI_math_vector_types.hh"#include "BLI_offset_indices.hh"#include "BLI_span.hh"#include "BLI_sys_types.h"#include "BLI_virtual_array.hh"#include "BKE_multires.hh"Go to the source code of this file.
Classes | |
| struct | MultiresReshapeContext |
| struct | GridCoord |
| struct | PTexCoord |
| struct | ReshapeGridElement |
| struct | ReshapeConstGridElement |
Namespaces | |
| namespace | blender |
| namespace | blender::bke |
| namespace | blender::bke::subdiv |
| void multires_reshape_apply_base_refine_from_base | ( | MultiresReshapeContext * | reshape_context | ) |
Refine subdivision surface to the new positions of the base mesh.
Definition at line 136 of file multires_reshape_apply_base.cc.
References MultiresReshapeContext::base_mesh, blender::bke::subdiv::eval_refine_from_mesh(), and MultiresReshapeContext::subdiv.
Referenced by multiresModifier_base_apply().
| void multires_reshape_apply_base_refine_from_deform | ( | MultiresReshapeContext * | reshape_context | ) |
Refine subdivision surface to the new positions of the deformed mesh (base mesh with all modifiers leading the multi-res applied).
Definition at line 142 of file multires_reshape_apply_base.cc.
References MultiresReshapeContext::base_mesh, BKE_multires_create_deformed_base_mesh_vert_coords(), BLI_assert, depsgraph, MultiresReshapeContext::depsgraph, blender::bke::subdiv::eval_refine_from_mesh(), MultiresReshapeContext::mmd, MultiresReshapeContext::object, and MultiresReshapeContext::subdiv.
Referenced by multiresModifier_base_apply().
| void multires_reshape_apply_base_refit_base_mesh | ( | MultiresReshapeContext * | reshape_context | ) |
Perform better fitting of the base mesh so its subdivided version brings vertices to their desired locations.
Definition at line 59 of file multires_reshape_apply_base.cc.
References add_v3_v3(), MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, copy_v3_v3(), blender::bke::mesh::face_normal_calc(), float, MEM_calloc_arrayN, MEM_freeN(), mul_v3_fl(), normalize_v3(), blender::offset_indices::GroupedSpan< T >::size(), size(), v3_dist_from_plane(), and Mesh::verts_num.
Referenced by multiresModifier_base_apply().
| void multires_reshape_apply_base_update_mesh_coords | ( | MultiresReshapeContext * | reshape_context | ) |
Update mesh coordinates to the final positions of displacement in object space. This is effectively desired position of base mesh vertices after canceling out displacement.
Definition at line 22 of file multires_reshape_apply_base.cc.
References add_v3_v3v3(), MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, ReshapeConstGridElement::displacement, GridCoord::grid_index, blender::Span< T >::index_range(), mul_v3_m3v3(), multires_reshape_evaluate_limit_at_grid(), multires_reshape_orig_grid_element_for_grid_coord(), P, GridCoord::u, and GridCoord::v.
Referenced by multiresModifier_base_apply().
| bool multires_reshape_assign_final_coords_from_ccg | ( | const MultiresReshapeContext * | reshape_context, |
| SubdivCCG * | subdiv_ccg ) |
Store final object-space coordinates in the displacement grids. The reason why displacement grids are used for storage is based on memory footprint optimization.
Definition at line 18 of file multires_reshape_ccg.cc.
References BKE_subdiv_ccg_key(), BLI_assert, ReshapeGridElement::displacement, float, GridCoord::grid_index, MultiresReshapeContext::grid_size, SubdivCCG::grids_num, blender::Array< T, InlineBufferCapacity, Allocator >::is_empty(), MultiresReshapeContext::level, ReshapeGridElement::mask, SubdivCCG::masks, multires_reshape_grid_element_for_grid_coord(), SubdivCCG::positions, MultiresReshapeContext::reshape, GridCoord::u, GridCoord::v, v, x, and y.
Referenced by multiresModifier_reshapeFromCCG().
| void multires_reshape_assign_final_coords_from_mdisps | ( | const MultiresReshapeContext * | reshape_context | ) |
Reads and writes to the current mesh CD_MDISPS.
Definition at line 795 of file multires_reshape_util.cc.
References assign_final_coords_from_mdisps(), foreach_grid_coordinate(), MultiresReshapeContext::level, and MultiresReshapeContext::top.
Referenced by multires_do_versions_simple_to_catmull_clark(), multiresModifier_base_apply(), and multiresModifier_rebuild_subdiv().
| bool multires_reshape_assign_final_coords_from_vertcos | ( | const MultiresReshapeContext * | reshape_context, |
| const float(*) | vert_coords[3], | ||
| int | num_vert_coords ) |
Set displacement grids values at a reshape level to a object coordinates of the given source.
False will be returned if the number of vertex coordinates did not match required number of vertices at a reshape level.
Definition at line 167 of file multires_reshape_vertcos.cc.
References MultiresReshapeContext::base_mesh, blender::bke::subdiv::foreach_subdiv_geometry(), MultiresReshapeContext::level, multires_reshape_vertcos_foreach_topology_info(), multires_reshape_vertcos_foreach_vertex_every_corner(), multires_reshape_vertcos_foreach_vertex_every_edge(), multires_reshape_vertcos_foreach_vertex_inner(), MultiresReshapeContext::reshape, MultiresReshapeAssignVertcosContext::reshape_context, blender::bke::subdiv::ToMeshSettings::resolution, MultiresReshapeContext::subdiv, blender::bke::subdiv::ForeachContext::topology_info, and blender::bke::subdiv::ToMeshSettings::use_optimal_display.
Referenced by multiresModifier_reshapeFromVertcos().
| void multires_reshape_assign_final_elements_from_orig_mdisps | ( | const MultiresReshapeContext * | reshape_context | ) |
Reads from original #CD_MIDTSPS, writes to the current mesh CD_MDISPS.
Definition at line 825 of file multires_reshape_util.cc.
References assign_final_elements_from_orig_mdisps(), foreach_grid_coordinate(), MultiresReshapeContext::level, and MultiresReshapeContext::top.
Referenced by multiresModifier_subdivide_to_level().
| bool multires_reshape_context_create_from_base_mesh | ( | MultiresReshapeContext * | reshape_context, |
| Depsgraph * | depsgraph, | ||
| Object * | object, | ||
| MultiresModifierData * | mmd ) |
Definition at line 147 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_corner_edges, MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_edges, MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, context_init_common(), context_verify_or_free(), context_zero(), DEG_get_evaluated_scene(), depsgraph, MultiresReshapeContext::depsgraph, MultiresReshapeContext::grid_size, blender::bke::subdiv::grid_size_from_level(), MultiresReshapeContext::level, MultiresReshapeContext::mmd, multires_get_level(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::object, MultiresReshapeContext::reshape, MultiresReshapeContext::subdiv, MultiresReshapeContext::top, and MultiresModifierData::totlvl.
Referenced by multiresModifier_rebuild_subdiv().
| bool multires_reshape_context_create_from_ccg | ( | MultiresReshapeContext * | reshape_context, |
| SubdivCCG * | subdiv_ccg, | ||
| Mesh * | base_mesh, | ||
| int | top_level ) |
Definition at line 236 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_corner_edges, MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_edges, MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, context_init_common(), context_verify_or_free(), context_zero(), MultiresReshapeContext::grid_size, blender::bke::subdiv::grid_size_from_level(), MultiresReshapeContext::level, SubdivCCG::level, MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::reshape, MultiresReshapeContext::subdiv, SubdivCCG::subdiv, and MultiresReshapeContext::top.
Referenced by multiresModifier_reshapeFromCCG().
| bool multires_reshape_context_create_from_modifier | ( | MultiresReshapeContext * | reshape_context, |
| Object * | object, | ||
| MultiresModifierData * | mmd, | ||
| int | top_level ) |
Definition at line 266 of file multires_reshape_util.cc.
References multires_reshape_context_create_from_subdiv(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, and result.
Referenced by multires_do_versions_simple_to_catmull_clark(), multires_subdivide_create_tangent_displacement_linear_grids(), and multiresModifier_subdivide_to_level().
| bool multires_reshape_context_create_from_object | ( | MultiresReshapeContext * | reshape_context, |
| Depsgraph * | depsgraph, | ||
| Object * | object, | ||
| MultiresModifierData * | mmd ) |
Definition at line 189 of file multires_reshape_util.cc.
References Geometry::attributes, MultiresReshapeContext::base_corner_edges, MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_edges, MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, MultiresReshapeContext::cd_edge_crease, MultiresReshapeContext::cd_vertex_crease, context_init_common(), context_verify_or_free(), context_zero(), DEG_get_evaluated_scene(), depsgraph, MultiresReshapeContext::depsgraph, MultiresReshapeContext::grid_size, MultiresReshapeContext::level, MultiresReshapeContext::mmd, multires_get_level(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::object, MultiresReshapeContext::reshape, MultiresReshapeContext::subdiv, MultiresReshapeContext::top, and MultiresModifierData::totlvl.
Referenced by multiresModifier_base_apply(), multiresModifier_rebuild_subdiv(), and multiresModifier_reshapeFromVertcos().
| bool multires_reshape_context_create_from_subdiv | ( | MultiresReshapeContext * | reshape_context, |
| Object * | object, | ||
| MultiresModifierData * | mmd, | ||
| blender::bke::subdiv::Subdiv * | subdiv, | ||
| int | top_level ) |
Definition at line 281 of file multires_reshape_util.cc.
References Geometry::attributes, MultiresReshapeContext::base_corner_edges, MultiresReshapeContext::base_corner_verts, MultiresReshapeContext::base_edges, MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::base_positions, MultiresReshapeContext::cd_vertex_crease, context_init_common(), context_verify_or_free(), context_zero(), MultiresReshapeContext::grid_size, MultiresReshapeContext::level, MultiresReshapeContext::mmd, MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::reshape, MultiresReshapeContext::subdiv, MultiresReshapeContext::top, and MultiresModifierData::totlvl.
Referenced by multires_do_versions_simple_to_catmull_clark(), and multires_reshape_context_create_from_modifier().
| void multires_reshape_context_free | ( | MultiresReshapeContext * | reshape_context | ) |
Definition at line 347 of file multires_reshape_util.cc.
References MultiresReshapeContext::face_start_grid_index, blender::bke::subdiv::free(), MultiresReshapeContext::grid_to_face_index, MEM_SAFE_FREE, multires_reshape_free_original_grids(), MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::ptex_start_grid_index, and MultiresReshapeContext::subdiv.
Referenced by context_verify_or_free(), multires_do_versions_simple_to_catmull_clark(), multires_subdivide_create_tangent_displacement_linear_grids(), multiresModifier_base_apply(), multiresModifier_rebuild_subdiv(), multiresModifier_reshapeFromCCG(), multiresModifier_reshapeFromVertcos(), and multiresModifier_subdivide_to_level().
| blender::bke::subdiv::Subdiv * multires_reshape_create_subdiv | ( | Depsgraph * | depsgraph, |
| Object * | object, | ||
| const MultiresModifierData * | mmd ) |
Create subdivision surface descriptor which is configured for surface evaluation at a given multi-res modifier.
Definition at line 35 of file multires_reshape_util.cc.
References BKE_multires_subdiv_settings_init(), CD_MASK_BAREMESH, DEG_get_evaluated_object(), DEG_get_evaluated_scene(), and depsgraph.
Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_modifier(), and multires_reshape_context_create_from_object().
Make sure custom data is allocated for the given level.
Definition at line 623 of file multires_reshape_util.cc.
References ensure_displacement_grids(), and ensure_mask_grids().
Referenced by multires_subdivide_create_tangent_displacement_linear_grids(), multiresModifier_reshapeFromCCG(), multiresModifier_reshapeFromVertcos(), and multiresModifier_subdivide_to_level().
| void multires_reshape_evaluate_limit_at_grid | ( | const MultiresReshapeContext * | reshape_context, |
| const GridCoord * | grid_coord, | ||
| float | r_P[3], | ||
| float | r_tangent_matrix[3][3] ) |
Evaluate limit surface created from base mesh. This is the limit surface which defines tangent space for MDisps.
Definition at line 541 of file multires_reshape_util.cc.
References blender::bke::subdiv::eval_limit_point_and_derivatives(), GridCoord::grid_index, multires_reshape_grid_coord_to_ptex(), multires_reshape_grid_to_corner(), multires_reshape_grid_to_face_index(), multires_reshape_tangent_matrix_for_corner(), PTexCoord::ptex_face_index, MultiresReshapeContext::subdiv, PTexCoord::u, and PTexCoord::v.
Referenced by assign_final_coords_from_mdisps(), assign_final_elements_from_orig_mdisps(), multires_reshape_apply_base_update_mesh_coords(), and object_grid_element_to_tangent_displacement().
| void multires_reshape_free_original_grids | ( | MultiresReshapeContext * | reshape_context | ) |
Definition at line 319 of file multires_reshape_util.cc.
References GridPaintMask::data, MDisps::disps, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::mdisps, MEM_SAFE_FREE, MultiresReshapeContext::num_grids, and MultiresReshapeContext::orig.
Referenced by multires_reshape_context_free(), and multiresModifier_subdivide_to_level().
| PTexCoord multires_reshape_grid_coord_to_ptex | ( | const MultiresReshapeContext * | reshape_context, |
| const GridCoord * | grid_coord ) |
Convert normalized coordinate within a grid to a normalized coordinate within a PTEX face.
Definition at line 404 of file multires_reshape_util.cc.
References GridCoord::grid_index, blender::bke::subdiv::grid_uv_to_ptex_face_uv(), multires_reshape_grid_to_corner(), multires_reshape_grid_to_face_index(), multires_reshape_grid_to_ptex_index(), multires_reshape_is_quad_face(), PTexCoord::ptex_face_index, blender::bke::subdiv::ptex_face_uv_to_grid_uv(), blender::bke::subdiv::rotate_grid_to_quad(), GridCoord::u, PTexCoord::u, GridCoord::v, and PTexCoord::v.
Referenced by multires_reshape_evaluate_limit_at_grid().
| ReshapeGridElement multires_reshape_grid_element_for_grid_coord | ( | const MultiresReshapeContext * | reshape_context, |
| const GridCoord * | grid_coord ) |
Get grid elements which are to be reshaped at a given or PTEX coordinate. The data is coming from final custom mdata layers.
Definition at line 473 of file multires_reshape_util.cc.
References GridPaintMask::data, ReshapeGridElement::displacement, MDisps::disps, GridCoord::grid_index, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::grid_size, ReshapeGridElement::mask, MultiresReshapeContext::mdisps, MultiresReshapeContext::top, GridCoord::u, and GridCoord::v.
Referenced by assign_final_coords_from_mdisps(), assign_final_elements_from_orig_mdisps(), multires_reshape_assign_final_coords_from_ccg(), multires_reshape_grid_element_for_ptex_coord(), multires_reshape_vertcos_foreach_single_vertex(), and object_grid_element_to_tangent_displacement().
| ReshapeGridElement multires_reshape_grid_element_for_ptex_coord | ( | const MultiresReshapeContext * | reshape_context, |
| const PTexCoord * | ptex_coord ) |
Definition at line 496 of file multires_reshape_util.cc.
References multires_reshape_grid_element_for_grid_coord(), and multires_reshape_ptex_coord_to_grid().
| int multires_reshape_grid_to_corner | ( | const MultiresReshapeContext * | reshape_context, |
| int | grid_index ) |
For the given grid index get corner of a face it was created for.
Definition at line 378 of file multires_reshape_util.cc.
References BLI_assert, MultiresReshapeContext::face_start_grid_index, and multires_reshape_grid_to_face_index().
Referenced by multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_coord_to_ptex(), and multires_reshape_grid_to_ptex_index().
| int multires_reshape_grid_to_face_index | ( | const MultiresReshapeContext * | reshape_context, |
| int | grid_index ) |
For the given grid index get index of face it was created for.
Definition at line 366 of file multires_reshape_util.cc.
References BLI_assert, and MultiresReshapeContext::grid_to_face_index.
Referenced by multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_coord_to_ptex(), multires_reshape_grid_to_corner(), multires_reshape_grid_to_ptex_index(), and multires_reshape_vertcos_foreach_vertex().
| int multires_reshape_grid_to_ptex_index | ( | const MultiresReshapeContext * | reshape_context, |
| int | grid_index ) |
For the given grid index get index of corresponding PTEX face.
Definition at line 395 of file multires_reshape_util.cc.
References MultiresReshapeContext::face_ptex_offset, multires_reshape_grid_to_corner(), multires_reshape_grid_to_face_index(), and multires_reshape_is_quad_face().
Referenced by multires_reshape_grid_coord_to_ptex().
| bool multires_reshape_is_quad_face | ( | const MultiresReshapeContext * | reshape_context, |
| int | face_index ) |
Definition at line 390 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_faces.
Referenced by multires_reshape_grid_coord_to_ptex(), multires_reshape_grid_to_ptex_index(), multires_reshape_ptex_coord_to_grid(), and multires_reshape_tangent_matrix_for_corner().
| void multires_reshape_object_grids_to_tangent_displacement | ( | const MultiresReshapeContext * | reshape_context | ) |
Definition at line 761 of file multires_reshape_util.cc.
References foreach_grid_coordinate(), MultiresReshapeContext::level, object_grid_element_to_tangent_displacement(), and MultiresReshapeContext::top.
Referenced by multires_do_versions_simple_to_catmull_clark(), multires_subdivide_create_tangent_displacement_linear_grids(), multiresModifier_base_apply(), multiresModifier_rebuild_subdiv(), multiresModifier_reshapeFromCCG(), multiresModifier_reshapeFromVertcos(), and multiresModifier_subdivide_to_level().
| ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord | ( | const MultiresReshapeContext * | reshape_context, |
| const GridCoord * | grid_coord ) |
Get original grid element for the given coordinate.
Definition at line 503 of file multires_reshape_util.cc.
References copy_v3_v3(), GridPaintMask::data, ReshapeConstGridElement::displacement, MDisps::disps, GridCoord::grid_index, MultiresReshapeContext::grid_paint_masks, blender::bke::subdiv::grid_size_from_level(), GridPaintMask::level, MDisps::level, ReshapeConstGridElement::mask, MultiresReshapeContext::mdisps, MultiresReshapeContext::orig, GridCoord::u, and GridCoord::v.
Referenced by assign_final_elements_from_orig_mdisps(), and multires_reshape_apply_base_update_mesh_coords().
| GridCoord multires_reshape_ptex_coord_to_grid | ( | const MultiresReshapeContext * | reshape_context, |
| const PTexCoord * | ptex_coord ) |
Convert a normalized coordinate within a PTEX face to a normalized coordinate within a grid.
Definition at line 433 of file multires_reshape_util.cc.
References GridCoord::grid_index, MultiresReshapeContext::grid_to_face_index, multires_reshape_is_quad_face(), PTexCoord::ptex_face_index, blender::bke::subdiv::ptex_face_uv_to_grid_uv(), MultiresReshapeContext::ptex_start_grid_index, blender::bke::subdiv::rotate_quad_to_corner(), GridCoord::u, PTexCoord::u, GridCoord::v, and PTexCoord::v.
Referenced by multires_reshape_grid_element_for_ptex_coord(), and multires_reshape_vertcos_foreach_vertex().
| void multires_reshape_smooth_object_grids | ( | const MultiresReshapeContext * | reshape_context, |
| enum eMultiresSubdivideModeType | mode ) |
Operates on a displacement grids (CD_MDISPS) which contains object space-coordinates stored for the reshape level.
Makes it so surface on top level looks smooth. Details are not preserved
Definition at line 1471 of file multires_reshape_smooth.cc.
References MultiresReshapeContext::level, MultiresReshapeContext::reshape, MultiresReshapeContext::top, and UNUSED_VARS.
Referenced by multiresModifier_subdivide_to_level().
| void multires_reshape_smooth_object_grids_with_details | ( | const MultiresReshapeContext * | reshape_context | ) |
Operates on a displacement grids (CD_MDISPS) which contains object space coordinates stored for the reshape level.
The result is grids which are defining mesh with a smooth surface and details starting from reshape level up to top level added back from original displacement grids.
Definition at line 1435 of file multires_reshape_smooth.cc.
References blender::bke::subdiv::Settings::is_simple, MultiresReshapeContext::level, MULTIRES_SUBDIVIDE_CATMULL_CLARK, MULTIRES_SUBDIVIDE_SIMPLE, MultiresReshapeContext::reshape, blender::bke::subdiv::Subdiv::settings, MultiresReshapeContext::subdiv, MultiresReshapeContext::top, and UNUSED_VARS.
Referenced by multiresModifier_reshapeFromCCG(), multiresModifier_reshapeFromVertcos(), and multiresModifier_subdivide_to_level().
| void multires_reshape_store_original_grids | ( | MultiresReshapeContext * | reshape_context | ) |
Store original grid data, so then it's possible to calculate delta from it and add high-frequency content on top of reshaped grids.
Definition at line 635 of file multires_reshape_util.cc.
References GridPaintMask::data, MDisps::disps, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::mdisps, MEM_dupallocN, MultiresReshapeContext::num_grids, and MultiresReshapeContext::orig.
Referenced by multires_do_versions_simple_to_catmull_clark(), multiresModifier_base_apply(), multiresModifier_rebuild_subdiv(), multiresModifier_reshapeFromCCG(), multiresModifier_reshapeFromVertcos(), and multiresModifier_subdivide_to_level().
| void multires_reshape_tangent_matrix_for_corner | ( | const MultiresReshapeContext * | reshape_context, |
| int | face_index, | ||
| int | corner, | ||
| const float | dPdu[3], | ||
| const float | dPdv[3], | ||
| float | r_tangent_matrix[3][3] ) |
Calculate tangent matrix which converts displacement to a object vector. Is calculated for the given surface derivatives at a given base face corner.
Definition at line 459 of file multires_reshape_util.cc.
References BKE_multires_construct_tangent_matrix(), and multires_reshape_is_quad_face().
Referenced by multires_reshape_evaluate_limit_at_grid().