[Durian-svn] [3703] updates to hair sim script.

campbell institute at blender.org
Fri May 21 12:01:27 CEST 2010


Revision: 3703
          https://blenderinstitute.dyndns.org/durian-svn/?do=log&project=durian&path=/&rev=3703
Author:   campbell
Date:     2010-05-21 12:01:21 +0200 (Fri, 21 May 2010)
Log Message:
-----------
updates to hair sim script.

Modified Paths:
--------------
    pro/scripts/modules/finals_config.py

Modified: pro/scripts/modules/finals_config.py
===================================================================
--- pro/scripts/modules/finals_config.py	2010-05-21 09:33:23 UTC (rev 3702)
+++ pro/scripts/modules/finals_config.py	2010-05-21 10:01:21 UTC (rev 3703)
@@ -8,14 +8,21 @@
 import bpy
 import os
 
-def get_pointcache_sintel_hair(obj=None):
-    if obj is None:
-        obj = bpy.data.objects["GEO-sintel_hair_emit"]
+def scene_info():
+    base_dir, base_name = os.path.split(bpy.data.filename)
+    base_name = os.path.splitext(base_name)[0]
 
-    psys = obj.particle_systems["sintel_hair"]
+    if base_name.endswith("_comp"):
+        base_name = base_name[:-len("_comp")]
 
-    return obj, psys
+    frame_start = bpy.context.scene.frame_start
+    frame_end = bpy.context.scene.frame_end
 
+    object_items = bpy.data.objects.items()
+    
+    return base_dir, base_name, frame_start, frame_end, object_items
+
+
 def pointcache_dirs(point_cache):
     # cache path local: from
     cache_dir = bpy.utils.expandpath(point_cache.id_data.library.filename) # expand //
@@ -31,6 +38,7 @@
 
     return cache_path_from, cache_path_to
 
+
 def pointcache_commands(point_cache):
     cache_path_from, cache_path_to = pointcache_dirs(point_cache)
 
@@ -47,49 +55,49 @@
         "mv %s/%s* %s/" % (cache_path_from, point_cache.name, os.path.dirname(cache_path_to)),
         "svn add %s" % (os.path.dirname(cache_path_to)) ]
 
-def setup(baked=False, pre_roll=40, sim=True, cloth=False, collisions=False, mindis=0.002):
-    def replace_group(group_name, groups_from):
-        group = bpy.data.groups[group_name]
-        
-        for obj in bpy.data.objects:
-            dupli_group = obj.dupli_group
-            if dupli_group and dupli_group.name in groups_from:
-                obj.dupli_group = group
 
+def pointcache_generic_setup(point_cache, frame_start, frame_end, pre_roll=0):
+    point_cache.frame_start = frame_start - pre_roll
+    point_cache.frame_end = frame_end + 1  # one extra frame for vector blur
+    point_cache.step = 1
+    point_cache.disk_cache = True
 
-    def pointcache_generic_setup(point_cache, frame_start, frame_end):
-        point_cache.frame_start = frame_start - pre_roll
-        point_cache.frame_end = frame_end + 1  # one extra frame for vector blur
-        point_cache.step = 1
-        point_cache.disk_cache = True
 
-    def pointcache_generic_bake(point_cache):
-        if baked:
-            point_cache.external = True
-            point_cache.filepath = os.path.join(base_dir, point_cache.name)
-            print("finals_config.py: configuring '%s'" % point_cache.name)
-        else:
-            if point_cache.external:
-                point_cache.external = False
+def pointcache_generic_bake(point_cache):
+    if baked:
+        point_cache.external = True
+        point_cache.filepath = os.path.join(base_dir, point_cache.name)
+        print("finals_config.py: configuring '%s'" % point_cache.name)
+    else:
+        if point_cache.external:
+            point_cache.external = False
 
-            print("finals_config.py: configuring :: Needs Baking'%s'" % point_cache.name)
-            for l in pointcache_commands(point_cache):
-                print("    " + l)
-            print("")
+        print("finals_config.py: configuring :: Needs Baking'%s'" % point_cache.name)
+        for l in pointcache_commands(point_cache):
+            print("    " + l)
+        print("")
 
 
-    base_dir, base_name = os.path.split(bpy.data.filename)
-    base_name = os.path.splitext(base_name)[0]
+def get_pointcache_sintel_hair(obj=None):
+    ''' called externally '''
+    if obj is None:
+        obj = bpy.data.objects["GEO-sintel_hair_emit"]
 
-    if base_name.endswith("_comp"):
-        base_name = base_name[:-len("_comp")]
+    psys = obj.particle_systems["sintel_hair"]
 
-    frame_start = bpy.context.scene.frame_start
-    frame_end = bpy.context.scene.frame_end
+    return obj, psys
 
-    object_items = bpy.data.objects.items()
-    
 
+
+
+
+# --- setup sintel/dragon/adult
+
+def setup_sintel(baked=False, sim=True, pre_roll=40, collisions=False, mindis=0.002):
+
+    base_dir, base_name, frame_start, frame_end, object_items = scene_info()
+
+
     # ---- Sintel ---- #
     
     # replace_group("sintel", ("sintel_simple", "sintel_simple_winter"))
@@ -101,7 +109,7 @@
         for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-sintel_hair_shad"]:
             obj, psys = get_pointcache_sintel_hair(obj)
             # change per scene
-            pointcache_generic_setup(psys.point_cache, frame_start, frame_end)
+            pointcache_generic_setup(psys.point_cache, frame_start, frame_end, pre_roll)
             psys.point_cache.name = "sintel_hair_" + base_name
             pointcache_generic_bake(psys.point_cache)
 
