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

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

Автор Thomas Larsson

import bpy, os 


def run(origin):

 # Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»Π° с рисунком. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ здСсь, Ссли ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ snippets

 # располоТСн Π½Π΅ Π² Π’Π°ΡˆΠ΅ΠΌ домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

    realpath = os.path.expanduser('~/snippets/textures/color.png')

    try:

        img = bpy.data.images.load(realpath)

    except:

        raise NameError("Cannot load image %s" % realpath)


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ тСкстуры image ΠΈΠ· Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ рисунка

    cTex = bpy.data.textures.new('ColorTex', type = 'IMAGE')

    cTex.image = img


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠΉ тСкстуры

    sTex = bpy.data.textures.new('BumpTex', type = 'STUCCI')

    sTex.noise_basis = 'BLENDER_ORIGINAL'

    sTex.noise_scale = 0.25

    sTex.noise_type = 'SOFT_NOISE'

    sTex.saturation = 1

    sTex.stucci_type = 'PLASTIC'

    sTex.turbulence = 5


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ тСкстуры blend с Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ полосой (color ramp)

    # НС знаю, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΊ полосС, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ сСйчас Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π°

    bTex = bpy.data.textures.new('BlendTex', type = 'BLEND')

    bTex.progression = 'SPHERICAL'

    bTex.use_color_ramp = True

    ramp = bTex.color_ramp

    values = [(0.6, (1,1,1,1)), (0.8, (0,0,0,1))]

    for n,value in enumerate(values):

        elt = ramp.elements[n]

        (pos, color) = value

        elt.position = pos

        elt.color = color


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°

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


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСкстурного слота для Ρ†Π²Π΅Ρ‚Π½ΠΎΠΉ тСкстуры

    mtex = mat.texture_slots.add()

    mtex.texture = cTex

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = True

    mtex.use_map_color_emission = True

    mtex.emission_color_factor = 0.5

    mtex.use_map_density = True

    mtex.mapping = 'FLAT'


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСкстурного слота для bump-тСкстуры

    mtex = mat.texture_slots.add()

    mtex.texture = sTex

    mtex.texture_coords = 'ORCO'

    mtex.use_map_color_diffuse = False

    mtex.use_map_normal = True

    #mtex.rgb_to_intensity = True


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ тСкстурного слота

    mtex = mat.texture_slots.add()

    mtex.texture = bTex

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = True

    mtex.diffuse_color_factor = 1.0

    mtex.blend_type = 'MULTIPLY'


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΡƒΠ±Π° ΠΈ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½Π΅Π³ΠΎ UV-раскладки

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

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

    bpy.ops.uv.smart_project()

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


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ

    ob = bpy.context.object

    me = ob.data

    me.materials.append(mat)


    return 


if __name__ == "__main__":

    run((0,0,0))


ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт Ρ‚Ρ€ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΌΠ΅ΡˆΡƒ.



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

# File multi_material.py

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

import bpy 


def run(origin):

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Ρ€Ρ‘Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²

    red = bpy.data.materials.new('Red')

    red.diffuse_color = (1,0,0)

    blue = bpy.data.materials.new('Blue')

    blue.diffuse_color = (0,0,1)

    yellow = bpy.data.materials.new('Yellow')

    yellow.diffuse_color = (1,1,0)


   # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ мСша ΠΈ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ²

    bpy.ops.mesh.primitive_uv_sphere_add(

        segments = 16,

        ring_count = 8,

        location=origin)

    ob = bpy.context.object

    ob.name = 'MultiMatSphere'

    me = ob.data me.materials.append(red)

    me.materials.append(blue)

    me.materials.append(yellow)


    # НазначСниС ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² граням

    for f in me.faces:

        f.material_index = f.index % 3


    # Установка Π»Π΅Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ сфСры Π² ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π·Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅,

    # ΠΏΡ€Π°Π²ΠΎΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ β€” Π² плоскоС Π·Π°Ρ‚Π΅Π½Π΅Π½ΠΈΠ΅

    for f in me.faces:

        f.use_smooth = (f.center[0] < 0)  


if __name__ == "__main__":

    run((0,0,0))


Π‘Π»ΠΎΠΈ UV-раскладки

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт Π΄Π²Π° UV-слоя ΠΊ ΠΌΠ΅ΡˆΡƒ.



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

# File uvs.py

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

import bpy import os 


