39 #include "RNA_prototypes.h"
110 walk(userData, ob, md,
"texture");
115 bool UNUSED(useRenderParams))
124 bool need_transform_relation =
false;
128 need_transform_relation =
true;
137 need_transform_relation =
true;
140 need_transform_relation =
true;
144 if (need_transform_relation) {
175 float weight =
data->weight;
176 int defgrp_index =
data->defgrp_index;
177 int direction =
data->direction;
178 bool use_global_direction =
data->use_global_direction;
181 float(*vert_clnors)[3] =
data->vert_clnors;
183 const float delta_fixed = 1.0f -
194 if (weight == 0.0f) {
199 if (
data->tex_target) {
201 data->scene,
data->tex_target, tex_co[iter], &texres,
data->pool,
false);
213 CLAMP(delta, -10000, 10000);
217 if (use_global_direction) {
218 vertexCos[iter][0] += delta *
data->local_mat[0][0];
219 vertexCos[iter][1] += delta *
data->local_mat[1][0];
220 vertexCos[iter][2] += delta *
data->local_mat[2][0];
223 vertexCos[iter][0] += delta;
227 if (use_global_direction) {
228 vertexCos[iter][0] += delta *
data->local_mat[0][1];
229 vertexCos[iter][1] += delta *
data->local_mat[1][1];
230 vertexCos[iter][2] += delta *
data->local_mat[2][1];
233 vertexCos[iter][1] += delta;
237 if (use_global_direction) {
238 vertexCos[iter][0] += delta *
data->local_mat[0][2];
239 vertexCos[iter][1] += delta *
data->local_mat[1][2];
240 vertexCos[iter][2] += delta *
data->local_mat[2][2];
243 vertexCos[iter][2] += delta;
250 if (use_global_direction) {
260 madd_v3_v3fl(vertexCos[iter], vert_clnors[iter], delta);
268 float (*vertexCos)[3],
279 float local_mat[4][4] = {{0}};
292 if (defgrp_index >= 0 && dvert ==
NULL) {
298 if (tex_target !=
NULL) {
299 tex_co =
MEM_calloc_arrayN((
size_t)verts_num,
sizeof(*tex_co),
"displaceModifier_do tex_co");
326 use_global_direction) {
334 data.weight = weight;
335 data.defgrp_index = defgrp_index;
336 data.direction = direction;
337 data.use_global_direction = use_global_direction;
338 data.tex_target = tex_target;
339 data.tex_co = tex_co;
340 data.vertexCos = vertexCos;
346 data.vert_clnors = vert_clnors;
347 if (tex_target !=
NULL) {
372 float (*vertexCos)[3],
389 float (*vertexCos)[3],
396 if (mesh_src !=
NULL) {
436 "texture_coords_bone",
437 &texture_coords_obj_data_ptr,
477 "DisplaceModifierData",
479 &RNA_DisplaceModifier,
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)
const float(* BKE_mesh_vertex_normals_ensure(const struct Mesh *mesh))[3]
void BKE_mesh_normals_loop_to_vertex(int numVerts, const struct MLoop *mloops, 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, 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(int start, 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 deformVerts(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], int verts_num)
static void deformVertsEM(ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *editData, Mesh *mesh, float(*vertexCos)[3], int verts_num)
struct DisplaceUserdata DisplaceUserdata
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
static bool dependsOnTime(struct Scene *UNUSED(scene), ModifierData *md)
static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
static bool dependsOnNormals(ModifierData *md)
static void displaceModifier_do(DisplaceModifierData *dmd, const ModifierEvalContext *ctx, Mesh *mesh, float(*vertexCos)[3], const int verts_num)
static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
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 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 verts_num, 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 Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
void uiLayoutSetActive(uiLayout *layout, bool active)
uiLayout * uiLayoutColumn(uiLayout *layout, bool align)
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 uiTemplateID(uiLayout *layout, const struct bContext *C, struct PointerRNA *ptr, const char *propname, const char *newop, const char *openop, const char *unlinkop, int filter, bool live_icon, const char *text)
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
const float(* vert_normals)[3]
struct Depsgraph * depsgraph
struct DepsNodeHandle * node