|
Blender V4.3
|
#include "multires_reshape.hh"#include "MEM_guardedalloc.h"#include "DNA_mesh_types.h"#include "DNA_meshdata_types.h"#include "DNA_modifier_types.h"#include "DNA_object_types.h"#include "BLI_math_matrix.h"#include "BLI_task.h"#include "BKE_attribute.hh"#include "BKE_customdata.hh"#include "BKE_mesh_runtime.hh"#include "BKE_multires.hh"#include "BKE_subdiv.hh"#include "BKE_subdiv_ccg.hh"#include "BKE_subdiv_eval.hh"#include "DEG_depsgraph_query.hh"Go to the source code of this file.
Classes | |
| struct | ForeachGridCoordinateTaskData |
Displacement, space conversion | |
| using | ForeachGridCoordinateCallback |
| 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) |
| 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 *) |
| void | multires_reshape_object_grids_to_tangent_displacement (const MultiresReshapeContext *reshape_context) |
Definition at line 669 of file multires_reshape_util.cc.
Definition at line 565 of file multires_reshape_util.cc.
References MDisps::disps, float, blender::bke::subdiv::grid_size_from_level(), MDisps::level, MEM_calloc_arrayN, MEM_freeN(), and MDisps::totdisp.
Referenced by ensure_displacement_grid().
|
static |
Definition at line 779 of file multires_reshape_util.cc.
References add_v3_v3v3(), 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 802 of file multires_reshape_util.cc.
References add_v3_v3v3(), ReshapeConstGridElement::displacement, ReshapeGridElement::displacement, ReshapeConstGridElement::mask, ReshapeGridElement::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(), and P.
Referenced by multires_reshape_assign_final_elements_from_orig_mdisps().
|
static |
Definition at line 117 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_mesh, BLI_assert, context_init_grid_pointers(), context_init_lookup(), MultiresReshapeContext::face_ptex_offset, blender::bke::subdiv::face_ptex_offset_get(), 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 108 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_mesh, CD_GRID_PAINT_MASK, CD_MDISPS, Mesh::corner_data, Mesh::corners_num, CustomData_get_layer_for_write(), MultiresReshapeContext::grid_paint_masks, and MultiresReshapeContext::mdisps.
Referenced by context_init_common().
|
static |
Definition at line 71 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_faces, MultiresReshapeContext::base_mesh, MultiresReshapeContext::face_start_grid_index, Mesh::faces_num, MultiresReshapeContext::grid_to_face_index, MEM_malloc_arrayN, MultiresReshapeContext::num_grids, and MultiresReshapeContext::ptex_start_grid_index.
Referenced by context_init_common().
|
static |
Definition at line 129 of file multires_reshape_util.cc.
References MultiresReshapeContext::mdisps.
Referenced by context_verify_or_free().
|
static |
Definition at line 138 of file multires_reshape_util.cc.
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 66 of file multires_reshape_util.cc.
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().
Definition at line 580 of file multires_reshape_util.cc.
References allocate_displacement_grid(), MDisps::disps, and MDisps::level.
Referenced by ensure_displacement_grids().
Definition at line 588 of file multires_reshape_util.cc.
References CD_MDISPS, CustomData_get_layer_for_write(), and ensure_displacement_grid().
Referenced by multires_reshape_ensure_grids().
Definition at line 598 of file multires_reshape_util.cc.
References CD_GRID_PAINT_MASK, CustomData_get_layer_for_write(), GridPaintMask::data, blender::bke::subdiv::grid_size_from_level(), GridPaintMask::level, MEM_calloc_arrayN, and MEM_freeN().
Referenced by multires_reshape_ensure_grids().
|
static |
Definition at line 715 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_mesh, BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), callback, data, Mesh::faces_num, float, foreach_grid_face_coordinate_task(), MultiresReshapeContext::grid_size, blender::bke::subdiv::grid_size_from_level(), TaskParallelSettings::min_iter_per_thread, and ForeachGridCoordinateTaskData::reshape_context.
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 683 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_faces, MultiresReshapeContext::face_start_grid_index, float, GridCoord::grid_index, 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 | ) |
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().
| 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_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().
|
static |
Definition at line 737 of file multires_reshape_util.cc.
References copy_v3_v3(), 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().