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

    fset.normal_factor = 1.0

    fset.factor_random = 0.5

    # Физика

    fset.physics_type = 'NEWTON'

    fset.mass = 0

    # Установка всех эффекторных весов в ноль

    ew = fset.effector_weights

    ew.gravity = 0.0

    # Не рендерить

    fset.draw_method = 'DOT'

    fset.render_type = 'NONE'  

    # -------------- Шар

    ball = addSphere('Ball', 1.0, origin)

    ball.data.materials.append(red)  

    # Система частиц

    bpy.ops.object.particle_system_add()

    react = ball.particle_systems[0]

    react.name = 'React'

    fset = react.settings

    # Эмиссия

    fset.name = 'TrailSettings'

    fset.count = 50

    fset.frame_start = 47

fset.frame_end = 57

    fset.lifetime = 250

    fset.emit_from = 'FACE'

    fset.use_render_emitter = True

    # Скорость

    fset.normal_factor = 5.0

    fset.factor_random = 2.5

    # Физика

    fset.physics_type = 'NEWTON'

    fset.mass = 1.0

    # Не рендерить

    fset.draw_method = 'CROSS'

    fset.render_type = 'NONE'  

    # Модификатор Explode

    mod = ball.modifiers.new(name='Explode', type='EXPLODE')

    mod.use_edge_cut = True

    mod.show_unborn = True

    mod.show_alive = True

    mod.show_dead = True

    mod.use_size = False 

    # ---- Скрытый пол с модификатором collision (столкновения)

    hidden = addFloor('Hidden', origin+Vector((0,0,-3.9)), True)

    mod = hidden.modifiers.new(name='Collision', type='COLLISION')

    mset = mod.settings

    mset.permeability = 0.01

    mset.stickness = 0.1

    mset.use_particle_kill = False

    mset.damping_factor = 0.6

    mset.damping_random = 0.2

    mset.friction_factor = 0.3

    mset.friction_random = 0.1

    addFloor('Floor', Vector((0,0,-4)), False)

    return 

if __name__ == "__main__":

    bpy.ops.object.select_all(action='SELECT')

    bpy.ops.object.delete()  

    # Камера, освещение

    bpy.ops.object.camera_add(

        location = Vector((12,-12,4)),

        rotation = Vector((70,0,45))*math.pi/180)

    cam = bpy.context.object.data

    cam.lens = 35

    bpy.ops.object.lamp_add(type='POINT',

        location = Vector((11,-7,6)))

    bpy.ops.object.lamp_add(type='POINT',

        location =Vector((-7,-10,2)))

    run(Vector((0,0,0)))

Частицы огня и дыма

Эта программа добавляет две системы частиц для огня и дыма. Частицы отображаются в виде билбордов с процедурными текстурами.

#---------------------------------------------------

# File fire.py

#---------------------------------------------------

import bpy, mathutils, math

from mathutils import Vector, Matrix

from math import pi  

def createEmitter(origin):

    bpy.ops.mesh.primitive_plane_add(location=origin)

    emitter = bpy.context.object

    bpy.ops.mesh.uv_texture_add()

    return emitter 

def createFire(emitter):

    # Добавление первой системы частиц — огня

    bpy.context.scene.objects.active = emitter

    bpy.ops.object.particle_system_add()

    fire = emitter.particle_systems[-1]

    fire.name = 'Fire'

    fset = fire.settings 

    # Эмиссия

    fset.name = 'FireSettings'

    fset.count = 100

    fset.frame_start = 1

    fset.frame_end = 200

    fset.lifetime = 70

    fset.lifetime_random = 0.2

    fset.emit_from = 'FACE'

    fset.use_render_emitter = False

    fset.distribution = 'RAND'

    fset.object_align_factor = (0,0,1)  

    # Скорость

    fset.normal_factor = 0.55

    fset.factor_random = 0.5 

    # Физика

    fset.physics_type = 'NEWTON'

    fset.mass = 1.0

    fset.particle_size = 10.0

fset.use_multiply_size_mass = False  

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

    ew = fset.effector_weights

    ew.gravity = 0.0 ew.wind = 1.0 

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

    fset.draw_percentage = 100

    fset.draw_method = 'RENDER'

    fset.material = 1

    fset.particle_size = 0.3

    fset.render_type = 'BILLBOARD'

    fset.render_step = 3 

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

    fset.child_type = 'SIMPLE'

    fset.rendered_child_count = 50

    fset.child_radius = 1.1

    fset.child_roundness = 0.5 return fire 

def createSmoke(emitter):

    # Добавление второй системы частиц — дыма

    bpy.context.scene.objects.active = emitter

    bpy.ops.object.particle_system_add()

    smoke = emitter.particle_systems[-1]

    smoke.name = 'Smoke' sset = smoke.settings 

    # Эмиссия

    sset.name = 'FireSettings'

    sset.count = 100

    sset.frame_start = 1

    sset.frame_end = 100

    sset.lifetime = 70

    sset.lifetime_random = 0.2

    sset.emit_from = 'FACE'

    sset.use_render_emitter = False

    sset.distribution = 'RAND'  

    # Скорость

    sset.normal_factor = 0.0

    sset.factor_random = 0.5