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

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

Автор Thomas Larsson

def run(origin):

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΡ‚ΠΈ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

    path = bpy.data.curves.new('MyPath', 'CURVE')

    pathOb = bpy.data.objects.new('Path', path)

    pathOb.location = origin

    bpy.context.scene.objects.link(pathOb)


    # Настройка Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΡ‚ΠΈ

    path.dimensions = '3D'

    path.use_path = True

    path.use_path_follow = True

    path.path_duration = 250


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ сплайна ΠΊ ΠΏΡƒΡ‚ΠΈ

    spline = path.splines.new('POLY')

    spline.use_cyclic_u = True

    spline.use_endpoint_u = False


   # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΊ сплайну

    pointTable = [(0,0,0,0), (1,0,3,0),

        (1,2,2,0), (0,4,0,0), (0,0,0,0)]

    nPoints = len(pointTable)

    spline.points.add(nPoints-1)

    for n in range(nPoints):

        spline.points[n].co = pointTable[n]


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π΅Π·ΡŒΡΠ½Ρ‹

    bpy.ops.mesh.primitive_monkey_add()

    monkey = bpy.context.object


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ограничСния "ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ" обСзьянС

    cns = monkey.constraints.new('FOLLOW_PATH')

    cns.target = pathOb

    cns.use_curve_follow = True

    cns.use_curve_radius = True

    cns.use_fixed_location = False

    cns.forward_axis = 'FORWARD_Z'

    cns.up_axis = 'UP_Y'

    return


if __name__ == "__main__":

    run((0,0,0))

    bpy.ops.screen.animation_play(reverse=False, sync=False)


ΠšΠ°ΠΌΠ΅Ρ€Π° ΠΈ освСщСниС

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° добавляСт источник свСта "солнцС" ΠΊ сцСнС, ΠΈ ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€Ρ‹ (spot) для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π½Π΄Π΅Ρ€Π° Π½Π° сцСнС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ TrackTo, Π·Π°ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π½Π° свой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ солнцС отслСТиваСт Ρ†Π΅Π½Ρ‚Ρ€ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π½Π° сцСнС.

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

# File camera.py

# Adds one camera and several lights

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

import bpy, mathutils, math

from mathutils import Vector

from math import pi  


def findMidPoint():

    # НахоТдСниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ сСрСдины всСх Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

    sum = Vector((0,0,0))

    n = 0

    for ob in bpy.data.objects:

        if ob.type not in ['CAMERA', 'LAMP', 'EMPTY']:

            sum += ob.location

            n += 1

    if n == 0:

        return sum

    else:

        return sum/n 


def addTrackToConstraint(ob, name, target):

    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ограничСния TrackTo

    cns = ob.constraints.new('TRACK_TO')

    cns.name = name

    cns.target = target

    cns.track_axis = 'TRACK_NEGATIVE_Z'

    cns.up_axis = 'UP_Y'

    cns.owner_space = 'WORLD'

    cns.target_space = 'WORLD'

    return 


def createLamp(name, lamptype, loc):

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ источника освСщСния

    bpy.ops.object.add(

        type='LAMP',

        location=loc)

    ob = bpy.context.object

    ob.name = name

    lamp = ob.data

    lamp.name = 'Lamp'+name

    lamp.type = lamptype

    return ob 


def createLamps(origin, target):

    deg2rad = 2*pi/360


    sun = createLamp('sun', 'SUN', origin+Vector((0,20,50)))

    lamp = sun.data

    lamp.type = 'SUN'

    addTrackToConstraint(sun, 'TrackMiddle', target)


    for ob in bpy.context.scene.objects:

        if ob.type == 'MESH':

            spot = createLamp(ob.name+'Spot', 'SPOT', ob.location+Vector((0,2,1)))

            bpy.ops.transform.resize(value=(0.5,0.5,0.5))

            lamp = spot.data


            # Π›Π°ΠΌΠΏΠ°

            lamp.type = 'SPOT'

            lamp.color = (0.5,0.5,0)

            lamp.energy = 0.9

            lamp.falloff_type = 'INVERSE_LINEAR'

            lamp.distance = 7.5


            # Π€ΠΎΡ€ΠΌΠ° Π»ΡƒΡ‡Π° ΠΏΡ€ΠΎΠΆΠ΅ΠΊΡ‚ΠΎΡ€Π°

            lamp.spot_size = 30*deg2rad

            lamp.spot_blend = 0.3


            # Π’Π΅Π½ΠΈ

            lamp.shadow_method = 'BUFFER_SHADOW'

            lamp.use_shadow_layer = True

            lamp.shadow_buffer_type = 'REGULAR'

            lamp.shadow_color = (0,0,1)


            addTrackToConstraint(spot, 'Track'+ob.name, ob)

    return 


def createCamera(origin, target):

    # Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹

    bpy.ops.object.add(

        type='CAMERA',

        location=origin,

        rotation=(pi/2,0,pi))

    ob = bpy.context.object

    ob.name = 'MyCamOb'

    cam = ob.data

    cam.name = 'MyCam'

    addTrackToConstraint(ob, 'TrackMiddle', target)



    # ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²

    cam.type = 'PERSP'

    cam.lens = 75

    cam.lens_unit = 'MILLIMETERS'

    cam.shift_x = -0.05

    cam.shift_y = 0.1

    cam.clip_start = 10.0

    cam.clip_end = 250.0


    empty = bpy.data.objects.new('DofEmpty', None)

    empty.location = origin+Vector((0,10,0))

    cam.dof_object = empty


    # ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

    cam.show_title_safe = True

    cam.show_name = True


    # Π”Π΅Π»Π°Π΅ΠΌ Π΅Ρ‘ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ

    scn = bpy.context.scene

    scn.camera = ob

    return ob  


def run(origin):

    # Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ всСх ΠΊΠ°ΠΌΠ΅Ρ€ ΠΈ Π»Π°ΠΌΠΏ

    scn = bpy.context.scene

    for ob in scn.objects:

        if ob.type == 'CAMERA' or ob.type == 'LAMP':

            scn.objects.unlink(ob)


    # Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΡΡ‚Ρ‹ΡˆΠΊΠΈ Π² сСрСдинС всСх Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

    midpoint = findMidPoint()

    bpy.ops.object.add(

        type='EMPTY',

        location=midpoint),

    target = bpy.context.object

    target.name = 'Target'


    createCamera(origin+Vector((50,90,50)), target)

    createLamps(origin, target)

    return


if __name__ == "__main__":

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



ΠœΠΈΡ€, Π²ΠΈΠ΄ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€

ΠœΠΈΡ€

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ настройки ΠœΠΈΡ€Π°. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ являСтся Ρ€Π΅Π½Π΄Π΅Ρ€ΠΎΠΌ ΠΊΡƒΠ±Π° ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ со встроСнной ΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ ΠΈ освСщСниСм.



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

# File world.py

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

import bpy 


def run():

    world = bpy.context.scene.world


    # Настройки ΠœΠΈΡ€Π°

    world.use_sky_blend = True

    world.ambient_color = (0.05, 0, 0)

    world.horizon_color = (0, 0, 0.2)

    world.zenith_color = (0.04, 0, 0.04)


    # Π—Π²Ρ‘Π·Π΄Ρ‹

    sset = world.star_settings

    sset.use_stars = True

    sset.average_separation = 17.8

    sset.color_random = 1.0

    sset.distance_min = 0.7

    sset.size = 10


    # ΠžΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅Π΅ освСщСниС

    wset = world.light_settings

    wset.use_environment_light = True

    wset.use_ambient_occlusion = True

    wset.ao_blend_type = 'MULTIPLY'

    wset.ao_factor = 0.8

    wset.gather_method = 'APPROXIMATE'


    # ВСкстура "Облака" (Clouds)

    tex = bpy.data.textures.new('Clouds', type = 'CLOUDS')

    tex.cloud_type = 'GREYSCALE'

    tex.noise_type = 'SOFT_NOISE'

    tex.noise_basis = 'ORIGINAL_PERLIN'

    tex.noise_scale = 0.06

    tex.noise_depth = 1


    # Установка тСкстуры ΠΊΠ°ΠΊ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ тСкстуры ΠœΠΈΡ€Π°

    world.active_texture = tex


    # Retrieve texture slot

    wtex = world.texture_slots[world.active_texture_index]

    print(wtex, world.active_texture_index)


    # Настройки тСкстурного слота

    wtex.use_map_blend = False

    wtex.use_map_horizon = False

    wtex.use_map_zenith_down = False

    wtex.use_map_zenith_up = True

    wtex.color = (1,1,1)

    wtex.texture_coords = 'VIEW'

    wtex.zenith_up_factor = 1.0 return


if __name__ == "__main__":

    run()


Π’ΠΈΠ΄ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ настройки Ρ€Π΅Π½Π΄Π΅Ρ€Π°, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° экран ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΈ измСняСт ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π² 3D-Π²ΠΈΠ΄Π΅. Π’ ΠΊΠΎΠ½Ρ†Π΅ стартуСт анимация, ΠΊ Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² старом Π²ΠΈΠ΄Π΅.


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

# File view.py

# Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ Π²ΠΈΠ΄ ΠΈ настройки Ρ€Π΅Π½Π΄Π΅Ρ€Π°

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

import bpy 


def setRenderSettings():

    render = bpy.context.scene.render

    render.resolution_x = 720

    render.resolution_y = 576

    render.resolution_percentage = 100

    render.fps = 24

    render.use_raytrace = False

    render.use_color_management = True

    render.use_sss = False

    return 


def setDefaultCameraView():

    for scrn in bpy.data.screens:

        if scrn.name == 'Default':

            bpy.context.window.screen = scrn

            for area in scrn.areas:

                if area.type == 'VIEW_3D':

                    for space in area.spaces:

                        if space.type == 'VIEW_3D':