forked from bartvdbraak/blender
Add "Gravitation" option to "Force" type force fields
This adds an option to force fields of type "Force", which enables the simulation of gravitational behavior (dist^-2 falloff). Patch by @AndreasE Reviewers: #physics, LucaRood, mont29 Reviewed By: #physics, LucaRood, mont29 Tags: #physics Differential Revision: https://developer.blender.org/D2389
This commit is contained in:
parent
29859d0d5e
commit
4c164487bc
@ -274,6 +274,8 @@ def basic_force_field_settings_ui(self, context, field):
|
||||
col.prop(field, "use_global_coords", text="Global")
|
||||
elif field.type == 'HARMONIC':
|
||||
col.prop(field, "use_multiple_springs")
|
||||
if field.type == 'FORCE':
|
||||
col.prop(field, "use_gravity_falloff", text="Gravitation")
|
||||
|
||||
split = layout.split()
|
||||
|
||||
|
@ -848,6 +848,14 @@ static void do_physical_effector(EffectorCache *eff, EffectorData *efd, Effected
|
||||
break;
|
||||
case PFIELD_FORCE:
|
||||
normalize_v3(force);
|
||||
if (pd->flag & PFIELD_GRAVITATION){ /* Option: Multiply by 1/distance^2 */
|
||||
if (efd->distance < FLT_EPSILON){
|
||||
strength = 0.0f;
|
||||
}
|
||||
else {
|
||||
strength *= powf(efd->distance, -2.0f);
|
||||
}
|
||||
}
|
||||
mul_v3_fl(force, strength * efd->falloff);
|
||||
break;
|
||||
case PFIELD_VORTEX:
|
||||
|
@ -372,6 +372,7 @@ typedef struct SoftBody {
|
||||
#define PFIELD_DO_ROTATION (1<<15)
|
||||
#define PFIELD_GUIDE_PATH_WEIGHT (1<<16) /* apply curve weights */
|
||||
#define PFIELD_SMOKE_DENSITY (1<<17) /* multiply smoke force by density */
|
||||
#define PFIELD_GRAVITATION (1<<18) /* used for (simple) force */
|
||||
|
||||
/* pd->falloff */
|
||||
#define PFIELD_FALL_SPHERE 0
|
||||
|
@ -1275,7 +1275,7 @@ static void rna_def_field(BlenderRNA *brna)
|
||||
prop = RNA_def_property(srna, "falloff_power", PROP_FLOAT, PROP_NONE);
|
||||
RNA_def_property_float_sdna(prop, NULL, "f_power");
|
||||
RNA_def_property_range(prop, 0.0f, 10.0f);
|
||||
RNA_def_property_ui_text(prop, "Falloff Power", "Falloff power (real gravitational falloff = 2)");
|
||||
RNA_def_property_ui_text(prop, "Falloff Power", "");
|
||||
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
|
||||
|
||||
prop = RNA_def_property(srna, "distance_min", PROP_FLOAT, PROP_NONE);
|
||||
@ -1394,6 +1394,11 @@ static void rna_def_field(BlenderRNA *brna)
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_SMOKE_DENSITY);
|
||||
RNA_def_property_ui_text(prop, "Apply Density", "Adjust force strength based on smoke density");
|
||||
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
|
||||
prop = RNA_def_property(srna, "use_gravity_falloff", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "flag", PFIELD_GRAVITATION);
|
||||
RNA_def_property_ui_text(prop, "Gravity Falloff", "Multiply force by 1/distance²");
|
||||
RNA_def_property_update(prop, 0, "rna_FieldSettings_update");
|
||||
|
||||
|
||||
/* Pointer */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user