125 walk(userData, ob, md,
"texture");
130 bool UNUSED(useRenderParams))
139 bool need_transform_relation =
false;
143 need_transform_relation =
true;
152 need_transform_relation =
true;
155 need_transform_relation =
true;
159 if (need_transform_relation) {
189 float weight =
data->weight;
190 int defgrp_index =
data->defgrp_index;
191 int direction =
data->direction;
192 bool use_global_direction =
data->use_global_direction;
196 float(*vert_clnors)[3] =
data->vert_clnors;
198 const float delta_fixed = 1.0f -
209 if (weight == 0.0f) {
214 if (
data->tex_target) {
217 data->scene,
data->tex_target, tex_co[iter], &texres,
data->pool,
false);
229 CLAMP(delta, -10000, 10000);
233 if (use_global_direction) {
234 vertexCos[iter][0] += delta *
data->local_mat[0][0];
235 vertexCos[iter][1] += delta *
data->local_mat[1][0];
236 vertexCos[iter][2] += delta *
data->local_mat[2][0];
239 vertexCos[iter][0] += delta;
243 if (use_global_direction) {
244 vertexCos[iter][0] += delta *
data->local_mat[0][1];
245 vertexCos[iter][1] += delta *
data->local_mat[1][1];
246 vertexCos[iter][2] += delta *
data->local_mat[2][1];
249 vertexCos[iter][1] += delta;
253 if (use_global_direction) {
254 vertexCos[iter][0] += delta *
data->local_mat[0][2];
255 vertexCos[iter][1] += delta *
data->local_mat[1][2];
256 vertexCos[iter][2] += delta *
data->local_mat[2][2];
259 vertexCos[iter][2] += delta;
266 if (use_global_direction) {
273 vertexCos[iter][0] += delta * (mvert[iter].
no[0] / 32767.0f);
274 vertexCos[iter][1] += delta * (mvert[iter].
no[1] / 32767.0f);
275 vertexCos[iter][2] += delta * (mvert[iter].
no[2] / 32767.0f);
278 madd_v3_v3fl(vertexCos[iter], vert_clnors[iter], delta);
286 float (*vertexCos)[3],
297 float local_mat[4][4] = {{0}};
310 if (defgrp_index >= 0 && dvert ==
NULL) {
316 if (tex_target !=
NULL) {
317 tex_co =
MEM_calloc_arrayN((
size_t)numVerts,
sizeof(*tex_co),
"displaceModifier_do tex_co");
347 use_global_direction) {
355 data.weight = weight;
356 data.defgrp_index = defgrp_index;
357 data.direction = direction;
358 data.use_global_direction = use_global_direction;
359 data.tex_target = tex_target;
360 data.tex_co = tex_co;
361 data.vertexCos = vertexCos;
364 data.vert_clnors = vert_clnors;
365 if (tex_target !=
NULL) {
390 float (*vertexCos)[3],
406 float (*vertexCos)[3],
413 if (mesh_src !=
NULL) {
453 "texture_coords_bone",
454 &texture_coords_obj_data_ptr,
494 "DisplaceModifierData",
typedef float(TangentPoint)[2]
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_has_layer(const struct CustomData *data, int type)
void * CustomData_get_layer(const struct CustomData *data, int type)
struct ImagePool * BKE_image_pool_new(void)
void BKE_image_pool_free(struct ImagePool *pool)
void BKE_id_free(struct Main *bmain, void *idv)
void BKE_mesh_normals_loop_to_vertex(const int numVerts, const struct MLoop *mloops, const int numLoops, const float(*clnors)[3], float(*r_vert_clnors)[3])
void BKE_mesh_calc_normals_split(struct Mesh *mesh)
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
void(* IDWalkFunc)(void *userData, struct Object *ob, struct ID **idpoin, int cb_flag)
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
void(* TexWalkFunc)(void *userData, struct Object *ob, struct ModifierData *md, const char *propname)
void BKE_modifier_copydata_generic(const struct ModifierData *md, struct ModifierData *md_dst, const int flag)
@ eModifierTypeType_OnlyDeform
General operations, lookup, etc. for blender objects.
bool BKE_texture_dependsOnTime(const struct Tex *texture)
void BKE_texture_fetch_images_for_pool(struct Tex *texture, struct ImagePool *pool)
void BKE_texture_get_value_ex(const struct Scene *scene, struct Tex *texture, const float *tex_co, struct TexResult *texres, struct ImagePool *pool, bool use_color_management)
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_transposed_mat3_m4_v3(const float M[4][4], float r[3])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
void BLI_task_parallel_range(const int start, const int stop, void *userdata, TaskParallelRangeFunc func, const TaskParallelSettings *settings)
BLI_INLINE void BLI_parallel_range_settings_defaults(TaskParallelSettings *settings)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
void DEG_add_modifier_to_transform_relation(struct DepsNodeHandle *node_handle, const char *description)
void DEG_add_generic_id_relation(struct DepsNodeHandle *node_handle, struct ID *id, const char *description)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
#define CD_MASK_MDEFORMVERT
#define CD_MASK_CUSTOMLOOPNORMAL
#define DNA_struct_default_get(struct_name)
struct DisplaceModifierData DisplaceModifierData
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float(*vertexCos)[3], int numVerts)
struct DisplaceUserdata DisplaceUserdata
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
static bool dependsOnNormals(ModifierData *md)
static void deformVerts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], int numVerts)
static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
static void displaceModifier_do(DisplaceModifierData *dmd, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], const int numVerts)
static void displaceModifier_do_task(void *__restrict userdata, const int iter, const TaskParallelTLS *__restrict UNUSED(tls))
static void initData(ModifierData *md)
static void panelRegister(ARegionType *region_type)
static void foreachTexLink(ModifierData *md, Object *ob, TexWalkFunc walk, void *userData)
ModifierTypeInfo modifierType_Displace
static bool dependsOnTime(ModifierData *md)
static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void panel_draw(const bContext *C, Panel *panel)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_panel_end(uiLayout *layout, PointerRNA *ptr)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const char *vgroup_prop, const char *invert_vgroup_prop, const char *text)
Mesh * MOD_deform_mesh_eval_get(Object *ob, struct BMEditMesh *em, Mesh *mesh, const float(*vertexCos)[3], const int num_verts, const bool use_normals, const bool use_orco)
void MOD_init_texture(MappingInfoModifierData *dmd, const ModifierEvalContext *ctx)
void MOD_depsgraph_update_object_bone_relation(struct DepsNodeHandle *node, Object *object, const char *bonename, const char *description)
void MOD_get_texture_coords(MappingInfoModifierData *dmd, const ModifierEvalContext *UNUSED(ctx), Object *ob, Mesh *mesh, float(*cos)[3], float(*r_texco)[3])
void MOD_get_vgroup(Object *ob, struct Mesh *mesh, const char *name, MDeformVert **dvert, int *defgrp_index)
Group RGB to Bright Vector Camera CLAMP
StructRNA RNA_DisplaceModifier
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
void uiTemplateID(uiLayout *layout, const struct bContext *C, struct PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop, int filter, const bool live_icon, const char *text)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
void uiItemPointerR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, struct PointerRNA *searchptr, const char *searchpropname, const char *name, int icon)
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct Object * map_object
bool use_global_direction
DisplaceModifierData * dmd
struct CustomData pdata ldata
struct Depsgraph * depsgraph
struct DepsNodeHandle * node