forked from bartvdbraak/blender
add an influence slider to mesh cache.
This commit is contained in:
parent
bcdbc57994
commit
8cde4e5182
@ -167,6 +167,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
|
|||||||
layout.prop(md, "filepath")
|
layout.prop(md, "filepath")
|
||||||
|
|
||||||
layout.label(text="Evaluation:")
|
layout.label(text="Evaluation:")
|
||||||
|
layout.prop(md, "factor", slider=True)
|
||||||
layout.prop(md, "interpolation")
|
layout.prop(md, "interpolation")
|
||||||
|
|
||||||
layout.label(text="Time Mapping:")
|
layout.label(text="Time Mapping:")
|
||||||
|
@ -255,6 +255,7 @@ void sub_vn_vn(float *array_tar, const float *array_src, const int size);
|
|||||||
void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const int size);
|
void sub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const int size);
|
||||||
void msub_vn_vn(float *array_tar, const float *array_src, const float f, const int size);
|
void msub_vn_vn(float *array_tar, const float *array_src, const float f, const int size);
|
||||||
void msub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const float f, const int size);
|
void msub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array_src_b, const float f, const int size);
|
||||||
|
void interp_vn_vn(float *array_tar, const float *array_src, const float t, const int size);
|
||||||
void fill_vn_i(int *array_tar, const int size, const int val);
|
void fill_vn_i(int *array_tar, const int size, const int val);
|
||||||
void fill_vn_ushort(unsigned short *array_tar, const int size, const unsigned short val);
|
void fill_vn_ushort(unsigned short *array_tar, const int size, const unsigned short val);
|
||||||
void fill_vn_fl(float *array_tar, const int size, const float val);
|
void fill_vn_fl(float *array_tar, const int size, const float val);
|
||||||
|
@ -711,6 +711,19 @@ void msub_vn_vnvn(float *array_tar, const float *array_src_a, const float *array
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void interp_vn_vn(float *array_tar, const float *array_src, const float t, const int size)
|
||||||
|
{
|
||||||
|
const float s = 1.0f - t;
|
||||||
|
float *tar = array_tar + (size - 1);
|
||||||
|
const float *src = array_src + (size - 1);
|
||||||
|
int i = size;
|
||||||
|
while (i--) {
|
||||||
|
*(tar) = (s * *(tar)) + (t * *(src));
|
||||||
|
tar--;
|
||||||
|
src--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void fill_vn_i(int *array_tar, const int size, const int val)
|
void fill_vn_i(int *array_tar, const int size, const int val)
|
||||||
{
|
{
|
||||||
int *tar = array_tar + (size - 1);
|
int *tar = array_tar + (size - 1);
|
||||||
|
@ -1174,7 +1174,7 @@ typedef struct MeshCacheModifierData {
|
|||||||
|
|
||||||
char interp;
|
char interp;
|
||||||
|
|
||||||
char pad[4];
|
float factor;
|
||||||
|
|
||||||
/* play_mode == MOD_MESHCACHE_PLAY_CFEA */
|
/* play_mode == MOD_MESHCACHE_PLAY_CFEA */
|
||||||
float frame_start;
|
float frame_start;
|
||||||
|
@ -3558,6 +3558,12 @@ static void rna_def_modifier_meshcache(BlenderRNA *brna)
|
|||||||
RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
|
RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
|
||||||
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
|
||||||
|
RNA_def_property_float_sdna(prop, NULL, "factor");
|
||||||
|
RNA_def_property_range(prop, 0.0f, 1.0f);
|
||||||
|
RNA_def_property_ui_text(prop, "Influence", "Influence of the deformation");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_Modifier_update");
|
||||||
|
|
||||||
/* -------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------- */
|
||||||
/* Axis Conversion */
|
/* Axis Conversion */
|
||||||
prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
|
prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
|
||||||
|
@ -34,12 +34,13 @@
|
|||||||
#include "BLI_path_util.h"
|
#include "BLI_path_util.h"
|
||||||
#include "BLI_math.h"
|
#include "BLI_math.h"
|
||||||
|
|
||||||
|
|
||||||
#include "BKE_DerivedMesh.h"
|
#include "BKE_DerivedMesh.h"
|
||||||
#include "BKE_scene.h"
|
#include "BKE_scene.h"
|
||||||
#include "BKE_global.h"
|
#include "BKE_global.h"
|
||||||
#include "BKE_main.h"
|
#include "BKE_main.h"
|
||||||
|
|
||||||
|
#include "MEM_guardedalloc.h"
|
||||||
|
|
||||||
#include "MOD_meshcache_util.h" /* utility functions */
|
#include "MOD_meshcache_util.h" /* utility functions */
|
||||||
|
|
||||||
#include "MOD_modifiertypes.h"
|
#include "MOD_modifiertypes.h"
|
||||||
@ -99,6 +100,8 @@ static void initData(ModifierData *md)
|
|||||||
mcmd->interp = MOD_MESHCACHE_INTERP_LINEAR;
|
mcmd->interp = MOD_MESHCACHE_INTERP_LINEAR;
|
||||||
mcmd->frame_scale = 1.0f;
|
mcmd->frame_scale = 1.0f;
|
||||||
|
|
||||||
|
mcmd->factor = 1.0f;
|
||||||
|
|
||||||
/* (Y, Z). Blender default */
|
/* (Y, Z). Blender default */
|
||||||
mcmd->forward_axis = 1;
|
mcmd->forward_axis = 1;
|
||||||
mcmd->up_axis = 2;
|
mcmd->up_axis = 2;
|
||||||
@ -124,6 +127,8 @@ static void copyData(ModifierData *md, ModifierData *target)
|
|||||||
tmcmd->frame_start = mcmd->frame_start;
|
tmcmd->frame_start = mcmd->frame_start;
|
||||||
tmcmd->frame_scale = mcmd->frame_scale;
|
tmcmd->frame_scale = mcmd->frame_scale;
|
||||||
|
|
||||||
|
tmcmd->factor = mcmd->factor;
|
||||||
|
|
||||||
tmcmd->eval_frame = mcmd->eval_frame;
|
tmcmd->eval_frame = mcmd->eval_frame;
|
||||||
tmcmd->eval_time = mcmd->eval_time;
|
tmcmd->eval_time = mcmd->eval_time;
|
||||||
tmcmd->eval_factor = mcmd->eval_factor;
|
tmcmd->eval_factor = mcmd->eval_factor;
|
||||||
@ -142,14 +147,19 @@ static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
|
|||||||
MeshCacheModifierData *mcmd = (MeshCacheModifierData *) md;
|
MeshCacheModifierData *mcmd = (MeshCacheModifierData *) md;
|
||||||
|
|
||||||
/* leave it up to the modifier to check the file is valid on calculation */
|
/* leave it up to the modifier to check the file is valid on calculation */
|
||||||
return (mcmd->filepath[0] == '\0');
|
return (mcmd->factor <= 0.0f) || (mcmd->filepath[0] == '\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void meshcache_do(
|
static void meshcache_do(
|
||||||
MeshCacheModifierData *mcmd, Object *ob, DerivedMesh *UNUSED(dm),
|
MeshCacheModifierData *mcmd, Object *ob, DerivedMesh *UNUSED(dm),
|
||||||
float (*vertexCos)[3], int numVerts)
|
float (*vertexCos_)[3], int numVerts)
|
||||||
{
|
{
|
||||||
|
float (*vertexCos_Store)[3] = (mcmd->factor < 1.0f) ?
|
||||||
|
MEM_mallocN(sizeof(*vertexCos_Store) * numVerts, __func__) : NULL;
|
||||||
|
float (*vertexCos_Real)[3] = vertexCos_;
|
||||||
|
float (*vertexCos)[3] = vertexCos_Store ? vertexCos_Store : vertexCos_Real;
|
||||||
|
|
||||||
Scene *scene = mcmd->modifier.scene;
|
Scene *scene = mcmd->modifier.scene;
|
||||||
const float fps = FPS;
|
const float fps = FPS;
|
||||||
|
|
||||||
@ -263,6 +273,14 @@ static void meshcache_do(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (vertexCos_Store) {
|
||||||
|
if (ok) {
|
||||||
|
interp_vn_vn(*vertexCos_Real, *vertexCos_Store, mcmd->factor, numVerts * 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
MEM_freeN(vertexCos_Store);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void deformVerts(ModifierData *md, Object *ob,
|
static void deformVerts(ModifierData *md, Object *ob,
|
||||||
|
Loading…
Reference in New Issue
Block a user