New hair child options:

* Renamed children to "simple" and "interpolated" as this is
  easier to explain and more descriptive than "from particles"
  and "from faces".
* Also shuffled the child ui around a bit to make it clearer.
* Child seed parameter allows to change the seed for children
  independent of the main seed value.
* Long hair mode for interpolated children:
  - Making even haircuts was impossible before as the child
    strand lengths were even, but their root coordinates were
    not similar in relation to the parent strands.
  - The "long hair" option uses the tips of the parent strands
    to calculate the child strand tips.
* Hair parting options:
  - Hair parting can now be calculated dynamically on the fly
    when in 2.49 there was a cumbersome way of using emitter mesh
    seams to define parting lines.
  - For long hair parting can be created by a tip distance/root
    distance threshold. For example setting the minimum threshold
    to 2.0 creates partings between children belonging to parents
    with tip distance of three times the root distance
    ((1+2)*root distance).
  - For short hair the parting thresholds are used as angles
    between the root directions.
* New kink parameters:
  - Kink flatness calculates kink into a shape that would have
    been achieved with an actual curling iron.
  - Kink amplitude clump determines how much the main clump value
    effects the kink amplitude.
  - The beginning of kink is now smoothed to make the hair look
    more natural close to the roots.
* Some bugs fixed along the way too:
  - Child parent's were not determined correctly in some cases.
  - Children didn't always look correct in particle mode.
  - Changing child parameters caused actual particles to be
    recalculated.
* Also cleaned up some deprecated code.

All in all there should be no real changes to how old files look
(except perhaps a bit better!), but the new options should make
hair/fur creation a bit more enjoyable. I'll try to make a video
demonstrating the new stuff shortly.
This commit is contained in:
2011-01-07 11:24:34 +00:00
parent 7ad97b04b7
commit 29efbf8a04
7 changed files with 535 additions and 587 deletions

View File

@@ -739,7 +739,7 @@ class PARTICLE_PT_render(ParticleButtonsPanel, bpy.types.Panel):
row = layout.row()
col = row.column()
if part.type == 'HAIR' and part.use_strand_primitive == True and part.child_type == 'FACES':
if part.type == 'HAIR' and part.use_strand_primitive == True and part.child_type == 'INTERPOLATED':
layout.prop(part, "use_simplify")
if part.use_simplify == True:
row = layout.row()
@@ -925,60 +925,76 @@ class PARTICLE_PT_children(ParticleButtonsPanel, bpy.types.Panel):
col.prop(part, "child_nbr", text="Display")
col.prop(part, "rendered_child_count", text="Render")
col = row.column(align=True)
if part.child_type == 'FACES':
if part.child_type == 'INTERPOLATED':
col = row.column()
col.prop(psys, "child_seed", text="Seed")
col.prop(part, "virtual_parents", slider=True)
col.prop(part, "create_long_hair_children")
else:
col.prop(part, "child_radius", text="Radius")
col.prop(part, "child_roundness", text="Roundness", slider=True)
col = row.column(align=True)
col.prop(part, "child_size", text="Size")
col.prop(part, "child_size_random", text="Random")
layout.row().label(text="Effects:")
split = layout.split()
row = layout.row()
col = split.column()
col.label(text="Effects:")
col = row.column(align=True)
col.prop(part, "clump_factor", slider=True)
col.prop(part, "clump_shape", slider=True)
sub = col.column(align=True)
sub.prop(part, "clump_factor", slider=True)
sub.prop(part, "clump_shape", slider=True)
sub = col.column(align=True)
sub.prop(part, "child_length", slider=True)
sub.prop(part, "child_length_threshold", slider=True)
col = row.column(align=True)
col.prop(part, "roughness_endpoint")
col.prop(part, "roughness_end_shape")
if part.child_type == 'SIMPLE':
sub = col.column(align=True)
sub.prop(part, "child_radius", text="Radius")
sub.prop(part, "child_roundness", text="Roundness", slider=True)
sub.prop(psys, "child_seed", text="Seed")
elif part.virtual_parents > 0.0:
sub = col.column(align=True)
sub.label(text="Parting not")
sub.label(text="available with")
sub.label(text="virtual parents.")
else:
sub = col.column(align=True)
sub.prop(part, "child_parting_factor", text="Parting", slider=True)
sub.prop(part, "child_parting_min", text="Min")
sub.prop(part, "child_parting_max", text="Max")
row = layout.row()
col = split.column()
col.label(text="Roughness:")
col = row.column(align=True)
col.prop(part, "roughness_1")
col.prop(part, "roughness_1_size")
sub = col.column(align=True)
sub.prop(part, "roughness_1", text="Uniform")
sub.prop(part, "roughness_1_size", text="Size")
col = row.column(align=True)
col.prop(part, "roughness_2")
col.prop(part, "roughness_2_size")
col.prop(part, "roughness_2_threshold", slider=True)
sub = col.column(align=True)
sub.prop(part, "roughness_endpoint", "Endpoint")
sub.prop(part, "roughness_end_shape")
row = layout.row()
col = row.column(align=True)
col.prop(part, "child_length", slider=True)
col.prop(part, "child_length_threshold", slider=True)
col = row.column(align=True)
col.label(text="Space reserved for")
col.label(text="hair parting controls")
sub = col.column(align=True)
sub.prop(part, "roughness_2", text="Random")
sub.prop(part, "roughness_2_size", text="Size")
sub.prop(part, "roughness_2_threshold", slider=True)
layout.row().label(text="Kink:")
layout.row().prop(part, "kink", expand=True)
split = layout.split()
split.active = part.kink != 'NO'
col = split.column()
col.prop(part, "kink_amplitude")
col.prop(part, "kink_frequency")
sub = col.column(align=True)
sub.prop(part, "kink_amplitude")
sub.prop(part, "kink_amplitude_clump", text="Clump", slider=True)
col.prop(part, "kink_flat", slider=True)
col = split.column()
col.prop(part, "kink_shape", slider=True)
sub = col.column(align=True)
sub.prop(part, "kink_frequency")
sub.prop(part, "kink_shape", slider=True)
class PARTICLE_PT_field_weights(ParticleButtonsPanel, bpy.types.Panel):