@@ -113,7 +121,7 @@
         obj, psys = get_pointcache_sintel_hair(obj)
 
         # change per scene
-        pointcache_generic_setup(psys.point_cache, frame_start, frame_end)
+        pointcache_generic_setup(psys.point_cache, frame_start, frame_end, pre_roll)
         psys.point_cache.name = "sintel_hair_" + base_name
         pointcache_generic_bake(psys.point_cache)
 
@@ -166,6 +174,9 @@
             psys.cloth.settings.mass = 0.015 # was 0.01
             psys.cloth.settings.internal_friction = 0.1 # 0.9 makes hair too symmatrical
 
+        # one setting to rule them all!
+        sintal_preset_hair_run()
+        
         """
         example of loading a hair weight file:
         
@@ -174,6 +185,7 @@
         this will load 02_d.hairw, which must be in the same
         directory as the shot (e.g. scenes/02-whatever/).
         """
+        '''
         # Per Blend Sintel Stuff...
         if base_name.startswith("02.b"):
             psys.cloth.settings.pin_stiffness = 30
@@ -307,8 +319,8 @@
             psys.cloth.settings.internal_friction = 0.1 # 0.9 makes hair too symmatrical
         else:
             print("    Warning, sintels hair is not baked!!!")
+        '''
 
-
         '''
         psys.settings.mass = 0.0
         psys.settings.keyframe_insert("mass", -1, 1)
@@ -317,16 +329,18 @@
         '''
 
 
+def setup_shaman(baked=False, sim=False, pre_roll=10):
+    base_dir, base_name, frame_start, frame_end, object_items = scene_info()
 
     # ---- Sharman ---- #
     # obj = bpy.data.objects.get("GEO-robe_sim")
     # if obj:
     for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-robe_sim"]:
         cloth_mod = obj.modifiers['Cloth']
-        if cloth:
+        if sim:
             cloth_mod.render = True
             cloth_mod.realtime = True
-        pointcache_generic_setup(cloth_mod.point_cache, frame_start, frame_end)
+        pointcache_generic_setup(cloth_mod.point_cache, frame_start, frame_end, pre_roll)
         cloth_mod.point_cache.name = "shaman_cloth_" + base_name
         pointcache_generic_bake(cloth_mod.point_cache)
         
@@ -342,7 +356,7 @@
     #for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-shaman_beard"]:
     #    # psys = obj.particle_systems["beard_hair_pa"] # XXX, fixme
     #    psys = obj.particle_systems[0]
-    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end)
+    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end, pre_roll)
     #    psys.hair_dynamics = sim
     #    #psys.settings.mass = 0.01 # was 0.01
         
@@ -350,36 +364,39 @@
     # if obj:
     #for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-shaman_mo_right"]:
     #    psys = obj.particle_systems["mo_right"]
-    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end)
+    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end, pre_roll)
     #    psys.hair_dynamics = sim
 
     # obj = bpy.data.objects.get("GEO-shaman_mo_left") # mustache left
     # if obj:
     #for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-shaman_mo_left"]:
     #    psys = obj.particle_systems["mo_left"]
-    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end)
+    #    pointcache_generic_setup(psys.point_cache, frame_start, frame_end, pre_roll)
     #    psys.hair_dynamics = sim
     
-    
-        
-        
 
+def setup_dragon_baby(baked=False, sim=False, pre_roll=10):    
+    base_dir, base_name, frame_start, frame_end, object_items = scene_info()
+
     # ---- Dragon Baby ---- #
     # change GEO-wing_sim
     for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-babydragon"]:
-        if cloth:
-                obj.modifiers['MeshDeform'].render = True
-                obj.modifiers['MeshDeform'].realtime = True
+        if sim:
+            mod = obj.modifiers['MeshDeform']
+            mod.render = True
+            mod.realtime = True
 
-                obj.modifiers['linear'].multi_modifier = True
-                obj.modifiers['linear'].vertex_group = "wing_sim"
+            mod = obj.modifiers['linear']
+            mod.multi_modifier = True
+            mod.vertex_group = "wing_sim"
 
     for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-wing_sim"]:
         mod = obj.modifiers["Cloth"]
-        if cloth:
+        if sim:
             mod.realtime = True
             mod.render = True
-        pointcache_generic_setup(mod.point_cache, frame_start, frame_end)
+
+        pointcache_generic_setup(mod.point_cache, frame_start, frame_end, pre_roll)
         mod.point_cache.name = "dragon_baby_" + base_name
         pointcache_generic_bake(mod.point_cache)
 
@@ -390,33 +407,38 @@
             mod.point_cache.frame_start = frame_start - 1
         elif base_name.startswith("04.1c"):
             mod.point_cache.frame_start = frame_start - 3
-            
+
+
+def setup_dragon_adult(baked=False, sim=False, pre_roll=10):    
+    base_dir, base_name, frame_start, frame_end, object_items = scene_info()
     
-    
-    
     # ---- Dragon Adult ---- #
     # change GEO-wing_a_sim
     for obj in [obj for obj_name, obj in object_items if obj_name == "GEO-dragonA_body"]:
-        if cloth:
-                obj.modifiers['MeshDeform'].render = True
-                obj.modifiers['MeshDeform'].realtime = True
-                obj.modifiers['MeshDeform'].vertex_group = ""
-                
+        if sim:
+            mod = obj.modifiers['MeshDeform']
+            mod.render = True
+            mod.realtime = True

@@ Diff output truncated at 10240 characters. @@


More information about the Durian-svn mailing list