|
Blender
V2.93
|
#include "multires_reshape.h"#include "MEM_guardedalloc.h"#include "DNA_mesh_types.h"#include "DNA_modifier_types.h"#include "DNA_object_types.h"#include "DNA_scene_types.h"#include "BLI_task.h"#include "BKE_mesh.h"#include "BKE_mesh_runtime.h"#include "BKE_multires.h"#include "BKE_subdiv.h"#include "BKE_subdiv_ccg.h"#include "BKE_subdiv_eval.h"#include "BKE_subdiv_foreach.h"#include "BKE_subdiv_mesh.h"#include "DEG_depsgraph_query.h"Go to the source code of this file.
Classes | |
| struct | ForeachGridCoordinateTaskData |
Displacement, space conversion | |
| typedef void(* | ForeachGridCoordinateCallback) (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *userdata_v) |
| typedef struct ForeachGridCoordinateTaskData | ForeachGridCoordinateTaskData |
| void | multires_reshape_store_original_grids (MultiresReshapeContext *reshape_context) |
| static void | foreach_grid_face_coordinate_task (void *__restrict userdata_v, const int face_index, const TaskParallelTLS *__restrict UNUSED(tls)) |
| static void | foreach_grid_coordinate (const MultiresReshapeContext *reshape_context, const int level, ForeachGridCoordinateCallback callback, void *userdata_v) |
| static void | object_grid_element_to_tangent_displacement (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *UNUSED(userdata_v)) |
| void | multires_reshape_object_grids_to_tangent_displacement (const MultiresReshapeContext *reshape_context) |
| typedef void(* ForeachGridCoordinateCallback) (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *userdata_v) |
Definition at line 636 of file multires_reshape_util.c.
| typedef struct ForeachGridCoordinateTaskData ForeachGridCoordinateTaskData |
|
static |
Definition at line 537 of file multires_reshape_util.c.
References BKE_subdiv_grid_size_from_level(), MDisps::disps, float(), MDisps::level, MEM_calloc_arrayN, MEM_freeN, NULL, and MDisps::totdisp.
Referenced by ensure_displacement_grid().
|
static |
Definition at line 747 of file multires_reshape_util.c.
References add_v3_v3v3(), D(), ReshapeGridElement::displacement, mul_v3_m3v3(), multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), and P().
Referenced by multires_reshape_assign_final_coords_from_mdisps().
|
static |
Definition at line 770 of file multires_reshape_util.c.
References add_v3_v3v3(), D(), ReshapeGridElement::displacement, ReshapeConstGridElement::displacement, ReshapeGridElement::mask, ReshapeConstGridElement::mask, mul_v3_m3v3(), multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), multires_reshape_orig_grid_element_for_grid_coord(), NULL, and P().
Referenced by multires_reshape_assign_final_elements_from_orig_mdisps().
|
static |
Definition at line 126 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_face_ptex_offset_get(), BLI_assert, context_init_grid_pointers(), context_init_lookup(), MultiresReshapeContext::face_ptex_offset, NULL, and MultiresReshapeContext::subdiv.
Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_ccg(), multires_reshape_context_create_from_object(), and multires_reshape_context_create_from_subdiv().
|
static |
Definition at line 119 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, CD_GRID_PAINT_MASK, CD_MDISPS, CustomData_get_layer(), MultiresReshapeContext::grid_paint_masks, Mesh::ldata, and MultiresReshapeContext::mdisps.
Referenced by context_init_commoon().
|
static |
Definition at line 82 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, MultiresReshapeContext::face_start_grid_index, MultiresReshapeContext::grid_to_face_index, MEM_malloc_arrayN, Mesh::mpoly, MultiresReshapeContext::num_grids, MultiresReshapeContext::ptex_start_grid_index, MPoly::totloop, and Mesh::totpoly.
Referenced by context_init_commoon().
|
static |
Definition at line 137 of file multires_reshape_util.c.
References MultiresReshapeContext::mdisps, and NULL.
Referenced by context_verify_or_free().
|
static |
Definition at line 146 of file multires_reshape_util.c.
References context_is_valid(), is_valid, and multires_reshape_context_free().
Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_ccg(), multires_reshape_context_create_from_object(), and multires_reshape_context_create_from_subdiv().
|
static |
Definition at line 77 of file multires_reshape_util.c.
Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_ccg(), multires_reshape_context_create_from_object(), and multires_reshape_context_create_from_subdiv().
|
static |
Definition at line 551 of file multires_reshape_util.c.
References allocate_displacement_grid(), MDisps::disps, MDisps::level, and NULL.
Referenced by ensure_displacement_grids().
|
static |
Definition at line 559 of file multires_reshape_util.c.
References CD_MDISPS, CustomData_get_layer(), ensure_displacement_grid(), Mesh::ldata, mesh, and Mesh::totloop.
Referenced by multires_reshape_ensure_grids().
|
static |
Definition at line 568 of file multires_reshape_util.c.
References BKE_subdiv_grid_size_from_level(), CD_GRID_PAINT_MASK, CustomData_get_layer(), GridPaintMask::data, Mesh::ldata, GridPaintMask::level, MEM_calloc_arrayN, MEM_freeN, mesh, NULL, and Mesh::totloop.
Referenced by multires_reshape_ensure_grids().
|
static |
Definition at line 683 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_grid_size_from_level(), BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), callback, data, float(), foreach_grid_face_coordinate_task(), TaskParallelSettings::min_iter_per_thread, and Mesh::totpoly.
Referenced by multires_reshape_assign_final_coords_from_mdisps(), multires_reshape_assign_final_elements_from_orig_mdisps(), and multires_reshape_object_grids_to_tangent_displacement().
|
static |
Definition at line 650 of file multires_reshape_util.c.
References data, MultiresReshapeContext::face_start_grid_index, float(), GridCoord::grid_index, Mesh::mpoly, MPoly::totloop, GridCoord::u, GridCoord::v, v, x, and y.
Referenced by foreach_grid_coordinate().
| void multires_reshape_assign_final_coords_from_mdisps | ( | const MultiresReshapeContext * | reshape_context | ) |
Definition at line 763 of file multires_reshape_util.c.
References assign_final_coords_from_mdisps(), foreach_grid_coordinate(), MultiresReshapeContext::level, NULL, and MultiresReshapeContext::top.
Referenced by multires_do_versions_simple_to_catmull_clark(), multiresModifier_base_apply(), and multiresModifier_rebuild_subdiv().
| void multires_reshape_assign_final_elements_from_orig_mdisps | ( | const MultiresReshapeContext * | reshape_context | ) |
Definition at line 793 of file multires_reshape_util.c.
References assign_final_elements_from_orig_mdisps(), foreach_grid_coordinate(), MultiresReshapeContext::level, NULL, 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 155 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_grid_size_from_level(), context_init_commoon(), context_verify_or_free(), context_zero(), Object::data, DEG_get_evaluated_scene(), MultiresReshapeContext::depsgraph, depsgraph, MultiresReshapeContext::grid_size, MultiresReshapeContext::level, MultiresReshapeContext::mmd, multires_get_level(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, NULL, 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 221 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_grid_size_from_level(), context_init_commoon(), context_verify_or_free(), context_zero(), MultiresReshapeContext::grid_size, SubdivCCG::level, MultiresReshapeContext::level, MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::reshape, SubdivCCG::subdiv, MultiresReshapeContext::subdiv, and MultiresReshapeContext::top.
Referenced by multiresModifier_reshapeFromCCG().
| bool multires_reshape_context_create_from_modifier | ( | MultiresReshapeContext * | reshape_context, |
| struct Object * | object, | ||
| struct MultiresModifierData * | mmd, | ||
| int | top_level | ||
| ) |
Definition at line 245 of file multires_reshape_util.c.
References multires_reshape_context_create_from_subdiv(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, NULL, 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 188 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_grid_size_from_level(), context_init_commoon(), context_verify_or_free(), context_zero(), Object::data, DEG_get_evaluated_scene(), MultiresReshapeContext::depsgraph, 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, |
| struct Object * | object, | ||
| struct MultiresModifierData * | mmd, | ||
| struct Subdiv * | subdiv, | ||
| int | top_level | ||
| ) |
Definition at line 260 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, BKE_subdiv_grid_size_from_level(), context_init_commoon(), context_verify_or_free(), context_zero(), Object::data, 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 316 of file multires_reshape_util.c.
References BKE_subdiv_free(), MultiresReshapeContext::face_start_grid_index, 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().
| Subdiv* multires_reshape_create_subdiv | ( | Depsgraph * | depsgraph, |
| Object * | object, | ||
| const MultiresModifierData * | mmd | ||
| ) |
Definition at line 52 of file multires_reshape_util.c.
References BKE_multires_subdiv_settings_init(), BKE_subdiv_eval_begin_from_mesh(), BKE_subdiv_free(), BKE_subdiv_new_from_mesh(), CD_MASK_BAREMESH, Object::data, DEG_get_evaluated_object(), DEG_get_evaluated_scene(), depsgraph, mesh_get_eval_deform(), and NULL.
Referenced by multires_reshape_context_create_from_base_mesh(), multires_reshape_context_create_from_modifier(), and multires_reshape_context_create_from_object().
| void multires_reshape_ensure_grids | ( | Mesh * | mesh, |
| const int | level | ||
| ) |
Definition at line 591 of file multires_reshape_util.c.
References ensure_displacement_grids(), ensure_mask_grids(), and mesh.
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] | ||
| ) |
Definition at line 513 of file multires_reshape_util.c.
References 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(), evaluate_final_original_point(), multires_reshape_apply_base_update_mesh_coords(), object_grid_element_to_tangent_displacement(), and reshape_subdiv_refine_orig_P().
| void multires_reshape_free_original_grids | ( | MultiresReshapeContext * | reshape_context | ) |
Definition at line 288 of file multires_reshape_util.c.
References GridPaintMask::data, MDisps::disps, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::mdisps, MEM_SAFE_FREE, NULL, 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 | ||
| ) |
Definition at line 378 of file multires_reshape_util.c.
References BKE_subdiv_grid_uv_to_ptex_face_uv(), BKE_subdiv_ptex_face_uv_to_grid_uv(), BKE_subdiv_rotate_grid_to_quad(), GridCoord::grid_index, 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, 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 | ||
| ) |
Definition at line 445 of file multires_reshape_util.c.
References GridPaintMask::data, ReshapeGridElement::displacement, MDisps::disps, GridCoord::grid_index, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::grid_size, ReshapeGridElement::mask, MultiresReshapeContext::mdisps, NULL, MultiresReshapeContext::top, GridCoord::u, and GridCoord::v.
Referenced by assign_final_coords_from_mdisps(), assign_final_elements_from_orig_mdisps(), evaluate_higher_grid_positions_callback(), evaluate_higher_grid_positions_with_details_callback(), linear_grid_element_final_get(), multires_reshape_assign_final_coords_from_ccg(), multires_reshape_grid_element_for_ptex_coord(), multires_reshape_vertcos_foreach_single_vertex(), object_grid_element_to_tangent_displacement(), and reshape_subdiv_refine_final_P().
| ReshapeGridElement multires_reshape_grid_element_for_ptex_coord | ( | const MultiresReshapeContext * | reshape_context, |
| const PTexCoord * | ptex_coord | ||
| ) |
Definition at line 468 of file multires_reshape_util.c.
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 | ||
| ) |
Definition at line 349 of file multires_reshape_util.c.
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(), multires_reshape_grid_to_ptex_index(), and reshape_subdiv_evaluate_limit_at_grid().
| int multires_reshape_grid_to_face_index | ( | const MultiresReshapeContext * | reshape_context, |
| int | grid_index | ||
| ) |
Definition at line 336 of file multires_reshape_util.c.
References BLI_assert, and MultiresReshapeContext::grid_to_face_index.
Referenced by foreach_vertex(), multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_coord_to_ptex(), multires_reshape_grid_to_corner(), multires_reshape_grid_to_ptex_index(), multires_reshape_vertcos_foreach_vertex(), and reshape_subdiv_evaluate_limit_at_grid().
| int multires_reshape_grid_to_ptex_index | ( | const MultiresReshapeContext * | reshape_context, |
| int | grid_index | ||
| ) |
Definition at line 368 of file multires_reshape_util.c.
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 361 of file multires_reshape_util.c.
References MultiresReshapeContext::base_mesh, Mesh::mpoly, and MPoly::totloop.
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 729 of file multires_reshape_util.c.
References foreach_grid_coordinate(), MultiresReshapeContext::level, NULL, 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 | ||
| ) |
Definition at line 475 of file multires_reshape_util.c.
References BKE_subdiv_grid_size_from_level(), copy_v3_v3(), GridPaintMask::data, ReshapeConstGridElement::displacement, MDisps::disps, GridCoord::grid_index, MultiresReshapeContext::grid_paint_masks, MDisps::level, GridPaintMask::level, ReshapeConstGridElement::mask, MultiresReshapeContext::mdisps, NULL, MultiresReshapeContext::orig, GridCoord::u, and GridCoord::v.
Referenced by assign_final_elements_from_orig_mdisps(), evaluate_final_original_point(), linear_grid_element_orig_get(), multires_reshape_apply_base_update_mesh_coords(), propagate_linear_data_delta(), and reshape_subdiv_refine_orig_P().
| GridCoord multires_reshape_ptex_coord_to_grid | ( | const MultiresReshapeContext * | reshape_context, |
| const PTexCoord * | ptex_coord | ||
| ) |
Definition at line 406 of file multires_reshape_util.c.
References BKE_subdiv_ptex_face_uv_to_grid_uv(), BKE_subdiv_rotate_quad_to_corner(), GridCoord::grid_index, MultiresReshapeContext::grid_to_face_index, multires_reshape_is_quad_face(), PTexCoord::ptex_face_index, MultiresReshapeContext::ptex_start_grid_index, GridCoord::u, PTexCoord::u, GridCoord::v, and PTexCoord::v.
Referenced by foreach_vertex(), multires_reshape_grid_element_for_ptex_coord(), and multires_reshape_vertcos_foreach_vertex().
| void multires_reshape_store_original_grids | ( | MultiresReshapeContext * | reshape_context | ) |
Definition at line 603 of file multires_reshape_util.c.
References GridPaintMask::data, MDisps::disps, MultiresReshapeContext::grid_paint_masks, MultiresReshapeContext::mdisps, MEM_dupallocN, NULL, 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, |
| const int | face_index, | ||
| const int | corner, | ||
| const float | dPdu[3], | ||
| const float | dPdv[3], | ||
| float | r_tangent_matrix[3][3] | ||
| ) |
Definition at line 431 of file multires_reshape_util.c.
References BKE_multires_construct_tangent_matrix(), and multires_reshape_is_quad_face().
Referenced by multires_reshape_evaluate_limit_at_grid(), and reshape_subdiv_evaluate_limit_at_grid().
|
static |
Definition at line 705 of file multires_reshape_util.c.
References copy_v3_v3(), D(), ReshapeGridElement::displacement, invert_m3_m3(), mul_v3_m3v3(), multires_reshape_evaluate_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), P(), and sub_v3_v3v3().
Referenced by multires_reshape_object_grids_to_tangent_displacement().