[Bf-blender-cvs] [ad21793c694] interactive_physics: Interactive mode: new scene.flag SCE_INTERACTIVE to update the depsgraph without frame change but running physics.
Benoit Bolsee
noreply at git.blender.org
Thu Oct 11 14:07:49 CEST 2018
Commit: ad21793c69429dea4489603a77b95ac733966bcc
Author: Benoit Bolsee
Date: Thu Oct 11 14:06:34 2018 +0200
Branches: interactive_physics
https://developer.blender.org/rBad21793c69429dea4489603a77b95ac733966bcc
Interactive mode: new scene.flag SCE_INTERACTIVE to update the depsgraph without frame change but running physics.
Interactive button added on time line.
===================================================================
M release/scripts/addons
M release/scripts/addons_contrib
M release/scripts/startup/bl_ui/space_time.py
M source/blender/blenkernel/intern/rigidbody.c
M source/blender/editors/screen/screen_ops.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/release/scripts/addons b/release/scripts/addons
index 5f7fba0565a..0923bdf725b 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 5f7fba0565a7c9ae93eae31a08fc9bbbd16d333a
+Subproject commit 0923bdf725b088ba584e6b1246f1ad986be436b3
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
index fecc0db5600..15b25a42783 160000
--- a/release/scripts/addons_contrib
+++ b/release/scripts/addons_contrib
@@ -1 +1 @@
-Subproject commit fecc0db5600405a0c14c70120ae279222861ef80
+Subproject commit 15b25a42783d1e516b5298d70b582fae2559ae17
diff --git a/release/scripts/startup/bl_ui/space_time.py b/release/scripts/startup/bl_ui/space_time.py
index 10cd2f6d47b..d9b0e2e6298 100644
--- a/release/scripts/startup/bl_ui/space_time.py
+++ b/release/scripts/startup/bl_ui/space_time.py
@@ -38,6 +38,8 @@ class TIME_HT_editor_buttons(Header):
layout.separator_spacer()
+ layout.prop(scene, "use_interactive_mode", text="", icon='GAME', toggle=True)
+
layout.prop(toolsettings, "use_keyframe_insert_auto", text="", toggle=True)
row = layout.row(align=True)
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 95b558f5b43..737359aae93 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1661,6 +1661,24 @@ void BKE_rigidbody_do_simulation(Depsgraph *depsgraph, Scene *scene, float ctime
PTCacheID pid;
int startframe, endframe;
+ if (scene->flag & SCE_INTERACTIVE) {
+ /* No caching when in interactive mode */
+ if (rbw->shared->physics_world == NULL)
+ return;
+ else if (rbw->objects == NULL)
+ rigidbody_update_ob_array(rbw);
+
+ rigidbody_update_simulation(depsgraph, scene, rbw, false);
+
+ /* TODO: get the actual time difference from previous step so that the physics simulation is real time */
+ timestep = 1.0f / (float)FPS * rbw->time_scale;
+ /* step simulation by the requested timestep, steps per second are adjusted to take time scale into account */
+ RB_dworld_step_simulation(rbw->shared->physics_world, timestep, INT_MAX, 1.0f / (float)rbw->steps_per_second * min_ff(rbw->time_scale, 1.0f));
+
+ rigidbody_update_simulation_post_step(depsgraph, rbw);
+ return;
+ }
+
BKE_ptcache_id_from_rigidbody(&pid, NULL, rbw);
BKE_ptcache_id_time(&pid, scene, ctime, &startframe, &endframe, NULL);
cache = rbw->shared->pointcache;
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 9ce0956aa66..fad9990409e 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -3882,6 +3882,7 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
ScrArea *sa;
int sync;
float time;
+ int pfra = scene->r.cfra;
/* sync, don't sync, or follow scene setting */
if (sad->flag & ANIMPLAY_FLAG_SYNC) sync = 1;
@@ -3939,7 +3940,10 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
/* reset 'jumped' flag before checking if we need to jump... */
sad->flag &= ~ANIMPLAY_FLAG_JUMPED;
- if (sad->flag & ANIMPLAY_FLAG_REVERSE) {
+ if (scene->flag & SCE_INTERACTIVE) {
+ /* TODO: remember what was the frame increment so that it can be used in physics simulation to stick to real time */
+ scene->r.cfra = pfra;
+ } else if (sad->flag & ANIMPLAY_FLAG_REVERSE) {
/* jump back to end? */
if (PRVRANGEON) {
if (scene->r.cfra < scene->r.psfra) {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 15e8f950686..0ed0ffcdc15 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1936,6 +1936,7 @@ typedef enum eVGroupSelect {
#define SCE_NLA_EDIT_ON (1<<2)
#define SCE_FRAME_DROP (1<<3)
#define SCE_KEYS_NO_SELONLY (1<<4)
+#define SCE_INTERACTIVE (1<<5)
/* return flag BKE_scene_base_iter_next functions */
/* #define F_ERROR -1 */ /* UNUSED */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 11d56206d6e..c3d5b8adf13 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -6194,6 +6194,13 @@ void RNA_def_scene(BlenderRNA *brna)
"(in timeline and when jumping between keyframes)");
RNA_def_property_update(prop, NC_SCENE | ND_FRAME, NULL);
+ /* Timeline / Interactive mode */
+ prop = RNA_def_property(srna, "use_interactive_mode", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SCE_INTERACTIVE);
+ RNA_def_property_ui_text(prop, "Run interactive mode for physics",
+ "The scene frame is no longer incrementing (and thus animation is stopped) but the physics engine still executes");
+ RNA_def_property_update(prop, NC_SCENE | ND_FRAME, NULL);
+
/* Stamp */
prop = RNA_def_property(srna, "use_stamp_note", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "r.stamp_udata");
More information about the Bf-blender-cvs
mailing list