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:
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user