Процедурная генерация великолепна! В
этом уроке мы рассмотрим создание меша с использованием блендеровского Python
API.Создание мешей
программными способами открывает множество возможностей. Вы можете создавать
параметрические объекты, которые отвечают размерам реального мира, генеративное
искусство, формы на основе математических формул или даже процедурный контент
для игр. Blender – отличный выбор для такого рода работ, поскольку он сочетает
в себе полномасштабный набор инструментов моделирования и анимации с мощным (и
достаточно хорошо документированным) Python API.
В этой серии мы
рассмотрим создание нескольких примитивов и некоторых базовых преобразований, а
также рассмотрим некоторые ухищрения, которые упростят процесс разработки
дополнений. Я предполагаю, что вы уже знаете Python на базовом уровне и
достаточно знакомы с Blender. Поэтому мы пропустим введение в мир 3D и
сосредоточимся на создании простой плоской сетки.Совет для
профессионалов: Сохраняйтесь как можно чаще! Blender может вылететь неоднократно :)Настройка.В системе данных
Blender существует различие между данными меша и объектами в сцене. Мы должны
добавить меш и связать его с объектом, а затем связать этот объект со сценой,
прежде чем мы сможем увидеть какие-либо результаты.Начнем с импорта bpy
(сюрприз!) и создания некоторых переменных.
import bpy
# Settings
name = 'Gridtastic'
rows = 5
columns = 10
|
verts = []
faces = []
# Create Mesh Datablock
mesh = bpy.data.meshes.new(name)
mesh.from_pydata(verts, [], faces)
# Create Object and link to scene
obj = bpy.data.objects.new(name, mesh)
bpy.context.scene.objects.link(obj)
# Select the object
bpy.context.scene.objects.active = obj
obj.select = True
|
verts = [(0, 0, 0)]
|
verts = [(x, 0, 0) for x in range(columns)]
|
verts = [(x, y, 0) for x in range(columns) for y in range(rows)]
|
bpy.app.debug = True
|
faces = [(0, 1, 5, 6)]
Попробуйте запустить скрипт еще раз и… подождите, что-то не так! Похоже, мы связали неправильные вершины.
|
- Все индексы увеличиваются на 5 по оси X. Их количество равно количеству столбцов.
- Первый индекс начинается с 0, второй на 1 больше.
for x in range(columns - 1):
print(x * rows)
print(x * rows + 1)
|
for x in range(columns - 1):
print('first:', x *
rows)
print('second:', x * rows + 1)
print('third:', (x + 1) * rows + 1)
print('fourth:', (x + 1) * rows)
print('---')
|
def face(column, row):
""" Create a single face """
return (column * rows + row,
column * rows + 1 + row,
(column + 1) * rows
+ 1 + row,
(column + 1) * rows
+ row)
|
faces = [face(x, y) for x in range(columns - 1) for y in range(rows - 1)]
|
size = 1
def vert(column, row):
""" Create a single vert """
return (column * size, row * size, 0)
verts = [vert(x, y) for x in range(columns) for y in range(rows)]
Попробуйте установить размер
во что-то отличное от 1 и проверьте сетку.
Финальный код.
Завершение.
Надеюсь, вам
понравилось это введение в создание мешей на Python. Это только самый простой
пример и есть много других интересных вещей. Вот несколько простых вещей,
которые вы можете попытаться реализовать самостоятельно:
|
Комментариев нет:
Отправить комментарий