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 DerivedMeshmultires_make_derived_from_derived (struct DerivedMesh *dm, struct MultiresModifierData *mmd, struct Scene *scene, struct Object *ob, MultiresFlags flags)
 
struct MultiresModifierDatafind_multires_modifier_before (struct Scene *scene, struct ModifierData *lastmd)
 
struct MultiresModifierDataget_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 MeshBKE_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 
)