Выбрать главу

    # Физика

    sset.physics_type = 'NEWTON'

    sset.mass = 2.5

    sset.particle_size = 0.3

    sset.use_multiply_size_mass = True  

    # Веса эффекторов

    ew = sset.effector_weights

    ew.gravity = 0.0

    ew.wind = 1.0 

    # Отображение и рендер

    sset.draw_percentage = 100

    sset.draw_method = 'RENDER'

    sset.material = 2

    sset.particle_size = 0.5

    sset.render_type = 'BILLBOARD'

    sset.render_step = 3 

    # Дочерние частицы

    sset.child_type = 'SIMPLE'

    sset.rendered_child_count = 50

    sset.child_radius = 1.6 return smoke 

def createWind(origin):

    # Создание ветра

    bpy.ops.object.effector_add(

        type='WIND',

        enter_editmode=False,

        location = origin - Vector((0,3,0)),

        rotation = (-pi/2, 0, 0))

    wind = bpy.context.object  

    # Настройки поля

    fld = wind.field

    fld.strength = 2.3

    fld.noise = 3.2

    fld.flow = 0.3

    return wind 

def createColorRamp(tex, values):

    # Создание цветовой полосы

    tex.use_color_ramp = True

    ramp = tex.color_ramp

    for n,value in enumerate(values):

        elt = ramp.elements[n]

        (pos, color) = value

        elt.position = pos

        elt.color = color

    return 

def createFlameTexture():

    tex = bpy.data.textures.new('Flame', type = 'CLOUDS')

    createColorRamp(tex, [(0.2, (1,0.5,0.1,1)), (0.8, (0.5,0,0,0))])

    tex.noise_type = 'HARD_NOISE'

    tex.noise_scale = 0.7

    tex.noise_depth = 5

    return tex  

def createStencilTexture():

    tex = bpy.data.textures.new('Stencil', type = 'BLEND')

    tex.progression = 'SPHERICAL'

    createColorRamp(tex, [(0.0, (0,0,0,0)), (0.85, (1,1,1,0.6))])

    return tex  

def createEmitTexture():

    tex = bpy.data.textures.new('Emit',

    type = 'BLEND')

    tex.progression = 'LINEAR'

    createColorRamp(tex, [(0.1, (1,1,0,1)), (0.3, (1,0,0,1))])

    return tex  

def createSmokeTexture():

    tex = bpy.data.textures.new('Smoke', type = 'CLOUDS')

    createColorRamp(tex, [(0.2, (0,0,0,1)), (0.6, (1,1,1,1))])

    tex.noise_type = 'HARD_NOISE'

    tex.noise_scale = 1.05

    tex.noise_depth = 5

    return tex  

def createFireMaterial(textures, objects):

   (flame, stencil, emit) = textures

   (emitter, empty) = objects

    mat = bpy.data.materials.new('Fire')

    mat.specular_intensity = 0.0

    mat.use_transparency = True

    mat.transparency_method = 'Z_TRANSPARENCY'

    mat.alpha = 0.0

    mat.use_raytrace = False

    mat.use_face_texture = True

    mat.use_shadows = False

    mat.use_cast_buffer_shadows = True

    mtex = mat.texture_slots.add()

    mtex.texture = emit

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = True

    mtex = mat.texture_slots.add()

    mtex.texture = stencil

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = False

    mtex.use_map_emit = True

    mtex.use_stencil = True

    mtex = mat.texture_slots.add()

    mtex.texture = flame

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = True

    mtex.use_map_alpha = True

    #mtex.object = empty

    return mat 

def createSmokeMaterial(textures, objects):

    (smoke, stencil) = textures

    (emitter, empty) = objects

    mat = bpy.data.materials.new('Smoke')

    mat.specular_intensity = 0.0

    mat.use_transparency = True

    mat.transparency_method = 'Z_TRANSPARENCY'

    mat.alpha = 0.0

    mat.use_raytrace = False

    mat.use_face_texture = True

    mat.use_shadows = True

    mat.use_cast_buffer_shadows = True

    mtex = mat.texture_slots.add()

    mtex.texture = stencil

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = False

    mtex.use_map_alpha = True

    mtex.use_stencil = True

    mtex = mat.texture_slots.add()

    mtex.texture = smoke

    mtex.texture_coords = 'OBJECT'

    mtex.object = empty return mat 

def run(origin):

    emitter = createEmitter(origin)

    #wind = createWind()

    bpy.ops.object.add(type='EMPTY')

    empty = bpy.context.object

    fire = createFire(emitter)

    flameTex = createFlameTexture()

    stencilTex = createStencilTexture()

    emitTex = createEmitTexture()

    flameMat = createFireMaterial(

        (flameTex, stencilTex, emitTex),

        (emitter, empty))

    emitter.data.materials.append(flameMat)

    smoke = createSmoke(emitter)

    smokeTex = createSmokeTexture()

    smokeMat = createSmokeMaterial(

        (smokeTex, stencilTex), (emitter, empty))

    emitter.data.materials.append(smokeMat)

    return  

if __name__ == "__main__":

    bpy.ops.object.select_by_type(type='MESH')

    bpy.ops.object.delete()