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

ЖАНРЫ

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

Larsson Thomas

Шрифт:

(trans, rot, scale) = parent.matrix.decompose

else:

bone.head = (0,0,0)

rot = Matrix.Translation((0,0,0))
 # Матрица идентичности

bone.tail = Vector(vector) * rot + bone.head

bpy.ops.object.mode_set(mode='OBJECT')

return ob

def poseRig(ob, poseTable):

bpy.context.scene.objects.active = ob

bpy.ops.object.mode_set(mode='POSE')

deg2rad = 2*math.pi/360

for (bname, axis, angle) in poseTable:

pbone = ob.pose.bones[bname]

#
Установка режима вращения в Euler XYZ (Эйлерово),

# легче для понимания, чем кватернионы по-умолчанию

pbone.rotation_mode = 'XYZ'

# Косяк в документации: Euler.rotate(angle,axis):

# оси в ['x','y','z'] а не ['X','Y','Z']

pbone.rotation_euler.rotate_axis(axis, angle*deg2rad)

bpy.ops.object.mode_set(mode='OBJECT')

return

def run(origo):

origin = Vector(origo)

# Таблица костей в форме (кость, родитель, вектор)

# Вектор дан в локальных координатах

boneTable1 = [

('Base', None, (1,0,0)),

('Mid', 'Base', (1,0,0)),

('Tip', 'Mid', (0,0,1))

]

bent = createRig('Bent', origin, boneTable1)

# Вторая оснастка является прямой линией, то есть кости проходят вдоль локальной оси Y

boneTable2 = [

('Base', None, (1,0,0)),

('Mid', 'Base', (0,0.5,0)),

('Mid2', 'Mid', (0,0.5,0)),

('Tip', 'Mid2', (0,1,0))

]

straight = createRig('Straight', origin+Vector((0,2,0)), boneTable2)

# Поза второй остнастки

poseTable2 = [

('Base', 'X', 90),

('Mid2', 'Z', 45),

('Tip', 'Y', -45)

]

poseRig(straight, poseTable2)

# Поза первой остнастки

poseTable1 = [

('Tip', 'Y', 45),

('Mid', 'Y', 45),

('Base', 'Y', 45)

]

poseRig(bent, poseTable1)

return

if __name__ == "__main__":

run((0,5,0))

Меш с оснасткой

Эта

программа добавляет арматуру и меш. Арматура имеет три кости (Base (базовая), Mid (средняя), Tip (конечная)) и ограничения:

1. Ограничение IK Mid -> Tip.

2. Ограничение Stretch To Mid -> Tip.

3. Ограничение Copy Rotation Base -> Tip.

Меш деформируется арматурой. Следовательно, создаются модификатор арматуры и соответствующие группы вершин.

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

# File rigged_mesh.py

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

import bpy, mathutils

def createArmature(origin):

# Создание арматуры и объекта

amt = bpy.data.armatures.new('MyRigData')

rig = bpy.data.objects.new('MyRig', amt)

rig.location = origin

rig.show_x_ray = True amt.show_names = True

# Привязка объекта к сцене

scn = bpy.context.scene

scn.objects.link(rig)

scn.objects.active = rig scn.update

# Создание костей

#next two lines by PKHG SVN 36504 W32

bpy.ops.object.editmode_toggle

# bpy.ops.object.mode_set(mode='EDIT')

#original does not work??!! bpy.ops.object.mode_set(mode='EDIT')

base = amt.edit_bones.new('Base')

base.head = (0,0,0)

base.tail = (0,0,1)

mid = amt.edit_bones.new('Mid')

mid.head = (0,0,1)

mid.tail = (0,0,2)

mid.parent = base

mid.use_connect = True

tip = amt.edit_bones.new('Tip')

tip.head = (0,0,2)

tip.tail = (0,0,3)

# Ограничения костей. Арматура должна быть в режиме позы.

bpy.ops.object.mode_set(mode='POSE')

# Ограничение IK Mid -> Tip

pMid = rig.pose.bones['Mid']

cns1 = pMid.constraints.new('IK')

cns1.name = 'Ik'

cns1.target = rig

cns1.subtarget = 'Tip'

cns1.chain_count = 1

# Ограничение StretchTo Mid -> Tip с влиянием 0.5

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