Blender V5.0
multires_reshape_util.cc File Reference
#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

Functions

Construct/destruct reshape context
blender::bke::subdiv::Subdivmultires_reshape_create_subdiv (Depsgraph *depsgraph, Object *object, const MultiresModifierData *mmd)
static void context_zero (MultiresReshapeContext *reshape_context)
static void context_init_lookup (MultiresReshapeContext *reshape_context)
static void context_init_grid_pointers (MultiresReshapeContext *reshape_context)
static void context_init_common (MultiresReshapeContext *reshape_context)
static bool context_is_valid (MultiresReshapeContext *reshape_context)
static bool context_verify_or_free (MultiresReshapeContext *reshape_context)
bool multires_reshape_context_create_from_base_mesh (MultiresReshapeContext *reshape_context, Depsgraph *depsgraph, Object *object, MultiresModifierData *mmd)
bool multires_reshape_context_create_from_object (MultiresReshapeContext *reshape_context, Depsgraph *depsgraph, Object *object, MultiresModifierData *mmd)
bool multires_reshape_context_create_from_ccg (MultiresReshapeContext *reshape_context, SubdivCCG *subdiv_ccg, Mesh *base_mesh, int top_level)
bool multires_reshape_context_create_from_modifier (MultiresReshapeContext *reshape_context, Object *object, MultiresModifierData *mmd, int top_level)
bool multires_reshape_context_create_from_subdiv (MultiresReshapeContext *reshape_context, Object *object, MultiresModifierData *mmd, blender::bke::subdiv::Subdiv *subdiv, int top_level)
void multires_reshape_free_original_grids (MultiresReshapeContext *reshape_context)
void multires_reshape_context_free (MultiresReshapeContext *reshape_context)
Helper accessors
int multires_reshape_grid_to_face_index (const MultiresReshapeContext *reshape_context, int grid_index)
int multires_reshape_grid_to_corner (const MultiresReshapeContext *reshape_context, int grid_index)
bool multires_reshape_is_quad_face (const MultiresReshapeContext *reshape_context, int face_index)
int multires_reshape_grid_to_ptex_index (const MultiresReshapeContext *reshape_context, int grid_index)
PTexCoord multires_reshape_grid_coord_to_ptex (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
GridCoord multires_reshape_ptex_coord_to_grid (const MultiresReshapeContext *reshape_context, const PTexCoord *ptex_coord)
void multires_reshape_tangent_matrix_for_corner (const MultiresReshapeContext *reshape_context, const int face_index, const int corner, const blender::float3 &dPdu, const blender::float3 &dPdv, blender::float3x3 &r_tangent_matrix)
ReshapeGridElement multires_reshape_grid_element_for_grid_coord (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
ReshapeGridElement multires_reshape_grid_element_for_ptex_coord (const MultiresReshapeContext *reshape_context, const PTexCoord *ptex_coord)
ReshapeConstGridElement multires_reshape_orig_grid_element_for_grid_coord (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord)
Sample limit surface of the base mesh
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)
Custom data preparation
static void allocate_displacement_grid (MDisps *displacement_grid, const int level)
static void ensure_displacement_grid (MDisps *displacement_grid, const int level)
static void ensure_displacement_grids (Mesh *mesh, const int grid_level)
static void ensure_mask_grids (Mesh *mesh, const int level)
void multires_reshape_ensure_grids (Mesh *mesh, const int level)
MDISPS
static void assign_final_coords_from_mdisps (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *)
void multires_reshape_assign_final_coords_from_mdisps (const MultiresReshapeContext *reshape_context)
static void assign_final_elements_from_orig_mdisps (const MultiresReshapeContext *reshape_context, const GridCoord *grid_coord, void *)
void multires_reshape_assign_final_elements_from_orig_mdisps (const MultiresReshapeContext *reshape_context)

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)

Typedef Documentation

◆ ForeachGridCoordinateCallback

Initial value:
void (*)(const MultiresReshapeContext *reshape_context,
const GridCoord *grid_coord,
void *userdata_v)

Definition at line 662 of file multires_reshape_util.cc.

Function Documentation

◆ allocate_displacement_grid()

void allocate_displacement_grid ( MDisps * displacement_grid,
const int level )
static

◆ assign_final_coords_from_mdisps()

◆ assign_final_elements_from_orig_mdisps()

◆ context_init_common()

◆ context_init_grid_pointers()

◆ context_init_lookup()

◆ context_is_valid()

bool context_is_valid ( MultiresReshapeContext * reshape_context)
static

Definition at line 125 of file multires_reshape_util.cc.

References MultiresReshapeContext::mdisps.

Referenced by context_verify_or_free().

◆ context_verify_or_free()

◆ context_zero()

◆ ensure_displacement_grid()

void ensure_displacement_grid ( MDisps * displacement_grid,
const int level )
static

◆ ensure_displacement_grids()

void ensure_displacement_grids ( Mesh * mesh,
const int grid_level )
static

◆ ensure_mask_grids()

◆ foreach_grid_coordinate()

◆ foreach_grid_face_coordinate_task()

void foreach_grid_face_coordinate_task ( void *__restrict userdata_v,
const int face_index,
const TaskParallelTLS * __restrict )
static

◆ multires_reshape_assign_final_coords_from_mdisps()

void multires_reshape_assign_final_coords_from_mdisps ( const MultiresReshapeContext * reshape_context)

◆ multires_reshape_assign_final_elements_from_orig_mdisps()

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().

◆ multires_reshape_context_create_from_base_mesh()

◆ multires_reshape_context_create_from_ccg()

◆ multires_reshape_context_create_from_modifier()

◆ multires_reshape_context_create_from_object()

bool multires_reshape_context_create_from_object ( MultiresReshapeContext * reshape_context,
Depsgraph * depsgraph,
Object * object,
MultiresModifierData * mmd )

◆ multires_reshape_context_create_from_subdiv()

◆ multires_reshape_context_free()

◆ multires_reshape_create_subdiv()

◆ multires_reshape_ensure_grids()

void multires_reshape_ensure_grids ( Mesh * mesh,
int level )

◆ multires_reshape_evaluate_base_mesh_limit_at_grid()

◆ multires_reshape_free_original_grids()

◆ multires_reshape_grid_coord_to_ptex()

◆ multires_reshape_grid_element_for_grid_coord()

◆ multires_reshape_grid_element_for_ptex_coord()

ReshapeGridElement multires_reshape_grid_element_for_ptex_coord ( const MultiresReshapeContext * reshape_context,
const PTexCoord * ptex_coord )

◆ multires_reshape_grid_to_corner()

int multires_reshape_grid_to_corner ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_grid_to_face_index()

int multires_reshape_grid_to_face_index ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_grid_to_ptex_index()

int multires_reshape_grid_to_ptex_index ( const MultiresReshapeContext * reshape_context,
int grid_index )

◆ multires_reshape_is_quad_face()

◆ multires_reshape_object_grids_to_tangent_displacement()

◆ multires_reshape_orig_grid_element_for_grid_coord()

◆ multires_reshape_ptex_coord_to_grid()

◆ multires_reshape_store_original_grids()

◆ multires_reshape_tangent_matrix_for_corner()

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().

◆ object_grid_element_to_tangent_displacement()