Hello,
Truly enjoying this tutorial, thank you cgcookie and Kent!
I did not have a sculpt of human head laying around so I used the blender monkey. Also played a bit with cycles and shaders as I try learn the program.
For me the biggest challenges sculpting were:
- viewport performance, enabling VBO's in USER PREFERENCE made a HUGE DIFFERENCE.
- sculpt performance. Made a little script(below) that decimates and optimizes mesh.
- hotkeys
I would like to ask tutor the following:
- If i have SMOOTH STROKE(lazy stroke/mouse) enabled and i hold Shift(for Smooth brush) then annoyingly smooth stroke is enabled there as well. I really like how in ZB as it's treated as separate brush with its own properties. Ideally i would like SHIFT+LEFT CLICK to trigger both SMOOTH BRUSH as well as custom python script (that toggles) but as I experimented, i failed to trigger two actions with same hotkey. Is that even possible? - this would be most elegant solution. What are the alternatives? Modal python script? (would that not be too slow)
- Similar to ZB is there a way to create pie_menu(or any other type) for BRUSH SELECTION instead of relying only on hotkeys or going to menu all the time?
Sharing some scripts:
#// SmoothStroke (lazymouse) toggle for active brush (make an OP with it and bind to hotkey - e.g L like in ZB):
bpy.context.tool_settings.sculpt.brush.use_smooth_stroke= not bpy.context.tool_settings.sculpt.brush.use_smooth_stroke
#// Decimate and optimize mesh script
import bpy
class nwDecimate(bpy.types.Operator):
"""Tooltip Sculpt Decimate"""
bl_idname = "nw.decimate"
bl_label = "nw Decimate Mesh"
def invoke(self, context, abc):
print ("Decimating")
bpy.ops.ed.undo_push(message="Add an undo step *function may be moved*")
if( bpy.context.sculpt_object.use_dynamic_topology_sculpting): bpy.ops.sculpt.dynamic_topology_toggle()
bpy.ops.object.modifier_add(type='DECIMATE')
bpy.context.object.modifiers["Decimate"].ratio = 0.7
bpy.context.object.modifiers["Decimate"].use_collapse_triangulate = True
bpy.ops.object.modifier_apply(apply_as='DATA', modifier="Decimate")
if(not bpy.context.sculpt_object.use_dynamic_topology_sculpting): bpy.ops.sculpt.dynamic_topology_toggle()
bpy.ops.sculpt.optimize()
return {'FINISHED'}
def register():
bpy.utils.register_class(nwDecimate)
def unregister():
bpy.utils.unregister_class(nwDecimate)
if __name__ == "__main__":
register()