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':
space.viewport_shade = 'SOLID'
reg = space.region_3d
reg.view_perspective = 'CAMERA' break
return
def run():
setRenderSettings()
setDefaultCameraView()
# стартует анимация, к несчастью в старом виде.
bpy.ops.screen.animation_play(reverse=False, sync=False)
return
if __name__ == "__main__":
run()
RNA-свойства против ID-свойств
В Блендере есть два различных типа свойств: ID-свойства и RNA-свойства. RNA-свойства расширяют определение структуры данных. Они должны быть объявлены до того, как будут использоваться.
Я потратил некоторое время на выяснение того, как же расшифровывается и что означает аббревиатура RNA для программирования на Питоне в Блендере. Может быть, я был недостаточно настойчив в поисках, но всё, что я нашел — это РНК, Рибонуклеиновая кислота. Разработчики применили химико-биологическую метафору для обозначения реальных структур данных на языке С (DNA, в переводе ДНК) и соответствующих им структур на Питоне (RNA, в переводе РНК). С понятием ID, думаю все и так знакомы, это сокращение слова Идентификатор. - прим. пер.
bpy.types.Object.myRnaInt = bpy.props.IntProperty(
name = "RNA int",
min = -100,
max = 100,
default = 33)
Как только RNA-свойства были объявлены, они будут доступны через точечный синтаксис:
cube.myRnaInt = -99
После декларации RNA-свойства myRnaInt расширяет определение структуры данных Object, каждый объект будет иметь это свойство.
ID-cвойство добавляется к единственному блоку данных, не влияя на другие данные того же самого типа. Ему не нужна какая-либо предварительная декларация, но оно автоматически определяется при присвоении, напр.
cube.data["MyIdInt"] = 4711
ID-свойства могут только быть целыми, вещественными, и строками; другие типы автоматически будут преобразованы. Следовательно, строка
cube.data["MyIdBool"] = True
определяет целое ID-свойство, а не логическое.
Не знаю, как в предыдущих версиях, а в 2.57 вполне можно определять списки — прим. пер.
Свойства сохраняются в blend-файле, но декларации свойств — нет.
Вот скрипт, который создает три меша, назначает различные свойства и печатает их величины в консоли.
#----------------------------------------------------------
# File properties.py
#----------------------------------------------------------
import bpy
from bpy.props import *
# Очистка сцены и создание нескольких объектов
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()
bpy.ops.mesh.primitive_cube_add(location=(-3,0,0))
cube = bpy.context.object
bpy.ops.mesh.primitive_cylinder_add(location=(0,0,0))
cyl = bpy.context.object
bpy.ops.mesh.primitive_uv_sphere_add(location=(3,0,0))
sphere = bpy.context.object
# Определение RNA-свойства для каждого объекта
bpy.types.Object.myRnaInt = IntProperty(
name = "RNA int",
min = -100, max = 100,
default = 33)
bpy.types.Object.myRnaFloat = FloatProperty(
Читать дальше