Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanne Karhu <jhkarh@gmail.com>2009-06-27 19:28:58 +0400
committerJanne Karhu <jhkarh@gmail.com>2009-06-27 19:28:58 +0400
commit912c2f440b447aa8cae9f3e3a86acf51cd495e3d (patch)
tree57b5274640b0c0854f83ff0e3e4ba43902a69ddc /release
parent9becf3c310b1051d1e9dc7170cb02d73bc4d6e08 (diff)
Pointcache refresh part 2
* Based on what happens during simulation the cache is marked (also in cache panel, this could possibly be extended to 3d view as well) as: - exact (not marked) - outdated (simulation is not done completely with current settings) - non-exact (frames were skipped during simulation) * The parameter "cache step" effects the number of frames between saved cache frames. - This can save a lot of memory (or disk space) if absolutely frame accurate simulation is not required. - Speeds up the "quick caching" very much. - Frames between cached frames are interpolated from the cached frames. - Current default value of 10 frames works nicely with up/down-arrows (skip 10 frames forwards/backwards on timeline), but can be changed if wanted. * The caching can work in normal or "quick" mode: [Normal cache] - Basic: Calculate what even happens (settings change, big frame steps etc.) and cache results, if possible try to use "cache step" when saving cache frames. - Becomes non-exact: After larger than 1 frame steps. - Becomes outdated: After any change effecting the simulation other than frame steps. - Pros/cons: Freedom of doing anything and playing with particles, but exact results have to calculated from the beginning. [Quick cache] - Basic: Calculate simulation up to current frame automatically on changes with cache step sized jumps in simulation. With multiple "quick cached" simulations the smallest cache step is used. - Becomes non-exact: Always from frame 1 (unless cache step = 1). - Becomes outdated: Never. - Pros/cons: Not very accurate, but super fast! - Todo: Transform of any animated (non-autokeyed) object is locked! Probably needs some tinkering with anim sys overrides. * The simulation can be run forwards or backwards even if it's cache is outdated or non-exact, the following rules apply in these situations: - step forwards (to unknown) -> simulate from last exact frame, store result - step backwards (to known) -> result is interpolated from existing frames, store result, clear cache forwards if current frame is after last exact frame * "Calculate to current frame" runs the simulation from start to current frame with a frame steps of 1. - Baking does the same, but runs the simulation all the way to the end of simulation. - Rendering does this automatically if the simulation is outdated of non-exact, so all rendered simulations will always be updated and exact. * Every cache panel also holds buttons to "Bake all dynamics", "Free all dynamics" and "Update all dynamics to current frame". * Cloth simulation supports the new cache too.
Diffstat (limited to 'release')
-rw-r--r--release/ui/buttons_particle.py27
-rw-r--r--release/ui/buttons_physic_cloth.py48
2 files changed, 65 insertions, 10 deletions
diff --git a/release/ui/buttons_particle.py b/release/ui/buttons_particle.py
index f82324db9d8..378689e8202 100644
--- a/release/ui/buttons_particle.py
+++ b/release/ui/buttons_particle.py
@@ -130,11 +130,7 @@ class PARTICLE_PT_cache(ParticleButtonsPanel):
cache = psys.point_cache
row = layout.row()
- row.itemR(cache, "name", text="")
- if cache.outdated:
- row.itemL(text="Cache is outdated.")
- else:
- row.itemL(text="")
+ row.itemR(cache, "name")
row = layout.row()
@@ -142,18 +138,29 @@ class PARTICLE_PT_cache(ParticleButtonsPanel):
row.itemO("PTCACHE_OT_free_bake_particle_system", text="Free Bake")
else:
row.item_booleanO("PTCACHE_OT_cache_particle_system", "bake", True, text="Bake")
-
+
+ subrow = row.row()
+ subrow.enabled = (cache.frames_skipped or cache.outdated) and particle_panel_enabled(psys)
+ subrow.itemO("PTCACHE_OT_cache_particle_system", text="Calculate to Current Frame")
+
row = layout.row()
row.enabled = particle_panel_enabled(psys)
row.itemO("PTCACHE_OT_bake_from_particles_cache", text="Current Cache to Bake")
- if cache.autocache == 0:
- row.itemO("PTCACHE_OT_cache_particle_system", text="Cache to Current Frame")
+ row.itemR(cache, "step");
row = layout.row()
row.enabled = particle_panel_enabled(psys)
- #row.itemR(cache, "autocache")
+ row.itemR(cache, "quick_cache")
row.itemR(cache, "disk_cache")
- row.itemL(text=cache.info)
+
+ layout.itemL(text=cache.info)
+
+ layout.itemS()
+
+ row = layout.row()
+ row.item_booleanO("PTCACHE_OT_bake_all", "bake", True, text="Bake All Dynamics")
+ row.itemO("PTCACHE_OT_free_bake_all", text="Free All Bakes")
+ layout.itemO("PTCACHE_OT_bake_all", text="Update All Dynamics to current frame")
# for particles these are figured out automatically
#row.itemR(cache, "start_frame")
diff --git a/release/ui/buttons_physic_cloth.py b/release/ui/buttons_physic_cloth.py
index bd65392ad63..a06c644322a 100644
--- a/release/ui/buttons_physic_cloth.py
+++ b/release/ui/buttons_physic_cloth.py
@@ -43,7 +43,54 @@ class Physic_PT_cloth(PhysicButtonsPanel):
col.itemR(cloth, "goal_spring", text="Stiffness")
col.itemR(cloth, "goal_friction", text="Friction")
"""
+
+class PHYSICS_PT_cloth_cache(PhysicButtonsPanel):
+ __idname__= "PHYSICS_PT_cloth_cache"
+ __label__ = "Cache"
+ __default_closed__ = True
+
+ def draw(self, context):
+ layout = self.layout
+
+ cache = context.cloth.point_cache
+
+ row = layout.row()
+ row.itemR(cache, "name")
+
+ row = layout.row()
+ row.itemR(cache, "start_frame")
+ row.itemR(cache, "end_frame")
+
+ row = layout.row()
+
+ if cache.baked == True:
+ row.itemO("PTCACHE_OT_free_bake_cloth", text="Free Bake")
+ else:
+ row.item_booleanO("PTCACHE_OT_cache_cloth", "bake", True, text="Bake")
+
+ subrow = row.row()
+ subrow.enabled = cache.frames_skipped or cache.outdated
+ subrow.itemO("PTCACHE_OT_cache_cloth", text="Calculate to Current Frame")
+
+ row = layout.row()
+ #row.enabled = particle_panel_enabled(psys)
+ row.itemO("PTCACHE_OT_bake_from_cloth_cache", text="Current Cache to Bake")
+ row.itemR(cache, "step");
+ row = layout.row()
+ #row.enabled = particle_panel_enabled(psys)
+ row.itemR(cache, "quick_cache")
+ row.itemR(cache, "disk_cache")
+
+ layout.itemL(text=cache.info)
+
+ layout.itemS()
+
+ row = layout.row()
+ row.itemO("PTCACHE_OT_bake_all", "bake", True, text="Bake All Dynamics")
+ row.itemO("PTCACHE_OT_free_bake_all", text="Free All Bakes")
+ layout.itemO("PTCACHE_OT_bake_all", text="Update All Dynamics to current frame")
+
class Physic_PT_cloth_collision(PhysicButtonsPanel):
__idname__ = "Physic_PT_clothcollision"
__label__ = "Cloth Collision"
@@ -102,5 +149,6 @@ class Physic_PT_cloth_stiffness(PhysicButtonsPanel):
sub.itemR(cloth, "bending_stiffness_max", text="Max")
bpy.types.register(Physic_PT_cloth)
+bpy.types.register(PHYSICS_PT_cloth_cache)
bpy.types.register(Physic_PT_cloth_collision)
bpy.types.register(Physic_PT_cloth_stiffness)