Blender  V3.3
Typedefs | Enumerations | Functions
BKE_multires.h File Reference
#include "BKE_subsurf.h"
#include "BLI_compiler_compat.h"
#include "intern/multires_inline.h"

Go to the source code of this file.

Typedefs

typedef enum eMultiresSubdivideModeType eMultiresSubdivideModeType
 

Enumerations

enum  MultiresFlags { MULTIRES_USE_LOCAL_MMD = 1 , MULTIRES_USE_RENDER_PARAMS = 2 , MULTIRES_ALLOC_PAINT_MASK = 4 , MULTIRES_IGNORE_SIMPLIFY = 8 }
 
enum  eMultiresSubdivideModeType { MULTIRES_SUBDIVIDE_CATMULL_CLARK , MULTIRES_SUBDIVIDE_SIMPLE , MULTIRES_SUBDIVIDE_LINEAR }
 

Functions

void multires_customdata_delete (struct Mesh *me)
 
void multires_set_tot_level (struct Object *ob, struct MultiresModifierData *mmd, int lvl)
 
void multires_mark_as_modified (struct Depsgraph *depsgraph, struct Object *object, enum MultiresModifiedFlags flags)
 
void multires_flush_sculpt_updates (struct Object *object)
 
void multires_force_sculpt_rebuild (struct Object *object)
 
void multires_force_external_reload (struct Object *object)
 
void multires_modifier_update_mdisps (struct DerivedMesh *dm, struct Scene *scene)
 
void multires_modifier_update_hidden (struct DerivedMesh *dm)
 
void multiresModifier_set_levels_from_disps (struct MultiresModifierData *mmd, struct Object *ob)
 
struct DerivedMesh * multires_make_derived_from_derived (struct DerivedMesh *dm, struct MultiresModifierData *mmd, struct Scene *scene, struct Object *ob, MultiresFlags flags)
 
struct MultiresModifierData * find_multires_modifier_before (struct Scene *scene, struct ModifierData *lastmd)
 
struct MultiresModifierData * get_multires_modifier (struct Scene *scene, struct Object *ob, bool use_first)
 
int multires_get_level (const struct Scene *scene, const struct Object *ob, const struct MultiresModifierData *mmd, bool render, bool ignore_simplify)
 
struct Mesh * BKE_multires_create_mesh (struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd)
 
float(* BKE_multires_create_deformed_base_mesh_vert_coords (struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, int *r_num_deformed_verts))[3]
 
void multiresModifier_del_levels (struct MultiresModifierData *mmd, struct Scene *scene, struct Object *object, int direction)
 
void multiresModifier_base_apply (struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd)
 
int multiresModifier_rebuild_subdiv (struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, int rebuild_limit, bool switch_view_to_lower_level)
 
void multiresModifier_sync_levels_ex (struct Object *ob_dst, struct MultiresModifierData *mmd_src, struct MultiresModifierData *mmd_dst)
 
void multires_stitch_grids (struct Object *)
 
