Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² написаниС скриптов Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅ для Π‘Π»Π΅Π½Π΄Π΅Ρ€Π° 2.5x. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 3

Автор Thomas Larsson

    ]

    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

    cns2 = pMid.constraints.new('STRETCH_TO')

    cns2.name = 'Stretchy'

    cns2.target = rig

    cns2.subtarget = 'Tip'

    cns2.influence = 0.5

    cns2.keep_axis = 'PLANE_X'

    cns2.volume = 'VOLUME_XZX'


    # ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Copy rotation Base -> Tip

    pBase = rig.pose.bones['Base']

    cns3 = pBase.constraints.new('COPY_ROTATION')

    cns3.name = 'Copy_Rotation'

    cns3.target = rig

    cns3.subtarget = 'Tip'

    cns3.owner_space = 'WORLD'

    cns3.target_space = 'WORLD'


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

    return rig


def createMesh(origin):

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСша ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

    me = bpy.data.meshes.new('Mesh')

    ob = bpy.data.objects.new('MeshObject', me)

    ob.location = origin

    # ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΊ сцСнС

    scn = bpy.context.scene

    scn.objects.link(ob)

    scn.objects.active = ob

    scn.update()


    # Бписок ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π²Π΅Ρ€ΡˆΠΈΠ½.

    verts = [

        (0.5, 0.5,0), (0.5,-0.5,0), (-0.5,-0.5,0), (-0.5,0.5,0),

        (0.5,0.5,1), (0.5,-0.5,1), (-0.5,-0.5,1), (-0.5,0.5,1),

        (-0.5,0.5,2), (-0.5,-0.5,2), (0.5,-0.5,2), (0.5,0.5,2),

        (0.5,0.5,3), (0.5,-0.5,3), (-0.5,-0.5,3), (-0.5, 0.5,3)

    ]

    # Бписок Π³Ρ€Π°Π½Π΅ΠΉ.

    faces = [

        (0, 1, 2, 3),

        (0, 4, 5, 1),

        (1, 5, 6, 2),

        (2, 6, 7, 3),

        (4, 0, 3, 7),

        (4, 7, 8, 11),

        (7, 6, 9, 8),

        (6, 5, 10, 9),

        (5, 4, 11, 10),

        (10, 11, 12, 13),

        (9, 10, 13, 14),

        (8, 9, 14, 15),

        (11, 8, 15, 12),

        (12, 15, 14, 13)

    ]


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСша ΠΈΠ· ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… списков Π²Π΅Ρ€ΡˆΠΈΠ½, Ρ€Ρ‘Π±Π΅Ρ€, Π³Ρ€Π°Π½Π΅ΠΉ.

    # Или Ρ€Ρ‘Π±Ρ€Π° ΠΈΠ»ΠΈ Π³Ρ€Π°Π½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ [], ΠΈΠ½Π°Ρ‡Π΅ Π’Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

    me.from_pydata(verts, [], faces)


    # ОбновлСниС мСша с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ

    me.update(calc_edges=True)

    return ob


def skinMesh(ob, rig):

    # Бписки Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…, Π² Ρ„ΠΎΡ€ΠΌΠ΅ (Π²Π΅Ρ€ΡˆΠΈΠ½Π°, вСс)

    vgroups = {}

    vgroups['Base'] = [

        (0, 1.0), (1, 1.0), (2, 1.0), (3, 1.0),

        (4, 0.5), (5, 0.5), (6, 0.5), (7, 0.5)]

    vgroups['Mid'] = [

        (4, 0.5), (5, 0.5), (6, 0.5), (7, 0.5),

        (8, 1.0), (9, 1.0), (10, 1.0), (11, 1.0)]

    vgroups['Tip'] = [(12, 1.0), (13, 1.0), (14, 1.0), (15, 1.0)]


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³Ρ€ΡƒΠΏΠΏ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ вСсов

    # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ β€” список, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ

    # Π±Ρ‹Π»ΠΎ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ нСсколько Π²Π΅Ρ€ΡˆΠΈΠ½ сразу

    for name in vgroups.keys():

        grp = ob.vertex_groups.new(name)

        for (v, w) in vgroups[name]:

            grp.add([v], w, 'REPLACE')


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ мСш-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹, с использованиСм

    # Π³Ρ€ΡƒΠΏΠΏ Π²Π΅Ρ€ΡˆΠΈΠ½, Π° Π½Π΅ envelopes

    mod = ob.modifiers.new('MyRigModif', 'ARMATURE')

    mod.object = rig mod.use_bone_envelopes = False

    mod.use_vertex_groups = True


    return


