|
Blender V5.0
|
#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_math_matrix.hh"#include "BLI_math_vector.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 662 of file multires_reshape_util.cc.
|
static |
Definition at line 560 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 770 of file multires_reshape_util.cc.
References D, ReshapeGridElement::displacement, multires_reshape_evaluate_base_mesh_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), P, and blender::math::transform_direction().
Referenced by multires_reshape_assign_final_coords_from_mdisps().
|
static |
Definition at line 794 of file multires_reshape_util.cc.
References D, ReshapeConstGridElement::displacement, ReshapeGridElement::displacement, ReshapeConstGridElement::mask, ReshapeGridElement::mask, multires_reshape_evaluate_base_mesh_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), multires_reshape_orig_grid_element_for_grid_coord(), P, and blender::math::transform_direction().
Referenced by multires_reshape_assign_final_elements_from_orig_mdisps().
|
static |
Definition at line 113 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 104 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::face_start_grid_index, faces, MultiresReshapeContext::grid_to_face_index, i, MultiresReshapeContext::num_grids, MultiresReshapeContext::ptex_start_grid_index, and Array< T, InlineBufferCapacity, Allocator >::reinitialize().
Referenced by context_init_common().
|
static |
Definition at line 125 of file multires_reshape_util.cc.
References MultiresReshapeContext::mdisps.
Referenced by context_verify_or_free().
|
static |
Definition at line 134 of file multires_reshape_util.cc.
References context_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().
|
static |
Definition at line 574 of file multires_reshape_util.cc.
References allocate_displacement_grid(), MDisps::disps, and MDisps::level.
Referenced by ensure_displacement_grids().
|
static |
Definition at line 582 of file multires_reshape_util.cc.
References CD_MDISPS, CustomData_get_layer_for_write(), and ensure_displacement_grid().
Referenced by multires_reshape_ensure_grids().
|
static |
Definition at line 592 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 708 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_mesh, BLI_parallel_range_settings_defaults(), BLI_task_parallel_range(), data, Mesh::faces_num, float, foreach_grid_face_coordinate_task(), blender::bke::subdiv::grid_size_from_level(), and TaskParallelSettings::min_iter_per_thread.
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 676 of file multires_reshape_util.cc.
References MultiresReshapeContext::base_faces, data, MultiresReshapeContext::face_start_grid_index, faces, 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 787 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 818 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 143 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 232 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 262 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 185 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, blender::bke::Edge, MultiresReshapeContext::grid_size, blender::bke::subdiv::grid_size_from_level(), MultiresReshapeContext::level, blender::bke::AttributeAccessor::lookup(), MultiresReshapeContext::mmd, multires_get_level(), multires_reshape_create_subdiv(), MultiresReshapeContext::need_free_subdiv, MultiresReshapeContext::object, blender::bke::Point, 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 277 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, blender::bke::subdiv::grid_size_from_level(), MultiresReshapeContext::level, blender::bke::AttributeAccessor::lookup(), MultiresReshapeContext::mmd, MultiresReshapeContext::need_free_subdiv, blender::bke::Point, 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 343 of file multires_reshape_util.cc.
References blender::bke::subdiv::free(), multires_reshape_free_original_grids(), MultiresReshapeContext::need_free_subdiv, 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 37 of file multires_reshape_util.cc.
References BKE_multires_subdiv_settings_init(), CD_MASK_BAREMESH, DEG_get_evaluated(), DEG_get_evaluated_scene(), depsgraph, blender::bke::subdiv::eval_begin_from_mesh(), blender::bke::subdiv::free(), blender::bke::mesh_get_eval_deform(), blender::bke::subdiv::new_from_mesh(), and blender::bke::subdiv::SUBDIV_EVALUATOR_TYPE_CPU.
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, |
| int | level ) |
Make sure custom data is allocated for the given level.
Definition at line 616 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_base_mesh_limit_at_grid | ( | const MultiresReshapeContext * | reshape_context, |
| const GridCoord * | grid_coord, | ||
| blender::float3 & | r_P, | ||
| blender::float3x3 & | r_tangent_matrix ) |
Evaluate limit surface created from base mesh. This is the limit surface which defines tangent space for MDisps.
Definition at line 534 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 315 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 396 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_base_mesh_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 465 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 489 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 370 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_base_mesh_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 358 of file multires_reshape_util.cc.
References BLI_assert, and MultiresReshapeContext::grid_to_face_index.
Referenced by multires_reshape_evaluate_base_mesh_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 387 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 382 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 752 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 496 of file multires_reshape_util.cc.
References 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 425 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 628 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 blender::float3 & | dPdu, | ||
| const blender::float3 & | dPdv, | ||
| blender::float3x3 & | r_tangent_matrix ) |
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 451 of file multires_reshape_util.cc.
References BKE_multires_construct_tangent_matrix(), and multires_reshape_is_quad_face().
Referenced by multires_reshape_evaluate_base_mesh_limit_at_grid().
|
static |
Definition at line 730 of file multires_reshape_util.cc.
References D, ReshapeGridElement::displacement, blender::math::invert(), multires_reshape_evaluate_base_mesh_limit_at_grid(), multires_reshape_grid_element_for_grid_coord(), P, and blender::math::transform_direction().
Referenced by multires_reshape_object_grids_to_tangent_displacement().