Шрифт:
import bpy
def makeMaterial(name, diffuse, specular, alpha):
mat = bpy.data.materials.new(name)
mat.diffuse_color = diffuse
mat.diffuse_shader = 'LAMBERT'
mat.diffuse_intensity = 1.0
mat.specular_color = specular
mat.specular_shader = 'COOKTORR'
mat.specular_intensity = 0.5
mat.alpha = alpha
mat.ambient = 1
return mat
def setMaterial(ob, mat):
me = ob.data
me.materials.append(mat)
def run(origin):
# Создание двух материалов
red = makeMaterial('Red', (1,0,0), (1,1,1), 1)
blue = makeMaterial('BlueSemi', (0,0,1), (0.5,0.5,0), 0.5)
# Создание синего куба
bpy.ops.mesh.primitive_cube_add(location=origin)
setMaterial(bpy.context.object, red)
# и красной сферы
bpy.ops.mesh.primitive_uv_sphere_add(location=origin)
bpy.ops.transform.translate(value=(1,0,0)
)
setMaterial(bpy.context.object, blue)
if __name__ == "__main__":
run((0,0,0))
Текстуры
Эта программа создает материал с двумя текстурами: текстура image, отображаемая на цвет и альфу, и процедурная bump-текстура. (Может я чего-то недопонимаю, но их там три вообще-то...
– прим. пер.)
Используйте этот рисунок как текстуру и измените имя на color.png:
#----------------------------------------------------------
# File texture.py
#----------------------------------------------------------
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
# Создание материала