Чтение онлайн

ЖАНРЫ

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода

Larsson Thomas

Шрифт:

fset.shape = 'PLANE'

return

def addFlagMaterial(name, ob, color1, color2):

# Текстура флага

tex = bpy.data.textures.new('Flag', type = 'WOOD')

tex.noise_basis_2 = 'TRI'

tex.wood_type = 'RINGS'

# Создание материала

mat = bpy.data.materials.new(name)

mat.diffuse_color = color1

#
Добавление текстурного слота для текстуры цвета

mtex = mat.texture_slots.add

mtex.texture = tex

mtex.
texture_coords = 'ORCO'

mtex.use_map_color_diffuse = True

mtex.color = color2

# Добавление материала к флагу

ob.data.materials.append(mat)

return mat

def createDisplacementTexture(mat):

tex = bpy.data.textures.new('Flag', type = 'WOOD')

tex.noise_basis_2 = 'SIN'

tex.wood_type = 'BANDNOISE'

tex.noise_type = 'SOFT_NOISE'

tex.noise_scale = 0.576

tex.turbulence = 9.0

# Сохранение текстуры в материале для легкого доступа. Не необходимо на самом деле.

mtex = mat.texture_slots.add

mtex.texture = tex

mat.use_textures[1] = False

return tex

def addDisplacementModifier(ob, tex, vgrp, empty):

mod = ob.modifiers.new('Displace', 'DISPLACE')

mod.texture = tex

mod.vertex_group = vgrp

mod.direction = 'NORMAL'

mod.texture_coords = 'OBJECT'

mod.texture_coords_object = empty

mod.mid_level = 0.0

mod.strength = 0.1

print("'%s' '%s'" % (vgrp, mod.vertex_group))

mod.vertex_group = vgrp

print("'%s' '%s'" % (vgrp, mod.vertex_group))

return mod

def createAndAnimateEmpty(origin):

bpy.ops.object.add(type='EMPTY', location=origin)

empty = bpy.context.object

scn = bpy.context.scene

scn.frame_current = 1

bpy.ops.anim.keyframe_insert_menu(type='Location')

scn.frame_current = 26

bpy.ops.transform.translate(value=(1,0,1))

bpy.ops.anim.keyframe_insert_menu(type='Location')

scn.frame_current = 1

for fcu in empty.animation_data.action.fcurves:

fcu.extrapolation = 'LINEAR'

for kp in fcu.keyframe_points:

kp.interpolation = 'LINEAR'

return empty

def run(origin):

#
Создание флагов и полей

flag1 = makeFlag('SoftBodyFlag', origin+Vector((-3,0,0)), False)

flag2 = makeFlag('ClothFlag', origin+Vector((0,0,0)), False)

flag3 = makeFlag('DisplacementFlag', origin+Vector((3,0,0)), True)

pole1 = makePole(origin+Vector((-3,0,0)))

pole2 = makePole(origin+Vector((0,0,0)))

pole3 = makePole(origin+Vector((3,0,0)))

# Материалы

mat1 = addFlagMaterial('SoftBodyFlag', flag1, (1,0,0), (0,0,1))

mat2 = addFlagMaterial('ClothFlag', flag2, (0,1,0), (1,1,0))

mat3 = addFlagMaterial('DisplacementFlag', flag3, (1,0,1), (0,1,0))

white = bpy.data.materials.new('White')

white.diffuse_color = (1,1,1)

pole1.data.materials.append(white)

pole2.data.materials.append(white)

pole3.data.materials.append(white)

# Добавление модификаторов и ветра

addSoftBodyModifier(flag1)

addClothModifier(flag2)

addWindEffector(origin+Vector((-1,-2,0)))

# Создание смещения

tex3 = createDisplacementTexture(mat3)

empty = createAndAnimateEmpty(origin + Vector((3,0,0)))

mod = addDisplacementModifier(flag3, tex3, 'POLE', empty)

return

if __name__ == "__main__":

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

bpy.ops.object.delete

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

bpy.ops.screen.animation_play

Частицы и модификатор Explode (взрыв)

Пуля с невидимой системой частиц стреляет в хрустальный шар. Шар разрушается, и части падают на пол.

Эффект достигается за счет придания шару модификатора взрыва, который запускается системой частиц. Идея заключалась в том, чтобы сделать это в системе частиц

reactor
, которая вызывается системой частиц пули. Тем не менее, частицы
reactor
, по-видимому, еще не включены в Blender 2.5, так что частицы шара устанавливаются на выброс в определенное время, а не по реакции.

Поделиться с друзьями: