Skip to content
Snippets Groups Projects
Commit c8446ec9 authored by Brendon Murphy's avatar Brendon Murphy
Browse files

adding particle hair lab to contrib

parent 7f04d12c
Branches
Tags
No related merge requests found
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####
bl_info = {
"name": "Grass Lab",
"author": "Ondrej Raha(lokhorn), meta-androcto",
"version": (0,5),
"blender": (2, 6, 0),
"api": 42149,
"location": "View3D > Tool Shelf > Grass Preset Panel",
"description": "Creates particle grass with material",
"warning": "",
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/Object/grass_Lab",
"tracker_url": "",
"category": "Object"}
import bpy
from bpy.props import *
# Returns the action we want to take
def getActionToDo(obj):
if not obj or obj.type != 'MESH':
return 'NOT_OBJ_DO_NOTHING'
elif obj.type == 'MESH':
return 'GENERATE'
else:
return "DO_NOTHING"
# TO DO
"""
class saveSelectionPanel(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_label = "Selection Save"
bl_options = {"DEFAULT_CLOSED"}
bl_context = "particlemode"
def draw(self, context):
layout = self.layout
col = layout.column(align=True)
col.operator("save.selection", text="Save Selection 1")
"""
######GRASS########################
class grassLabPanel(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_label = "Grass Lab"
bl_context = "objectmode"
def draw(self, context):
active_obj = bpy.context.active_object
active_scn = bpy.context.scene.name
layout = self.layout
col = layout.column(align=True)
WhatToDo = getActionToDo(active_obj)
if WhatToDo == "GENERATE":
col.operator("grass.generate_grass", text="Create grass")
col.prop(context.scene, "grass_type")
else:
col.label(text="Select mesh object")
if active_scn == "TestgrassScene":
col.operator("grass.switch_back", text="Switch back to scene")
else:
col.operator("grass.test_scene", text="Create Test Scene")
# TO DO
"""
class saveSelection(bpy.types.Operator):
bl_idname = "save.selection"
bl_label = "Save Selection"
bl_description = "Save selected particles"
bl_register = True
bl_undo = True
def execute(self, context):
return {"FINISHED"}
"""
class testScene1(bpy.types.Operator):
bl_idname = "grass.switch_back"
bl_label = "Switch back to scene"
bl_description = "If you want keep this scene, switch scene in info window"
bl_register = True
bl_undo = True
def execute(self, context):
scene = bpy.context.scene
bpy.data.scenes.remove(scene)
return {"FINISHED"}
class testScene2(bpy.types.Operator):
bl_idname = "grass.test_scene"
bl_label = "Create test scene"
bl_description = "You can switch scene in info panel"
bl_register = True
bl_undo = True
def execute(self, context):
# add new scene
bpy.ops.scene.new(type="NEW")
scene = bpy.context.scene
scene.name = "TestgrassScene"
# render settings
render = scene.render
render.resolution_x = 1920
render.resolution_y = 1080
render.resolution_percentage = 50
# add new world
world = bpy.data.worlds.new("grassWorld")
scene.world = world
world.use_sky_blend = True
world.use_sky_paper = True
world.horizon_color = (0.004393,0.02121,0.050)
world.zenith_color = (0.03335,0.227,0.359)
# add text
bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
text = bpy.context.active_object
text.scale = (0.05,0.05,0.05)
text.data.body = "Grass Lab"
# add material to text
textMaterial = bpy.data.materials.new('textMaterial')
text.data.materials.append(textMaterial)
textMaterial.use_shadeless = True
# add camera
bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
cam = bpy.context.active_object.data
cam.lens = 50
cam.draw_size = 0.1
# add spot lamp
bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
lamp1 = bpy.context.active_object.data
lamp1.name = "Key Light"
lamp1.energy = 1.5
lamp1.distance = 1.5
lamp1.shadow_buffer_soft = 5
lamp1.shadow_buffer_size = 8192
lamp1.shadow_buffer_clip_end = 1.5
lamp1.spot_blend = 0.5
# add spot lamp2
bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
lamp2 = bpy.context.active_object.data
lamp2.name = "Fill Light"
lamp2.color = (0.874,0.874,1)
lamp2.energy = 0.5
lamp2.distance = 1.5
lamp2.shadow_buffer_soft = 5
lamp2.shadow_buffer_size = 4096
lamp2.shadow_buffer_clip_end = 1.5
lamp2.spot_blend = 0.5
# light Rim
"""
# add spot lamp3
bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
lamp3 = bpy.context.active_object.data
lamp3.name = "Rim Light"
lamp3.color = (0.194,0.477,1)
lamp3.energy = 3
lamp3.distance = 1.5
lamp3.shadow_buffer_soft = 5
lamp3.shadow_buffer_size = 4096
lamp3.shadow_buffer_clip_end = 1.5
lamp3.spot_blend = 0.5
"""
# add sphere
# add sphere
bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
bpy.ops.object.shade_smooth()
return {"FINISHED"}
class Generategrass(bpy.types.Operator):
bl_idname = "grass.generate_grass"
bl_label = "Generate grass"
bl_description = "Create a grass"
bl_register = True
bl_undo = True
def execute(self, context):
# Make variable that is the current .blend file main data blocks
blend_data = context.blend_data
ob = bpy.context.active_object
scene = context.scene
######################################################################
########################Test screen grass########################
if scene.grass_type == '0':
###############Create New Material##################
# add new material
grassMaterial = bpy.data.materials.new('greengrassMat')
ob.data.materials.append(grassMaterial)
#Material settings
grassMaterial.preview_render_type = "HAIR"
grassMaterial.diffuse_color = (0.09710, 0.288, 0.01687)
grassMaterial.specular_color = (0.604, 0.465, 0.136)
grassMaterial.specular_intensity = 0.3
grassMaterial.ambient = 0
grassMaterial.use_cubic = True
grassMaterial.use_transparency = True
grassMaterial.alpha = 0
grassMaterial.use_transparent_shadows = True
#strand
grassMaterial.strand.use_blender_units = True
grassMaterial.strand.root_size = 0.00030
grassMaterial.strand.tip_size = 0.00010
grassMaterial.strand.size_min = 0.7
grassMaterial.strand.width_fade = 0.1
grassMaterial.strand.shape = 0.061
grassMaterial.strand.blend_distance = 0.001
# add texture
grassTex = bpy.data.textures.new("greengrassTex", type='BLEND')
grassTex.use_preview_alpha = True
grassTex.use_color_ramp = True
ramp = grassTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.114,0.375,0.004025,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.267,0.155,0.02687,0]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.281,0.598,0.03157,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.119,0.528,0.136,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.247,0.713,0.006472,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.01943,0.163,0.01242,0.64]
# add texture to material
MTex = grassMaterial.texture_slots.add()
MTex.texture = grassTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
############### Create Particles ##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
grassParticles = bpy.context.object.particle_systems.active
grassParticles.name = "greengrassPar"
grassParticles.settings.type = "HAIR"
grassParticles.settings.use_advanced_hair = True
grassParticles.settings.count = 500
grassParticles.settings.normal_factor = 0.05
grassParticles.settings.factor_random = 0.001
grassParticles.settings.use_dynamic_rotation = True
grassParticles.settings.material = NumberOfMaterials
grassParticles.settings.use_strand_primitive = True
grassParticles.settings.use_hair_bspline = True
grassParticles.settings.render_step = 5
grassParticles.settings.length_random = 0.5
grassParticles.settings.draw_step = 5
# children
grassParticles.settings.rendered_child_count = 50
grassParticles.settings.child_type = "INTERPOLATED"
grassParticles.settings.child_length = 0.250
grassParticles.settings.create_long_hair_children = True
grassParticles.settings.clump_shape = 0.074
grassParticles.settings.clump_factor = 0.55
grassParticles.settings.roughness_endpoint = 0.080
grassParticles.settings.roughness_end_shape = 0.80
grassParticles.settings.roughness_2 = 0.043
grassParticles.settings.roughness_2_size = 0.230
######################################################################
###################### Field Grass ########################
if scene.grass_type == '1':
###############Create New Material##################
# add new material
grassMaterial = bpy.data.materials.new('fieldgrassMat')
ob.data.materials.append(grassMaterial)
#Material settings
grassMaterial.preview_render_type = "HAIR"
grassMaterial.diffuse_color = (0.229, 0.800, 0.010)
grassMaterial.specular_color = (0.010, 0.06072, 0.000825)
grassMaterial.specular_intensity = 0.3
grassMaterial.specular_hardness = 100
grassMaterial.use_specular_ramp = True
ramp = grassMaterial.specular_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.0356,0.0652,0.009134,0]
rampElements[1].position = 1
rampElements[1].color = [0.352,0.750,0.231,1]
rampElement1 = rampElements.new(0.255)
rampElement1.color = [0.214,0.342,0.0578,0.31]
rampElement2 = rampElements.new(0.594)
rampElement2.color = [0.096,0.643,0.0861,0.72]
grassMaterial.ambient = 0
grassMaterial.use_cubic = True
grassMaterial.use_transparency = True
grassMaterial.alpha = 0
grassMaterial.use_transparent_shadows = True
#strand
grassMaterial.strand.use_blender_units = True
grassMaterial.strand.root_size = 0.00030
grassMaterial.strand.tip_size = 0.00015
grassMaterial.strand.size_min = 0.450
grassMaterial.strand.width_fade = 0.1
grassMaterial.strand.shape = 0.02
grassMaterial.strand.blend_distance = 0.001
# add texture
grassTex = bpy.data.textures.new("feildgrassTex", type='BLEND')
grassTex.name = "feildgrassTex"
grassTex.use_preview_alpha = True
grassTex.use_color_ramp = True
ramp = grassTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.01467,0.005307,0.00316,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.0272,0.01364,0.01013,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.04445,0.02294,0.01729,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.04092,0.0185,0.01161,0.64]
# add texture to material
MTex = grassMaterial.texture_slots.add()
MTex.texture = grassTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
grassParticles = bpy.context.object.particle_systems.active
grassParticles.name = "fieldgrassPar"
grassParticles.settings.type = "HAIR"
grassParticles.settings.use_emit_random = True
grassParticles.settings.use_even_distribution = True
grassParticles.settings.use_advanced_hair = True
grassParticles.settings.count = 2000
#Particle settings Velocity
grassParticles.settings.normal_factor = 0.060
grassParticles.settings.factor_random = 0.045
grassParticles.settings.use_dynamic_rotation = False
grassParticles.settings.brownian_factor = 0.070
grassParticles.settings.damping = 0.160
grassParticles.settings.material = NumberOfMaterials
# strands
grassParticles.settings.use_strand_primitive = True
grassParticles.settings.use_hair_bspline = True
grassParticles.settings.render_step = 7
grassParticles.settings.length_random = 1.0
grassParticles.settings.draw_step = 2
# children
grassParticles.settings.child_type = "INTERPOLATED"
grassParticles.settings.child_length = 0.160
grassParticles.settings.create_long_hair_children = False
grassParticles.settings.clump_factor = 0.000
grassParticles.settings.clump_shape = 0.000
grassParticles.settings.roughness_endpoint = 0.000
grassParticles.settings.roughness_end_shape = 1
grassParticles.settings.roughness_2 = 0.200
grassParticles.settings.roughness_2_size = 0.230
######################################################################
########################Short Clumpped grass##########################
elif scene.grass_type == '2':
###############Create New Material##################
# add new material
grassMaterial = bpy.data.materials.new('clumpygrassMat')
ob.data.materials.append(grassMaterial)
#Material settings
grassMaterial.preview_render_type = "HAIR"
grassMaterial.diffuse_color = (0.01504, 0.05222, 0.007724)
grassMaterial.specular_color = (0.02610, 0.196, 0.04444)
grassMaterial.specular_intensity = 0.5
grassMaterial.specular_hardness = 100
grassMaterial.ambient = 0
grassMaterial.use_cubic = True
grassMaterial.use_transparency = True
grassMaterial.alpha = 0
grassMaterial.use_transparent_shadows = True
#strand
grassMaterial.strand.use_blender_units = True
grassMaterial.strand.root_size = 0.000315
grassMaterial.strand.tip_size = 0.00020
grassMaterial.strand.size_min = 0.2
grassMaterial.strand.width_fade = 0.1
grassMaterial.strand.shape = -0.900
grassMaterial.strand.blend_distance = 0.001
# add texture
grassTex = bpy.data.textures.new("clumpygrasstex", type='BLEND')
grassTex.use_preview_alpha = True
grassTex.use_color_ramp = True
ramp = grassTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.004025,0.002732,0.002428,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.141,0.622,0.107,0.2]
rampElement1 = rampElements.new(0.202)
rampElement1.color = [0.01885,0.2177,0.01827,0.65]
rampElement2 = rampElements.new(0.499)
rampElement2.color = [0.114,0.309,0.09822,0.87]
rampElement3 = rampElements.new(0.828)
rampElement3.color = [0.141,0.427,0.117,0.64]
# add texture to material
MTex = grassMaterial.texture_slots.add()
MTex.texture = grassTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
grassParticles = bpy.context.object.particle_systems.active
grassParticles.name = "clumpygrass"
grassParticles.settings.type = "HAIR"
grassParticles.settings.use_advanced_hair = True
grassParticles.settings.hair_step = 2
grassParticles.settings.count = 250
grassParticles.settings.normal_factor = 0.0082
grassParticles.settings.tangent_factor = 0.001
grassParticles.settings.tangent_phase = 0.250
grassParticles.settings.factor_random = 0.001
grassParticles.settings.use_dynamic_rotation = True
grassParticles.settings.material = NumberOfMaterials
grassParticles.settings.use_strand_primitive = True
grassParticles.settings.use_hair_bspline = True
grassParticles.settings.render_step = 3
grassParticles.settings.length_random = 0.3
grassParticles.settings.draw_step = 3
# children
grassParticles.settings.child_type = "INTERPOLATED"
grassParticles.settings.child_length = 0.667
grassParticles.settings.child_length_threshold = 0.111
grassParticles.settings.rendered_child_count = 200
grassParticles.settings.virtual_parents = 1
grassParticles.settings.clump_factor = 0.425
grassParticles.settings.clump_shape = -0.999
grassParticles.settings.roughness_endpoint = 0.003
grassParticles.settings.roughness_end_shape = 5
return {'FINISHED'}
####
######### HAIR LAB ##########
####
class HairLabPanel(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_label = "Hair Lab"
bl_context = "objectmode"
def draw(self, context):
active_obj = bpy.context.active_object
active_scn = bpy.context.scene.name
layout = self.layout
col = layout.column(align=True)
WhatToDo = getActionToDo(active_obj)
if WhatToDo == "GENERATE":
col.operator("hair.generate_hair", text="Create Hair")
col.prop(context.scene, "hair_type")
else:
col.label(text="Select mesh object")
if active_scn == "TestHairScene":
col.operator("hair.switch_back", text="Switch back to scene")
else:
col.operator("hair.test_scene", text="Create Test Scene")
# TO DO
"""
class saveSelection(bpy.types.Operator):
bl_idname = "save.selection"
bl_label = "Save Selection"
bl_description = "Save selected particles"
bl_register = True
bl_undo = True
def execute(self, context):
return {"FINISHED"}
"""
class testScene3(bpy.types.Operator):
bl_idname = "hair.switch_back"
bl_label = "Switch back to scene"
bl_description = "If you want keep this scene, switch scene in info window"
bl_register = True
bl_undo = True
def execute(self, context):
scene = bpy.context.scene
bpy.data.scenes.remove(scene)
return {"FINISHED"}
class testScene4(bpy.types.Operator):
bl_idname = "hair.test_scene"
bl_label = "Create test scene"
bl_description = "You can switch scene in info panel"
bl_register = True
bl_undo = True
def execute(self, context):
# add new scene
bpy.ops.scene.new(type="NEW")
scene = bpy.context.scene
scene.name = "TestHairScene"
# render settings
render = scene.render
render.resolution_x = 1920
render.resolution_y = 1080
render.resolution_percentage = 50
# add new world
world = bpy.data.worlds.new("HairWorld")
scene.world = world
world.use_sky_blend = True
world.use_sky_paper = True
world.horizon_color = (0.004393,0.02121,0.050)
world.zenith_color = (0.03335,0.227,0.359)
# add text
bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
text = bpy.context.active_object
text.scale = (0.05,0.05,0.05)
text.data.body = "Hair Lab"
# add material to text
textMaterial = bpy.data.materials.new('textMaterial')
text.data.materials.append(textMaterial)
textMaterial.use_shadeless = True
# add camera
bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
cam = bpy.context.active_object.data
cam.lens = 50
cam.draw_size = 0.1
# add spot lamp
bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
lamp1 = bpy.context.active_object.data
lamp1.name = "Key Light"
lamp1.energy = 1.5
lamp1.distance = 1.5
lamp1.shadow_buffer_soft = 5
lamp1.shadow_buffer_size = 8192
lamp1.shadow_buffer_clip_end = 1.5
lamp1.spot_blend = 0.5
# add spot lamp2
bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
lamp2 = bpy.context.active_object.data
lamp2.name = "Fill Light"
lamp2.color = (0.874,0.874,1)
lamp2.energy = 0.5
lamp2.distance = 1.5
lamp2.shadow_buffer_soft = 5
lamp2.shadow_buffer_size = 4096
lamp2.shadow_buffer_clip_end = 1.5
lamp2.spot_blend = 0.5
# light Rim
"""
# add spot lamp3
bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
lamp3 = bpy.context.active_object.data
lamp3.name = "Rim Light"
lamp3.color = (0.194,0.477,1)
lamp3.energy = 3
lamp3.distance = 1.5
lamp3.shadow_buffer_soft = 5
lamp3.shadow_buffer_size = 4096
lamp3.shadow_buffer_clip_end = 1.5
lamp3.spot_blend = 0.5
"""
# add sphere
bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
bpy.ops.object.shade_smooth()
return {"FINISHED"}
class GenerateHair(bpy.types.Operator):
bl_idname = "hair.generate_hair"
bl_label = "Generate Hair"
bl_description = "Create a Hair"
bl_register = True
bl_undo = True
def execute(self, context):
# Make variable that is the current .blend file main data blocks
blend_data = context.blend_data
ob = bpy.context.active_object
scene = context.scene
######################################################################
########################Long Red Straight Hair########################
if scene.hair_type == '0':
###############Create New Material##################
# add new material
hairMaterial = bpy.data.materials.new('LongRedStraightHairMat')
ob.data.materials.append(hairMaterial)
#Material settings
hairMaterial.preview_render_type = "HAIR"
hairMaterial.diffuse_color = (0.287, 0.216, 0.04667)
hairMaterial.specular_color = (0.604, 0.465, 0.136)
hairMaterial.specular_intensity = 0.3
hairMaterial.ambient = 0
hairMaterial.use_cubic = True
hairMaterial.use_transparency = True
hairMaterial.alpha = 0
hairMaterial.use_transparent_shadows = True
#strand
hairMaterial.strand.use_blender_units = True
hairMaterial.strand.root_size = 0.00030
hairMaterial.strand.tip_size = 0.00010
hairMaterial.strand.size_min = 0.7
hairMaterial.strand.width_fade = 0.1
hairMaterial.strand.shape = 0.061
hairMaterial.strand.blend_distance = 0.001
# add texture
hairTex = bpy.data.textures.new("LongRedStraightHairTex", type='BLEND')
hairTex.use_preview_alpha = True
hairTex.use_color_ramp = True
ramp = hairTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.114,0.05613,0.004025,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.267,0.155,0.02687,0]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.281,0.168,0.03157,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.288,0.135,0.006242,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.247,0.113,0.006472,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.253,0.09919,0.01242,0.64]
# add texture to material
MTex = hairMaterial.texture_slots.add()
MTex.texture = hairTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
hairParticles = bpy.context.object.particle_systems.active
hairParticles.name = "LongRedStraightHairPar"
hairParticles.settings.type = "HAIR"
hairParticles.settings.use_advanced_hair = True
hairParticles.settings.count = 500
hairParticles.settings.normal_factor = 0.05
hairParticles.settings.factor_random = 0.001
hairParticles.settings.use_dynamic_rotation = True
hairParticles.settings.material = NumberOfMaterials
hairParticles.settings.use_strand_primitive = True
hairParticles.settings.use_hair_bspline = True
hairParticles.settings.render_step = 5
hairParticles.settings.length_random = 0.5
hairParticles.settings.draw_step = 5
# children
hairParticles.settings.child_type = "INTERPOLATED"
hairParticles.settings.create_long_hair_children = True
hairParticles.settings.clump_factor = 0.55
hairParticles.settings.roughness_endpoint = 0.005
hairParticles.settings.roughness_end_shape = 5
hairParticles.settings.roughness_2 = 0.003
hairParticles.settings.roughness_2_size = 0.230
######################################################################
########################Long Brown Curl Hair##########################
if scene.hair_type == '1':
###############Create New Material##################
# add new material
hairMaterial = bpy.data.materials.new('LongBrownCurlHairMat')
ob.data.materials.append(hairMaterial)
#Material settings
hairMaterial.preview_render_type = "HAIR"
hairMaterial.diffuse_color = (0.662, 0.518, 0.458)
hairMaterial.specular_color = (0.351, 0.249, 0.230)
hairMaterial.specular_intensity = 0.3
hairMaterial.specular_hardness = 100
hairMaterial.use_specular_ramp = True
ramp = hairMaterial.specular_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.0356,0.0152,0.009134,0]
rampElements[1].position = 1
rampElements[1].color = [0.352,0.250,0.231,1]
rampElement1 = rampElements.new(0.255)
rampElement1.color = [0.214,0.08244,0.0578,0.31]
rampElement2 = rampElements.new(0.594)
rampElement2.color = [0.296,0.143,0.0861,0.72]
hairMaterial.ambient = 0
hairMaterial.use_cubic = True
hairMaterial.use_transparency = True
hairMaterial.alpha = 0
hairMaterial.use_transparent_shadows = True
#strand
hairMaterial.strand.use_blender_units = True
hairMaterial.strand.root_size = 0.00030
hairMaterial.strand.tip_size = 0.00015
hairMaterial.strand.size_min = 0.450
hairMaterial.strand.width_fade = 0.1
hairMaterial.strand.shape = 0.02
hairMaterial.strand.blend_distance = 0.001
# add texture
hairTex = bpy.data.textures.new("HairTex", type='BLEND')
hairTex.name = "LongBrownCurlHairTex"
hairTex.use_preview_alpha = True
hairTex.use_color_ramp = True
ramp = hairTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.01467,0.005307,0.00316,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.0272,0.01364,0.01013,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.04445,0.02294,0.01729,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.04092,0.0185,0.01161,0.64]
# add texture to material
MTex = hairMaterial.texture_slots.add()
MTex.texture = hairTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
hairParticles = bpy.context.object.particle_systems.active
hairParticles.name = "LongBrownCurlHairPar"
hairParticles.settings.type = "HAIR"
hairParticles.settings.use_advanced_hair = True
hairParticles.settings.count = 500
hairParticles.settings.normal_factor = 0.05
hairParticles.settings.factor_random = 0.001
hairParticles.settings.use_dynamic_rotation = True
hairParticles.settings.material = NumberOfMaterials
hairParticles.settings.use_strand_primitive = True
hairParticles.settings.use_hair_bspline = True
hairParticles.settings.render_step = 7
hairParticles.settings.length_random = 0.5
hairParticles.settings.draw_step = 5
# children
hairParticles.settings.child_type = "INTERPOLATED"
hairParticles.settings.create_long_hair_children = True
hairParticles.settings.clump_factor = 0.523
hairParticles.settings.clump_shape = 0.383
hairParticles.settings.roughness_endpoint = 0.002
hairParticles.settings.roughness_end_shape = 5
hairParticles.settings.roughness_2 = 0.003
hairParticles.settings.roughness_2_size = 2
hairParticles.settings.kink = "CURL"
hairParticles.settings.kink_amplitude = 0.007597
hairParticles.settings.kink_frequency = 6
hairParticles.settings.kink_shape = 0.4
hairParticles.settings.kink_flat = 0.8
######################################################################
########################Short Dark Hair##########################
elif scene.hair_type == '2':
###############Create New Material##################
# add new material
hairMaterial = bpy.data.materials.new('ShortDarkHairMat')
ob.data.materials.append(hairMaterial)
#Material settings
hairMaterial.preview_render_type = "HAIR"
hairMaterial.diffuse_color = (0.560, 0.536, 0.506)
hairMaterial.specular_color = (0.196, 0.177, 0.162)
hairMaterial.specular_intensity = 0.5
hairMaterial.specular_hardness = 100
hairMaterial.ambient = 0
hairMaterial.use_cubic = True
hairMaterial.use_transparency = True
hairMaterial.alpha = 0
hairMaterial.use_transparent_shadows = True
#strand
hairMaterial.strand.use_blender_units = True
hairMaterial.strand.root_size = 0.0002
hairMaterial.strand.tip_size = 0.0001
hairMaterial.strand.size_min = 0.3
hairMaterial.strand.width_fade = 0.1
hairMaterial.strand.shape = 0
hairMaterial.strand.blend_distance = 0.001
# add texture
hairTex = bpy.data.textures.new("ShortDarkHair", type='BLEND')
hairTex.use_preview_alpha = True
hairTex.use_color_ramp = True
ramp = hairTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.004025,0.002732,0.002428,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.141,0.122,0.107,0.2]
rampElement1 = rampElements.new(0.202)
rampElement1.color = [0.01885,0.0177,0.01827,0.65]
rampElement2 = rampElements.new(0.499)
rampElement2.color = [0.114,0.109,0.09822,0.87]
rampElement3 = rampElements.new(0.828)
rampElement3.color = [0.141,0.127,0.117,0.64]
# add texture to material
MTex = hairMaterial.texture_slots.add()
MTex.texture = hairTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
hairParticles = bpy.context.object.particle_systems.active
hairParticles.name = "ShortDarkHair"
hairParticles.settings.type = "HAIR"
hairParticles.settings.use_advanced_hair = True
hairParticles.settings.hair_step = 2
hairParticles.settings.count = 450
hairParticles.settings.normal_factor = 0.007
hairParticles.settings.factor_random = 0.001
hairParticles.settings.use_dynamic_rotation = True
hairParticles.settings.material = NumberOfMaterials
hairParticles.settings.use_strand_primitive = True
hairParticles.settings.use_hair_bspline = True
hairParticles.settings.render_step = 3
hairParticles.settings.length_random = 0.3
hairParticles.settings.draw_step = 3
# children
hairParticles.settings.child_type = "INTERPOLATED"
hairParticles.settings.rendered_child_count = 200
hairParticles.settings.virtual_parents = 1
hairParticles.settings.clump_factor = 0.425
hairParticles.settings.clump_shape = 0.1
hairParticles.settings.roughness_endpoint = 0.003
hairParticles.settings.roughness_end_shape = 5
return {'FINISHED'}
####
######## FUR LAB ########
####
class FurLabPanel(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'TOOLS'
bl_label = "Fur Lab"
bl_context = "objectmode"
def draw(self, context):
active_obj = bpy.context.active_object
active_scn = bpy.context.scene.name
layout = self.layout
col = layout.column(align=True)
WhatToDo = getActionToDo(active_obj)
if WhatToDo == "GENERATE":
col.operator("fur.generate_fur", text="Create Fur")
col.prop(context.scene, "fur_type")
else:
col.label(text="Select mesh object")
if active_scn == "TestFurScene":
col.operator("hair.switch_back", text="Switch back to scene")
else:
col.operator("fur.test_scene", text="Create Test Scene")
# TO DO
"""
class saveSelection(bpy.types.Operator):
bl_idname = "save.selection"
bl_label = "Save Selection"
bl_description = "Save selected particles"
bl_register = True
bl_undo = True
def execute(self, context):
return {"FINISHED"}
"""
class testScene5(bpy.types.Operator):
bl_idname = "fur.switch_back"
bl_label = "Switch back to scene"
bl_description = "If you want keep this scene, switch scene in info window"
bl_register = True
bl_undo = True
def execute(self, context):
scene = bpy.context.scene
bpy.data.scenes.remove(scene)
return {"FINISHED"}
class testScene6(bpy.types.Operator):
bl_idname = "fur.test_scene"
bl_label = "Create test scene"
bl_description = "You can switch scene in info panel"
bl_register = True
bl_undo = True
def execute(self, context):
# add new scene
bpy.ops.scene.new(type="NEW")
scene = bpy.context.scene
scene.name = "TestFurScene"
# render settings
render = scene.render
render.resolution_x = 1920
render.resolution_y = 1080
render.resolution_percentage = 50
# add new world
world = bpy.data.worlds.new("FurWorld")
scene.world = world
world.use_sky_blend = True
world.use_sky_paper = True
world.horizon_color = (0.004393,0.02121,0.050)
world.zenith_color = (0.03335,0.227,0.359)
# add text
bpy.ops.object.text_add(location=(-0.292,0,-0.152), rotation =(1.571,0,0))
text = bpy.context.active_object
text.scale = (0.05,0.05,0.05)
text.data.body = "Fur Lab"
# add material to text
textMaterial = bpy.data.materials.new('textMaterial')
text.data.materials.append(textMaterial)
textMaterial.use_shadeless = True
# add camera
bpy.ops.object.camera_add(location = (0,-1,0),rotation = (1.571,0,0))
cam = bpy.context.active_object.data
cam.lens = 50
cam.draw_size = 0.1
# add spot lamp
bpy.ops.object.lamp_add(type="SPOT", location = (-0.7,-0.5,0.3), rotation =(1.223,0,-0.960))
lamp1 = bpy.context.active_object.data
lamp1.name = "Key Light"
lamp1.energy = 1.5
lamp1.distance = 1.5
lamp1.shadow_buffer_soft = 5
lamp1.shadow_buffer_size = 8192
lamp1.shadow_buffer_clip_end = 1.5
lamp1.spot_blend = 0.5
# add spot lamp2
bpy.ops.object.lamp_add(type="SPOT", location = (0.7,-0.6,0.1), rotation =(1.571,0,0.785))
lamp2 = bpy.context.active_object.data
lamp2.name = "Fill Light"
lamp2.color = (0.874,0.874,1)
lamp2.energy = 0.5
lamp2.distance = 1.5
lamp2.shadow_buffer_soft = 5
lamp2.shadow_buffer_size = 4096
lamp2.shadow_buffer_clip_end = 1.5
lamp2.spot_blend = 0.5
# light Rim
"""
# add spot lamp3
bpy.ops.object.lamp_add(type="SPOT", location = (0.191,0.714,0.689), rotation =(0.891,0,2.884))
lamp3 = bpy.context.active_object.data
lamp3.name = "Rim Light"
lamp3.color = (0.194,0.477,1)
lamp3.energy = 3
lamp3.distance = 1.5
lamp3.shadow_buffer_soft = 5
lamp3.shadow_buffer_size = 4096
lamp3.shadow_buffer_clip_end = 1.5
lamp3.spot_blend = 0.5
"""
# add sphere
bpy.ops.mesh.primitive_uv_sphere_add(size=0.1)
bpy.ops.object.shade_smooth()
return {"FINISHED"}
class GenerateFur(bpy.types.Operator):
bl_idname = "fur.generate_fur"
bl_label = "Generate Fur"
bl_description = "Create a Fur"
bl_register = True
bl_undo = True
def execute(self, context):
# Make variable that is the current .blend file main data blocks
blend_data = context.blend_data
ob = bpy.context.active_object
scene = context.scene
######################################################################
########################Short Fur########################
if scene.fur_type == '0':
###############Create New Material##################
# add new material
furMaterial = bpy.data.materials.new('Fur 1')
ob.data.materials.append(furMaterial)
#Material settings
furMaterial.preview_render_type = "HAIR"
furMaterial.diffuse_color = (0.287, 0.216, 0.04667)
furMaterial.specular_color = (0.604, 0.465, 0.136)
furMaterial.specular_intensity = 0.3
furMaterial.ambient = 0
furMaterial.use_cubic = True
furMaterial.use_transparency = True
furMaterial.alpha = 0
furMaterial.use_transparent_shadows = True
#strand
furMaterial.strand.use_blender_units = True
furMaterial.strand.root_size = 0.00030
furMaterial.strand.tip_size = 0.00010
furMaterial.strand.size_min = 0.7
furMaterial.strand.width_fade = 0.1
furMaterial.strand.shape = 0.061
furMaterial.strand.blend_distance = 0.001
# add texture
furTex = bpy.data.textures.new("Fur1Tex", type='BLEND')
furTex.use_preview_alpha = True
furTex.use_color_ramp = True
ramp = furTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.114,0.05613,0.004025,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.267,0.155,0.02687,0]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.281,0.168,0.03157,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.288,0.135,0.006242,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.247,0.113,0.006472,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.253,0.09919,0.01242,0.64]
# add texture to material
MTex = furMaterial.texture_slots.add()
MTex.texture = furTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
furParticles = bpy.context.object.particle_systems.active
furParticles.name = "Fur1Par"
furParticles.settings.type = "HAIR"
furParticles.settings.use_advanced_hair = True
furParticles.settings.count = 500
furParticles.settings.normal_factor = 0.05
furParticles.settings.factor_random = 0.001
furParticles.settings.use_dynamic_rotation = True
furParticles.settings.material = NumberOfMaterials
furParticles.settings.use_strand_primitive = True
furParticles.settings.use_hair_bspline = True
furParticles.settings.render_step = 5
furParticles.settings.length_random = 0.5
furParticles.settings.draw_step = 5
# children
furParticles.settings.child_type = "INTERPOLATED"
furParticles.settings.child_length = 0.134
furParticles.settings.create_long_hair_children = True
furParticles.settings.clump_factor = 0.55
furParticles.settings.roughness_endpoint = 0.005
furParticles.settings.roughness_end_shape = 5
furParticles.settings.roughness_2 = 0.003
furParticles.settings.roughness_2_size = 0.230
######################################################################
########################Dalmation Fur##########################
if scene.fur_type == '1':
###############Create New Material##################
# add new material
furMaterial = bpy.data.materials.new('Fur2Mat')
ob.data.materials.append(furMaterial)
#Material settings
furMaterial.preview_render_type = "HAIR"
furMaterial.diffuse_color = (0.300, 0.280, 0.280)
furMaterial.specular_color = (1.0, 1.0, 1.0)
furMaterial.specular_intensity = 0.500
furMaterial.specular_hardness = 50
furMaterial.ambient = 0
furMaterial.use_cubic = True
furMaterial.use_transparency = True
furMaterial.alpha = 0
furMaterial.use_transparent_shadows = True
#strand
furMaterial.strand.use_blender_units = True
furMaterial.strand.root_size = 0.00030
furMaterial.strand.tip_size = 0.00010
furMaterial.strand.size_min = 0.7
furMaterial.strand.width_fade = 0.1
furMaterial.strand.shape = 0.061
furMaterial.strand.blend_distance = 0.001
# add texture
furTex = bpy.data.textures.new("Fur2Tex", type='BLEND')
furTex.name = "Fur2"
furTex.use_preview_alpha = True
furTex.use_color_ramp = True
ramp = furTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [1.0,1.0,1.0,1.0]
rampElements[1].position = 1
rampElements[1].color = [1.0,1.0,1.0,0.0]
rampElement1 = rampElements.new(0.116)
rampElement1.color = [1.0,1.0,1.0,1.0]
# add texture to material
MTex = furMaterial.texture_slots.add()
MTex.texture = furTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
# add texture 2
furTex = bpy.data.textures.new("Fur2bTex", type='CLOUDS')
furTex.name = "Fur2b"
furTex.use_preview_alpha = False
furTex.cloud_type = "COLOR"
furTex.noise_type = "HARD_NOISE"
furTex.noise_scale = 0.06410
furTex.use_color_ramp = True
ramp = furTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [1.0,1.0,1.0, 1.0]
rampElements[1].position = 1
rampElements[1].color = [0.0,0.0,0.0,1.0]
rampElement1 = rampElements.new(0.317)
rampElement1.color = [1.0,1.0,1.0,1.0]
rampElement2 = rampElements.new(0.347)
rampElement2.color = [0.0,0.0,0.0,1.0]
# add texture 2 to material
MTex = furMaterial.texture_slots.add()
MTex.texture = furTex
MTex.texture_coords = "GLOBAL"
MTex.use_map_alpha = True
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
furParticles = bpy.context.object.particle_systems.active
furParticles.name = "Fur2Par"
furParticles.settings.type = "HAIR"
furParticles.settings.use_advanced_hair = True
furParticles.settings.count = 500
furParticles.settings.normal_factor = 0.05
furParticles.settings.factor_random = 0.001
furParticles.settings.use_dynamic_rotation = True
furParticles.settings.material = NumberOfMaterials
furParticles.settings.use_strand_primitive = True
furParticles.settings.use_hair_bspline = True
furParticles.settings.render_step = 5
furParticles.settings.length_random = 0.5
furParticles.settings.draw_step = 5
# children
furParticles.settings.child_type = "INTERPOLATED"
furParticles.settings.child_length = 0.07227
furParticles.settings.create_long_hair_children = True
furParticles.settings.clump_factor = 0.55
furParticles.settings.roughness_endpoint = 0.005
furParticles.settings.roughness_end_shape = 5
furParticles.settings.roughness_2 = 0.003
furParticles.settings.roughness_2_size = 0.230
######################################################################
########################Spotted_fur##########################
elif scene.fur_type == '2':
###############Create New Material##################
# add new material
furMaterial = bpy.data.materials.new('Fur3Mat')
ob.data.materials.append(furMaterial)
#Material settings
furMaterial.preview_render_type = "HAIR"
furMaterial.diffuse_color = (0.300, 0.280, 0.280)
furMaterial.specular_color = (1.0, 1.0, 1.0)
furMaterial.specular_intensity = 0.500
furMaterial.specular_hardness = 50
furMaterial.use_specular_ramp = True
ramp = furMaterial.specular_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.0356,0.0152,0.009134,0]
rampElements[1].position = 1
rampElements[1].color = [0.352,0.250,0.231,1]
rampElement1 = rampElements.new(0.255)
rampElement1.color = [0.214,0.08244,0.0578,0.31]
rampElement2 = rampElements.new(0.594)
rampElement2.color = [0.296,0.143,0.0861,0.72]
furMaterial.ambient = 0
furMaterial.use_cubic = True
furMaterial.use_transparency = True
furMaterial.alpha = 0
furMaterial.use_transparent_shadows = True
#strand
furMaterial.strand.use_blender_units = True
furMaterial.strand.root_size = 0.00030
furMaterial.strand.tip_size = 0.00015
furMaterial.strand.size_min = 0.450
furMaterial.strand.width_fade = 0.1
furMaterial.strand.shape = 0.02
furMaterial.strand.blend_distance = 0.001
# add texture
furTex = bpy.data.textures.new("Fur3Tex", type='BLEND')
furTex.name = "Fur3"
furTex.use_preview_alpha = True
furTex.use_color_ramp = True
ramp = furTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.01467,0.005307,0.00316,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.0272,0.01364,0.01013,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.04445,0.02294,0.01729,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.04092,0.0185,0.01161,0.64]
# add texture to material
MTex = furMaterial.texture_slots.add()
MTex.texture = furTex
MTex.texture_coords = "STRAND"
MTex.use_map_alpha = True
# add texture 2
furTex = bpy.data.textures.new("Fur3bTex", type='CLOUDS')
furTex.name = "Fur3b"
furTex.use_preview_alpha = True
furTex.cloud_type = "COLOR"
furTex.use_color_ramp = True
ramp = furTex.color_ramp
rampElements = ramp.elements
rampElements[0].position = 0
rampElements[0].color = [0.009721,0.006049,0.003677,0.38]
rampElements[1].position = 1
rampElements[1].color = [0.04231,0.02029,0.01444,0.16]
rampElement1 = rampElements.new(0.111)
rampElement1.color = [0.01467,0.005307,0.00316,0.65]
rampElement2 = rampElements.new(0.366)
rampElement2.color = [0.0272,0.01364,0.01013,0.87]
rampElement3 = rampElements.new(0.608)
rampElement3.color = [0.04445,0.02294,0.01729,0.8]
rampElement4 = rampElements.new(0.828)
rampElement4.color = [0.04092,0.0185,0.01161,0.64]
# add texture 2 to material
MTex = furMaterial.texture_slots.add()
MTex.texture = furTex
MTex.texture_coords = "GLOBAL"
MTex.use_map_alpha = False
###############Create Particles##################
# Add new particle system
NumberOfMaterials = 0
for i in ob.data.materials:
NumberOfMaterials +=1
bpy.ops.object.particle_system_add()
#Particle settings setting it up!
furParticles = bpy.context.object.particle_systems.active
furParticles.name = "Fur3Par"
furParticles.settings.type = "HAIR"
furParticles.settings.use_advanced_hair = True
furParticles.settings.count = 500
furParticles.settings.normal_factor = 0.05
furParticles.settings.factor_random = 0.001
furParticles.settings.use_dynamic_rotation = True
furParticles.settings.material = NumberOfMaterials
furParticles.settings.use_strand_primitive = True
furParticles.settings.use_hair_bspline = True
furParticles.settings.render_step = 5
furParticles.settings.length_random = 0.5
furParticles.settings.draw_step = 5
# children
furParticles.settings.child_type = "INTERPOLATED"
furParticles.settings.child_length = 0.134
furParticles.settings.create_long_hair_children = True
furParticles.settings.clump_factor = 0.55
furParticles.settings.roughness_endpoint = 0.005
furParticles.settings.roughness_end_shape = 5
furParticles.settings.roughness_2 = 0.003
furParticles.settings.roughness_2_size = 0.230
return {'FINISHED'}
def register():
bpy.utils.register_module(__name__)
bpy.types.Scene.grass_type = EnumProperty(
name="Type",
description="Select the type of grass",
items=[("0","Green Grass","Generate particle grass"),
("1","Grassy Field","Generate particle grass"),
("2","Clumpy Grass","Generate particle grass"),
],
default='0')
bpy.types.Scene.hair_type = EnumProperty(
name="Type",
description="Select the type of hair",
items=[("0","Long Red Straight Hair","Generate particle Hair"),
("1","Long Brown Curl Hair","Generate particle Hair"),
("2","Short Dark Hair","Generate particle Hair"),
],
default='0')
bpy.types.Scene.fur_type = EnumProperty(
name="Type",
description="Select the type of fur",
items=[("0","Short Fur","Generate particle Fur"),
("1","Dalmation","Generate particle Fur"),
("2","Fur3","Generate particle Fur"),
],
default='0')
def unregister():
bpy.utils.unregister_module(__name__)
del bpy.types.Scene.hair_type
if __name__ == "__main__":
register()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment