Blender  V2.93
Classes | Macros | Typedefs | Enumerations | Functions | Variables
multires.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "BLI_bitmap.h"
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_task.h"
#include "BLI_utildefines.h"
#include "BKE_ccg.h"
#include "BKE_cdderivedmesh.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
#include "BKE_mesh_mapping.h"
#include "BKE_mesh_runtime.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_pbvh.h"
#include "BKE_scene.h"
#include "BKE_subdiv_ccg.h"
#include "BKE_subsurf.h"
#include "BKE_object.h"
#include "CCGSubSurf.h"
#include "DEG_depsgraph_query.h"
#include "multires_reshape.h"
#include <math.h>
#include <string.h>

Go to the source code of this file.

Classes

struct  MultiresThreadedData
 

Macros

#define DNA_DEPRECATED_ALLOW
 

Typedefs

typedef struct MultiresThreadedData MultiresThreadedData
 

Enumerations

enum  DispOp { APPLY_DISPLACEMENTS , CALC_DISPLACEMENTS , ADD_DISPLACEMENTS }
 

Functions

static void multiresModifier_disp_run (DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, DispOp op, CCGElem **oldGridData, int totlvl)
 
void multires_customdata_delete (Mesh *me)
 
static BLI_bitmapmultires_mdisps_upsample_hidden (BLI_bitmap *lo_hidden, int lo_level, int hi_level, const BLI_bitmap *prev_hidden)
 
static BLI_bitmapmultires_mdisps_downsample_hidden (const BLI_bitmap *old_hidden, int old_level, int new_level)
 
static void multires_output_hidden_to_ccgdm (CCGDerivedMesh *ccgdm, Mesh *me, int level)
 
static void multires_mdisps_subdivide_hidden (MDisps *md, int new_level)
 
MeshBKE_multires_create_mesh (struct Depsgraph *depsgraph, Object *object, 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]
 
MultiresModifierDatafind_multires_modifier_before (Scene *scene, ModifierData *lastmd)
 
MultiresModifierDataget_multires_modifier (Scene *scene, Object *ob, bool use_first)
 
int multires_get_level (const Scene *scene, const Object *ob, const MultiresModifierData *mmd, bool render, bool ignore_simplify)
 
void multires_set_tot_level (Object *ob, MultiresModifierData *mmd, int lvl)
 
static void multires_ccg_mark_as_modified (SubdivCCG *subdiv_ccg, MultiresModifiedFlags flags)
 
void multires_mark_as_modified (Depsgraph *depsgraph, Object *object, MultiresModifiedFlags flags)
 
void multires_flush_sculpt_updates (Object *object)
 
void multires_force_sculpt_rebuild (Object *object)
 
void multires_force_external_reload (Object *object)
 
static int get_levels_from_disps (Object *ob)
 
void multiresModifier_set_levels_from_disps (MultiresModifierData *mmd, Object *ob)
 
static void multires_set_tot_mdisps (Mesh *me, int lvl)
 
static void multires_reallocate_mdisps (int totloop, MDisps *mdisps, int lvl)
 
static void multires_copy_grid (float(*gridA)[3], float(*gridB)[3], int sizeA, int sizeB)
 
static void multires_copy_dm_grid (CCGElem *gridA, CCGElem *gridB, CCGKey *keyA, CCGKey *keyB)
 
static void multires_grid_paint_mask_downsample (GridPaintMask *gpm, int level)
 
static void multires_del_higher (MultiresModifierData *mmd, Object *ob, int lvl)
 
void multiresModifier_del_levels (MultiresModifierData *mmd, Scene *scene, Object *ob, int direction)
 
static DerivedMeshmultires_dm_create_local (Scene *scene, Object *ob, DerivedMesh *dm, int lvl, int totlvl, bool alloc_paint_mask, int flags)
 
static DerivedMeshsubsurf_dm_create_local (Scene *scene, Object *ob, DerivedMesh *dm, int lvl, bool is_simple, bool is_optimal, bool is_plain_uv, bool alloc_paint_mask, bool for_render, SubsurfFlags flags)
 
static void grid_tangent (const CCGKey *key, int x, int y, int axis, CCGElem *grid, float t[3])
 
static void grid_tangent_matrix (float mat[3][3], const CCGKey *key, int x, int y, CCGElem *grid)
 
static void multires_disp_run_cb (void *__restrict userdata, const int pidx, const TaskParallelTLS *__restrict UNUSED(tls))
 
void multires_modifier_update_mdisps (struct DerivedMesh *dm, Scene *scene)
 
void multires_modifier_update_hidden (DerivedMesh *dm)
 
void multires_stitch_grids (Object *ob)
 
DerivedMeshmultires_make_derived_from_derived (DerivedMesh *dm, MultiresModifierData *mmd, Scene *scene, Object *ob, MultiresFlags flags)
 