def createMesh(origin):

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

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

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

    ob.location = origin

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

    scn = bpy.context.scene

    scn.objects.link(ob)

    scn.objects.active = ob scn.update()


    # Бписки Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ Π³Ρ€Π°Π½Π΅ΠΉ

    verts = [

        (1.41936, 1.41936, -1),

        (0.589378, -1.67818, -1),

        (-1.67818, 0.58938, -1),

        (0, 0, 1)

    ]

    faces = [(1,0,3), (3,2,1), (3,0,2), (0,1,2)]

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

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

    me.from_pydata(verts, [], faces)


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

    me.update(calc_edges=True)


    # ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ тСкстурный слой: Главная UV тСкстура (UVMain)

    texFaces = [

        [(0.6,0.6), (1,1), (0,1)],

        [(0,1), (0.6,0), (0.6,0.6)],

        [(0,1), (0,0), (0.6,0)],

        [(1,1), (0.6,0.6), (0.6,0)]

    ]

    uvMain = createTextureLayer("UVMain", me, texFaces)


   # Π’Ρ‚ΠΎΡ€ΠΎΠΉ тСкстурный слой: проСкция спСрСди (UVFront)

    texFaces = [

        [(0.732051,0), (1,0), (0.541778,1)],

        [(0.541778,1), (0,0), (0.732051,0)],

        [(0.541778,1), (1,0), (0,0)],

        [(1,0), (0.732051,0), (0,0)]

    ]

    uvFront = createTextureLayer("UVFront", me, texFaces)


    # Π’Ρ€Π΅Ρ‚ΠΈΠΉ тСкстурный слой: Умная проСкция

    bpy.ops.mesh.uv_texture_add()

    uvCyl = me.uv_textures.active

    uvCyl.name = 'UVCyl'

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

    bpy.ops.uv.cylinder_project()

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


# Π₯ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π“Π»Π°Π²Π½Ρ‹ΠΉ слой Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ, Π½ΠΎ, каТСтся, это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ - TBF

    me.uv_textures.active = uvMain

    me.uv_texture_clone = uvMain

    uvMain.active_render = True

    uvFront.active_render = False

    uvCyl.active_render = False

    return ob 


def createTextureLayer(name, me, texFaces):

    uvtex = me.uv_textures.new()

    uvtex.name = name

    for n,tf in enumerate(texFaces):

        datum = uvtex.data[n]

        datum.uv1 = tf[0]

        datum.uv2 = tf[1]

        datum.uv3 = tf[2]

    return uvtex 


def createMaterial():

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ тСкстуры image ΠΈΠ· ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ здСсь, Ссли

    # ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ snippet располоТСн Π½Π΅ Π² Π’Π°ΡˆΠ΅ΠΌ домашнСм ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅.

     realpath = os.path.expanduser('~/snippets/textures/color.png')

    tex = bpy.data.textures.new('ColorTex', type = 'IMAGE')

    tex.image = bpy.data.images.load(realpath)

    tex.use_alpha = True 


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ нСзатСняСмого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΈ MTex

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

    mat.use_shadeless = True

    mtex = mat.texture_slots.add()

    mtex.texture = tex

    mtex.texture_coords = 'UV'

    mtex.use_map_color_diffuse = True

    return mat 


def run(origin):

    ob = createMesh(origin)

    mat = createMaterial()

    ob.data.materials.append(mat)

    return 


if __name__ == "__main__":

    run((0,0,0))



ДСйствия (Actions) ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ элСмСнты (drivers)

ДСйствиС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ΠŸΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠΉ мяч.



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

# File ob_action.py

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

import bpy import math 


def run(origin):

    # Установка Π½Π°Ρ‡Π°Π»Π° ΠΈ ΠΊΠΎΠ½Ρ†Π° Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ

    scn = bpy.context.scene

    scn.frame_start = 11

    scn.frame_end = 200


    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ico-сфСры

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

    ob = bpy.context.object


  # Вставка ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΊΠ°Π΄Ρ€ΠΎΠ² с operator code (ΠΊΠΎΠ΄ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ???)

    # ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ автоматичСски

    z = 10

    t = 1

    for n in range(5):

        t += 10

        bpy.ops.anim.change_frame(frame = t)

        bpy.ops.transform.translate(value=(2, 0, z))

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

        t += 10

        bpy.ops.anim.change_frame(frame = t)

        bpy.ops.transform.translate(value=(2, 0, -z))

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

        z *= 0.67


    action = ob.animation_data.action