void multiresModifier_scale_disp (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
 
void multiresModifier_prepare_join (struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, struct Object *to_ob)
 
int multires_mdisp_corners (const struct MDisps *s)
 
void multires_topology_changed (struct Mesh *me)
 
void multires_ensure_external_read (struct Mesh *mesh, int top_level)
 
void multiresModifier_ensure_external_read (struct Mesh *mesh, const struct MultiresModifierData *mmd)
 
void old_mdisps_bilinear (float out[3], float(*disps)[3], int st, float u, float v)
 
int mdisp_rot_face_to_crn (struct MVert *mvert, struct MPoly *mpoly, struct MLoop *mloop, const struct MLoopTri *lt, int face_side, float u, float v, float *x, float *y)
 
bool multiresModifier_reshapeFromVertcos (struct Depsgraph *depsgraph, struct Object *object, struct MultiresModifierData *mmd, const float(*vert_coords)[3], int num_vert_coords)
 
bool multiresModifier_reshapeFromObject (struct Depsgraph *depsgraph, struct MultiresModifierData *mmd, struct Object *dst, struct Object *src)
 
bool multiresModifier_reshapeFromDeformModifier (struct Depsgraph *depsgraph, struct Object *ob, struct MultiresModifierData *mmd, struct ModifierData *deform_md)
 
bool multiresModifier_reshapeFromCCG (int tot_level, struct Mesh *coarse_mesh, struct SubdivCCG *subdiv_ccg)
 
void multiresModifier_subdivide (struct Object *object, struct MultiresModifierData *mmd, eMultiresSubdivideModeType mode)
 
void multires_subdivide_create_tangent_displacement_linear_grids (struct Object *object, struct MultiresModifierData *mmd)
 
void multiresModifier_subdivide_to_level (struct Object *object, struct MultiresModifierData *mmd, int top_level, eMultiresSubdivideModeType mode)
 
void BKE_multires_subdiv_settings_init (struct SubdivSettings *settings, const struct MultiresModifierData *mmd)
 
void BKE_multires_subdiv_mesh_settings_init (struct SubdivToMeshSettings *mesh_settings, const struct Scene *scene, const struct Object *object, const struct MultiresModifierData *mmd, bool use_render_params, bool ignore_simplify, bool ignore_control_edges)
 
BLI_INLINE void BKE_multires_construct_tangent_matrix (float tangent_matrix[3][3], const float dPdu[3], const float dPdv[3], int corner)
 
void multires_do_versions_simple_to_catmull_clark (struct Object *object, struct MultiresModifierData *mmd)
 

Typedef Documentation

◆ eMultiresSubdivideModeType

Enumeration Type Documentation

◆ eMultiresSubdivideModeType

Enumerator
MULTIRES_SUBDIVIDE_CATMULL_CLARK 
MULTIRES_SUBDIVIDE_SIMPLE 
MULTIRES_SUBDIVIDE_LINEAR 

Definition at line 195 of file BKE_multires.h.

◆ MultiresFlags

Enumerator
MULTIRES_USE_LOCAL_MMD 
MULTIRES_USE_RENDER_PARAMS 
MULTIRES_ALLOC_PAINT_MASK 
MULTIRES_IGNORE_SIMPLIFY 

Definition at line 56 of file BKE_multires.h.

Function Documentation

◆ BKE_multires_construct_tangent_matrix()

BLI_INLINE void BKE_multires_construct_tangent_matrix ( float  tangent_matrix[3][3],
const float  dPdu[3],
const float  dPdv[3],
int  corner 
)

For a given partial derivatives of a PTEX face get tangent matrix for displacement.

Corner needs to be known to properly "rotate" partial derivatives when the matrix is being constructed for quad. For non-quad the corner is to be set to 0.

Definition at line 14 of file multires_inline.h.

References BLI_assert_msg, copy_v3_v3(), cross_v3_v3v3(), mul_v3_fl(), and normalize_v3().

Referenced by average_construct_tangent_matrix(), eval_displacement(), and multires_reshape_tangent_matrix_for_corner().

◆ BKE_multires_create_deformed_base_mesh_vert_coords()

float(* BKE_multires_create_deformed_base_mesh_vert_coords ( struct Depsgraph *  depsgraph,
struct Object *  object,
struct MultiresModifierData *  mmd,
int *  r_num_deformed_verts 
) )[3]

◆ BKE_multires_create_mesh()

struct Mesh* BKE_multires_create_mesh ( struct Depsgraph *  depsgraph,
struct Object *  object,
struct MultiresModifierData *  mmd 
)

◆ BKE_multires_subdiv_mesh_settings_init()

void BKE_multires_subdiv_mesh_settings_init ( struct SubdivToMeshSettings *  mesh_settings,
const struct Scene *  scene,
const struct Object *  object,
const struct MultiresModifierData *  mmd,
bool  use_render_params,
bool  ignore_simplify,
bool  ignore_control_edges 
)

Referenced by multires_as_mesh().

◆ BKE_multires_subdiv_settings_init()

void BKE_multires_subdiv_settings_init ( struct SubdivSettings *  settings,
const struct MultiresModifierData *  mmd 
)

◆ find_multires_modifier_before()

struct MultiresModifierData* find_multires_modifier_before ( struct Scene *  scene,
struct ModifierData *  lastmd 
)

◆ get_multires_modifier()

struct MultiresModifierData* get_multires_modifier ( struct Scene *  scene,
struct Object *  ob,
bool  use_first 
)

used for applying scale on mdisps layer and syncing subdivide levels when joining objects.

Parameters
use_firstreturn first multi-res modifier if all multi-res'es are disabled.

Definition at line 317 of file multires.c.

References BKE_modifier_is_enabled(), eModifierMode_Realtime, eModifierType_Multires, ListBase::first, Object::modifiers, ModifierData::next, NULL, scene, and ModifierData::type.

Referenced by BKE_sculpt_get_first_deform_matrices(), join_mesh_single(), multires_apply_smat(), multires_sync_levels(), multiresbake_check(), multiresbake_create_hiresdm(), and multiresbake_create_loresdm().

◆ mdisp_rot_face_to_crn()

int mdisp_rot_face_to_crn ( struct MVert *  mvert,
struct MPoly *  mpoly,
struct MLoop *  mloop,
const struct MLoopTri *  lt,
int  face_side,
float  u,
float  v,
float *  x,
float *  y 
)

Find per-corner coordinate with given per-face UV coord.

Referenced by get_ccgdm_data().

◆ multires_customdata_delete()

void multires_customdata_delete ( Mesh *  me)

◆ multires_do_versions_simple_to_catmull_clark()

void multires_do_versions_simple_to_catmull_clark ( struct Object *  object,
struct MultiresModifierData *  mmd 
)

◆ multires_ensure_external_read()

void multires_ensure_external_read ( struct Mesh *  mesh,
int  top_level 
)

Makes sure data from an external file is fully read.

Since the multi-res data files only contain displacement vectors without knowledge about subdivision level some extra work is needed. Namely make is to all displacement grids have proper level and number of displacement vectors set.

Definition at line 1482 of file multires.c.

References CD_DEFAULT, CD_MASK_MDISPS, CD_MDISPS, CustomData_add_layer(), CustomData_external_read(), CustomData_external_test(), CustomData_get_layer(), Mesh::id, Mesh::ldata, MDisps::level, MEM_SAFE_FREE, mesh, multires_grid_tot, NULL, MDisps::totdisp, and Mesh::totloop.

Referenced by multiresModifier_ensure_external_read(), and multiresModifier_reshapeFromCCG().

◆ multires_flush_sculpt_updates()

void multires_flush_sculpt_updates ( struct Object *  object)

◆ multires_force_external_reload()

void multires_force_external_reload ( struct Object *  object)

◆ multires_force_sculpt_rebuild()

void multires_force_sculpt_rebuild ( struct Object *  object)

◆ multires_get_level()

int multires_get_level ( const struct Scene *  scene,
const struct Object *  ob,
const struct MultiresModifierData *  mmd,
bool  render,
bool  ignore_simplify 
)

◆ multires_make_derived_from_derived()

struct DerivedMesh* multires_make_derived_from_derived ( struct DerivedMesh *  dm,
struct MultiresModifierData *  mmd,
struct Scene *  scene,
struct Object *  ob,
MultiresFlags  flags 
)

◆ multires_mark_as_modified()

void multires_mark_as_modified ( struct Depsgraph *  depsgraph,
struct Object *  object,
enum MultiresModifiedFlags  flags 
)

◆ multires_mdisp_corners()

int multires_mdisp_corners ( const struct MDisps *  s)

◆ multires_modifier_update_hidden()

void multires_modifier_update_hidden ( struct DerivedMesh *  dm)

◆ multires_modifier_update_mdisps()

void multires_modifier_update_mdisps ( struct DerivedMesh *  dm,
struct Scene *  scene 
)

◆ multires_set_tot_level()

void multires_set_tot_level ( struct Object *  ob,
struct MultiresModifierData *  mmd,
int  lvl 
)

◆ multires_stitch_grids()

void multires_stitch_grids ( struct Object *  ob)

◆ multires_subdivide_create_tangent_displacement_linear_grids()

void multires_subdivide_create_tangent_displacement_linear_grids ( struct Object *  object,
struct MultiresModifierData *  mmd 
)

◆ multires_topology_changed()

void multires_topology_changed ( struct Mesh *  me)

Update multi-res data after topology changing.

Definition at line 1448 of file multires.c.

References CD_MASK_MDISPS, CD_MDISPS, CustomData_external_read(), CustomData_get_layer(), MDisps::disps, Mesh::id, Mesh::ldata, MEM_calloc_arrayN, NULL, MDisps::totdisp, and Mesh::totloop.

Referenced by BM_mesh_bm_to_me().

◆ multiresModifier_base_apply()

void multiresModifier_base_apply ( struct Depsgraph *  depsgraph,
struct Object *  object,
struct MultiresModifierData *  mmd 
)

◆ multiresModifier_del_levels()

void multiresModifier_del_levels ( struct MultiresModifierData *  mmd,
struct Scene *  scene,
struct Object *  object,
int  direction 
)

◆ multiresModifier_ensure_external_read()

void multiresModifier_ensure_external_read ( struct Mesh *  mesh,
const struct MultiresModifierData *  mmd 
)

Referenced by initialize().

◆ multiresModifier_prepare_join()

void multiresModifier_prepare_join ( struct Depsgraph *  depsgraph,
struct Scene *  scene,
struct Object *  ob,
struct Object *  to_ob 
)

◆ multiresModifier_rebuild_subdiv()

int multiresModifier_rebuild_subdiv ( struct Depsgraph *  depsgraph,
struct Object *  object,
struct MultiresModifierData *  mmd,
int  rebuild_limit,
bool  switch_view_to_lower_level 
)

◆ multiresModifier_reshapeFromCCG()

bool multiresModifier_reshapeFromCCG ( int  tot_level,
struct Mesh *  coarse_mesh,
struct SubdivCCG *  subdiv_ccg 
)

◆ multiresModifier_reshapeFromDeformModifier()

bool multiresModifier_reshapeFromDeformModifier ( struct Depsgraph *  depsgraph,
struct Object *  ob,
struct MultiresModifierData *  mmd,
struct ModifierData *  deform_md 
)

◆ multiresModifier_reshapeFromObject()

bool multiresModifier_reshapeFromObject ( struct Depsgraph *  depsgraph,
struct MultiresModifierData *  mmd,
struct Object *  dst,
struct Object *  src 
)

Returns truth on success, false otherwise.

This function might fail in cases like source and destination not having matched amount of vertices.

Definition at line 56 of file multires_reshape.c.

References BKE_mesh_vert_coords_alloc(), CD_MASK_BAREMESH, DEG_get_evaluated_object(), DEG_get_evaluated_scene(), depsgraph, float(), MEM_freeN, mesh_get_eval_final(), multiresModifier_reshapeFromVertcos(), result, and src.

Referenced by multires_reshape_exec().

◆ multiresModifier_reshapeFromVertcos()

bool multiresModifier_reshapeFromVertcos ( struct Depsgraph *  depsgraph,
struct Object *  object,
struct MultiresModifierData *  mmd,
const float(*)  vert_coords[3],
int  num_vert_coords 
)

◆ multiresModifier_scale_disp()

void multiresModifier_scale_disp ( struct Depsgraph *  depsgraph,
struct Scene *  scene,
struct Object *  ob 
)

Definition at line 1421 of file multires.c.

References BKE_object_scale_to_mat3(), depsgraph, multires_apply_smat(), and scene.

Referenced by apply_objects_internal().

◆ multiresModifier_set_levels_from_disps()

void multiresModifier_set_levels_from_disps ( struct MultiresModifierData *  mmd,
struct Object *  ob 
)

◆ multiresModifier_subdivide()

void multiresModifier_subdivide ( struct Object *  object,
struct MultiresModifierData *  mmd,
eMultiresSubdivideModeType  mode 
)

◆ multiresModifier_subdivide_to_level()

void multiresModifier_subdivide_to_level ( struct Object *  object,
struct MultiresModifierData *  mmd,
int  top_level,
eMultiresSubdivideModeType  mode 
)

◆ multiresModifier_sync_levels_ex()

void multiresModifier_sync_levels_ex ( struct Object *  ob_dst,
struct MultiresModifierData *  mmd_src,
struct MultiresModifierData *  mmd_dst 
)

If ob_src and ob_dst both have multi-res modifiers, synchronize them such that ob_dst has the same total number of levels as ob_src.

Definition at line 1330 of file multires.c.

References multires_del_higher(), MULTIRES_SUBDIVIDE_CATMULL_CLARK, multiresModifier_subdivide_to_level(), and MultiresModifierData::totlvl.

Referenced by BKE_object_copy_modifier(), and multires_sync_levels().

◆ old_mdisps_bilinear()

void old_mdisps_bilinear ( float  out[3],
float(*)  disps[3],
int  st,
float  u,
float  v 
)