def run(origin):

    rig = createArmature(origin)

    ob = createMesh(origin)

    skinMesh(ob, rig)


    # ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ кости Tip Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ·Ρ‹

    bpy.context.scene.objects.active = rig

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

    ptip = rig.pose.bones['Tip']

    ptip.location = (0.2,-0.5,0)

    rotMatrix = mathutils.Matrix.Rotation(0.6, 3, 'X')

    ptip.rotation_quaternion = rotMatrix.to_quaternion()


    return


if __name__ == "__main__":

    run((0,0,0))


Π Π΅ΠΆΠΈΠΌ рСдактирования ΠΏΡ€ΠΎΡ‚ΠΈΠ² Ρ€Π΅ΠΆΠΈΠΌΠ° ΠΏΠΎΠ·Ρ‹

Атрибуты костСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΠ·Ρƒ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ (Π³ΠΎΠ»ΠΎΠ²Π°, хвост, ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚, Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ, использованиС соСдинСния, ΠΈ Ρ‚.ΠΏ.), доступны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ рСдактирования (использованиС кости Π² ob.data.edit bones), Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Π° Π±Ρ‹Π»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ·Ρ‹ (использованиС кости Π² ob.pose.bones). Насколько я знаю, СдинствСнный способ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ рСдактирования ΠΈ ΠΏΠΎΠ·Ρ‹ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²

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

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π΅Π½ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, устанавливая bpy.context.scene.objects.active.

Π­Ρ‚ΠΎΡ‚ скрипт ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ³Π»Ρ‹ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° roll ΠΈΠ· исходной оснастки (имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° 'SrcRig') Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ оснастку (имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π° 'TrgRig'). ОбС Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ число костСй с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.



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

# File copy_roll.py

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

import bpy


def copyRolls(src, trg):

    rolls = {} bpy.context.scene.objects.active = src

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

    for eb in src.data.edit_bones:

        rolls[eb.name] = eb.roll

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


    bpy.context.scene.objects.active = trg

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

    for eb in trg.data.edit_bones:

        oldRoll = eb.roll

        eb.roll = rolls[eb.name]

        print(eb.name, oldRoll, eb.roll)

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

    return


objects = bpy.context.scene.objects

copyRolls(objects['SrcRig'], objects['TrgRig'])


Π’Ρ€ΠΈ способа создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ с использованиСм Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌ.


ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ…

β€’ ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ нСпосрСдствСнно Π² Π‘Π»Π΅Π½Π΄Π΅Ρ€Π΅.

Π”ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Для мСша:

me = bpy.data.meshes.new(meshName)

ob = bpy.data.objects.new(obName, me)

ΠΈ для Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹:

amt = bpy.data.armatures.new(amtname)

ob = bpy.data.objects.new(obname, amt)


β€’ ΠžΠ±ΡŠΠ΅ΠΊΡ‚ привязываСтся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ сцСнС ΠΈ дСлаСтся Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ вновь созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² для всСх Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

scn = bpy.context.scene

scn.objects.link(ob)

scn.objects.active = ob

ob.select = True


β€’ Π—Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄Π°Π½Π½Ρ‹Π΅. Π’ случаС мСша, ΠΌΡ‹ добавляСм списки Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ Π³Ρ€Π°Π½Π΅ΠΉ.

me.from_pydata(verts, [], faces)

Π’ случаС Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π² Ρ€Π΅ΠΆΠΈΠΌ рСдактирования ΠΈ добавляСм ΠΊΠΎΡΡ‚ΡŒ.

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

bone = amt.edit_bones.new('Bone')

bone.head = (0,0,0)

bone.tail = (0,0,1)


β€’ НаконСц, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’ случаС мСша, ΠΌΡ‹ явно Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ update.

me.update()

Π£ Π°Ρ€ΠΌΠ°Ρ‚ΡƒΡ€Ρ‹ подразумСваСтся ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π΅Ρ‘ Π² Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².