void old_mdisps_bilinear (float out[3], float(*disps)[3], const int st, float u, float v)
 
void multiresModifier_sync_levels_ex (Object *ob_dst, MultiresModifierData *mmd_src, MultiresModifierData *mmd_dst)
 
static void multires_sync_levels (Scene *scene, Object *ob_src, Object *ob_dst)
 
static void multires_apply_uniform_scale (Object *object, const float scale)
 
static void multires_apply_smat (struct Depsgraph *UNUSED(depsgraph), Scene *scene, Object *object, const float smat[3][3])
 
int multires_mdisp_corners (MDisps *s)
 
void multiresModifier_scale_disp (struct Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void multiresModifier_prepare_join (struct Depsgraph *depsgraph, Scene *scene, Object *ob, Object *to_ob)
 
void multires_topology_changed (Mesh *me)
 
void multires_ensure_external_read (struct Mesh *mesh, int top_level)
 
void multiresModifier_ensure_external_read (struct Mesh *mesh, const MultiresModifierData *mmd)
 
int mdisp_rot_face_to_crn (struct MVert *UNUSED(mvert), struct MPoly *mpoly, struct MLoop *UNUSED(mloop), const struct MLoopTri *UNUSED(lt), const int face_side, const float u, const float v, float *x, float *y)
 

Variables

static const int multires_grid_tot []
 
static const int multires_side_tot []
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 27 of file multires.c.

Typedef Documentation

◆ MultiresThreadedData

Enumeration Type Documentation

◆ DispOp

enum DispOp
Enumerator
APPLY_DISPLACEMENTS 
CALC_DISPLACEMENTS 
ADD_DISPLACEMENTS 

Definition at line 72 of file multires.c.

Function Documentation

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

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

◆ find_multires_modifier_before()

MultiresModifierData* find_multires_modifier_before ( Scene scene,
ModifierData lastmd 
)

◆ get_levels_from_disps()

static int get_levels_from_disps ( Object ob)
static

◆ get_multires_modifier()

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

◆ grid_tangent()

static void grid_tangent ( const CCGKey key,
int  x,
int  y,
int  axis,
CCGElem grid,
float  t[3] 
)
static

Definition at line 809 of file multires.c.

References CCG_grid_elem_co(), CCGKey::grid_size, sub_v3_v3v3(), t, x, and y.

Referenced by grid_tangent_matrix().

◆ grid_tangent_matrix()

static void grid_tangent_matrix ( float  mat[3][3],
const CCGKey key,
int  x,
int  y,
CCGElem grid 
)
static

Definition at line 842 of file multires.c.

References CCG_grid_elem_no(), copy_v3_v3(), grid_tangent(), normalize_v3(), x, and y.

Referenced by multires_disp_run_cb().

◆ mdisp_rot_face_to_crn()

int mdisp_rot_face_to_crn ( struct MVert UNUSEDmvert,
struct MPoly mpoly,
struct MLoop UNUSEDmloop,
const struct MLoopTri UNUSEDlt,
const int  face_side,
const float  u,
const float  v,
float x,
float y 
)

Definition at line 1554 of file multires.c.

References len, len_v3v3(), MPoly::loopstart, NULL, MPoly::totloop, v, w(), x, and y.

◆ multires_apply_smat()

static void multires_apply_smat ( struct Depsgraph UNUSEDdepsgraph,
Scene scene,
Object object,
const float  smat[3][3] 
)
static

◆ multires_apply_uniform_scale()

static void multires_apply_uniform_scale ( Object object,
const float  scale 
)
static

◆ multires_ccg_mark_as_modified()

static void multires_ccg_mark_as_modified ( SubdivCCG subdiv_ccg,
MultiresModifiedFlags  flags 
)
static

◆ multires_copy_dm_grid()

static void multires_copy_dm_grid ( CCGElem gridA,
CCGElem gridB,
CCGKey keyA,
CCGKey keyB 
)
static

Definition at line 609 of file multires.c.

References CCG_elem_offset_co(), CCGKey::elem_size, CCGKey::grid_size, x, and y.

Referenced by multires_modifier_update_mdisps().

◆ multires_copy_grid()

static void multires_copy_grid ( float(*)  gridA[3],
float(*)  gridB[3],
int  sizeA,
int  sizeB 
)
static

Definition at line 585 of file multires.c.

References copy_v3_v3(), x, and y.

Referenced by multires_del_higher().

◆ multires_customdata_delete()

void multires_customdata_delete ( Mesh me)

◆ multires_del_higher()

static void multires_del_higher ( MultiresModifierData mmd,
Object ob,
int  lvl 
)
static

◆ multires_disp_run_cb()

static void multires_disp_run_cb ( void *__restrict  userdata,
const int  pidx,
const TaskParallelTLS *__restrict   UNUSEDtls 
)
static

◆ multires_dm_create_local()

static DerivedMesh* multires_dm_create_local ( Scene scene,
Object ob,
DerivedMesh dm,
int  lvl,
int  totlvl,
bool  alloc_paint_mask,
int  flags 
)
static

◆ multires_ensure_external_read()

void multires_ensure_external_read ( struct Mesh mesh,
int  top_level 
)

◆ multires_flush_sculpt_updates()

void multires_flush_sculpt_updates ( Object object)

◆ multires_force_external_reload()

void multires_force_external_reload ( Object object)

◆ multires_force_sculpt_rebuild()

void multires_force_sculpt_rebuild ( Object object)

◆ multires_get_level()

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

◆ multires_grid_paint_mask_downsample()

static void multires_grid_paint_mask_downsample ( GridPaintMask gpm,
int  level 
)
static

◆ multires_make_derived_from_derived()

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

◆ multires_mark_as_modified()

void multires_mark_as_modified ( Depsgraph depsgraph,
Object object,
MultiresModifiedFlags  flags 
)

◆ multires_mdisp_corners()

int multires_mdisp_corners ( MDisps s)

Definition at line 1436 of file multires.c.

References MDisps::totdisp.

Referenced by bm_corners_to_loops_ex(), and layerSwap_mdisps().

◆ multires_mdisps_downsample_hidden()

static BLI_bitmap* multires_mdisps_downsample_hidden ( const BLI_bitmap old_hidden,
int  old_level,
int  new_level 
)
static

◆ multires_mdisps_subdivide_hidden()

static void multires_mdisps_subdivide_hidden ( MDisps md,
int  new_level 
)
static

◆ multires_mdisps_upsample_hidden()

static BLI_bitmap* multires_mdisps_upsample_hidden ( BLI_bitmap lo_hidden,
int  lo_level,
int  hi_level,
const BLI_bitmap prev_hidden 
)
static

◆ multires_modifier_update_hidden()

void multires_modifier_update_hidden ( DerivedMesh dm)

◆ multires_modifier_update_mdisps()

void multires_modifier_update_mdisps ( struct DerivedMesh dm,
Scene scene 
)

◆ multires_output_hidden_to_ccgdm()

static void multires_output_hidden_to_ccgdm ( CCGDerivedMesh ccgdm,
Mesh me,
int  level 
)
static

◆ multires_reallocate_mdisps()

static void multires_reallocate_mdisps ( int  totloop,
MDisps mdisps,
int  lvl 
)
static

◆ multires_set_tot_level()

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

◆ multires_set_tot_mdisps()

static void multires_set_tot_mdisps ( Mesh me,
int  lvl 
)
static

◆ multires_stitch_grids()

void multires_stitch_grids ( Object ob)

◆ multires_sync_levels()

static void multires_sync_levels ( Scene scene,
Object ob_src,
Object ob_dst 
)
static

◆ multires_topology_changed()

void multires_topology_changed ( Mesh me)

◆ multiresModifier_del_levels()

void multiresModifier_del_levels ( MultiresModifierData mmd,
Scene scene,
Object ob,
int  direction 
)

◆ multiresModifier_disp_run()

static void multiresModifier_disp_run ( DerivedMesh dm,
Mesh me,
DerivedMesh dm2,
DispOp  op,
CCGElem **  oldGridData,
int  totlvl 
)
static

◆ multiresModifier_ensure_external_read()

void multiresModifier_ensure_external_read ( struct Mesh mesh,
const MultiresModifierData mmd 
)

◆ multiresModifier_prepare_join()

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

◆ multiresModifier_scale_disp()

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

Definition at line 1451 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 ( MultiresModifierData mmd,
Object ob 
)

◆ multiresModifier_sync_levels_ex()

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

◆ old_mdisps_bilinear()

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

Definition at line 1305 of file multires.c.

References add_v3_v3v3(), floor(), libmv::isnan(), mul_v3_fl(), mul_v3_v3fl(), v, x, x2, and y.

Referenced by loop_interp_multires_cb().

◆ subsurf_dm_create_local()

static DerivedMesh* subsurf_dm_create_local ( Scene scene,
Object ob,
DerivedMesh dm,
int  lvl,
bool  is_simple,
bool  is_optimal,
bool  is_plain_uv,
bool  alloc_paint_mask,
bool  for_render,
SubsurfFlags  flags 
)
static

Variable Documentation

◆ multires_grid_tot

const int multires_grid_tot[]
static
Initial value:
= {
0, 4, 9, 25, 81, 289, 1089, 4225, 16641, 66049, 263169, 1050625, 4198401, 16785409}

Definition at line 66 of file multires.c.

Referenced by multires_del_higher(), multires_ensure_external_read(), multires_reallocate_mdisps(), and multires_set_tot_mdisps().

◆ multires_side_tot

const int multires_side_tot[]
static
Initial value:
= {
0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097}

Definition at line 68 of file multires.c.

Referenced by multires_del_higher(), and multiresModifier_disp_run().