[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