Для того чтобы экспортировать геометрию из Blender в отдельный файл в формате OBJ нужно в главном меню выбрать пункт File — Export — Wavefront (obj) и указать путь, куда нужно сохранить .obj файл.
Также экспортировать геометрию в формат OBJ из Blender можно при помощи Blender Python API.
Чтобы экспортировать текущий выделенный объект, например, дефолтный куб, нужно вызвать следующий оператор:
|
1 2 3 4 |
bpy.ops.wm.obj_export( filepath='_filepathname_.obj', export_selected_objects=True ) |
В параметрах оператору передается полный путь с именем файла, куда нужно сохранить экспортируемую геометрию и флаг — указание, экспортировать из сцены только выделенные объекты.
Открыть созданный .obj файл мы можем в любом текстовом редакторе.
Данные экспорта записываются в файл .obj в следующем формате:
В первых строках идет заголовок-комментарий, указывающий что этот файл был создан в Blender определенной версии. Заодно дается ссылка на официальный сайт Blender.
|
1 2 |
# Blender 5.1.0 # www.blender.org |
В следующей строке указывается имя файла, в котором сохраняются текстуры, наложенные на меш.
|
1 |
_filename_.mtl |
Далее идет описание экспортированного объекта. Сначала его имя, в строке начинающейся с форманта «o».
|
1 |
o Cube |
Далее идет набор строк, начинающихся с форманта «v». Каждая строка соответствует одной точке меша. В каждой строке через пробел указываются три значения — это координаты данной точки меша в глобальном пространстве.
Для экспортированного дефолтного куба секция с координатами будет выглядеть следующим образом: восемь строк с последующими координатами восьми точек куба.
|
1 2 3 4 5 6 7 8 |
v -1.000000 -1.000000 1.000000 v -1.000000 1.000000 1.000000 v -1.000000 -1.000000 -1.000000 v -1.000000 1.000000 -1.000000 v 1.000000 -1.000000 1.000000 v 1.000000 1.000000 1.000000 v 1.000000 -1.000000 -1.000000 v 1.000000 1.000000 -1.000000 |
Далее идет секция, описывающая нормали полигонов. Каждой нормали соответствует одна строка и начинается она с форманта «vn». Количество строк соответствует количеству полигонов в меше. В секцию пишутся нормали полигонов, если выбран Flat Shading или угловые нормали, если включен Smooth Shading (сглаживание). Значение нормали пишется в виде нормализованного вектора (длина вектора приведена к 1.0) и отсчитывается от начала координат.
Для куба с Flat Shading эта секция будет выглядеть следующим образом:
|
1 2 3 4 5 6 |
vn -1.0000 -0.0000 -0.0000 vn -0.0000 -0.0000 -1.0000 vn 1.0000 -0.0000 -0.0000 vn -0.0000 -0.0000 1.0000 vn -0.0000 -1.0000 -0.0000 vn -0.0000 1.0000 -0.0000 |
Далее идет секция для описания наложения UV-развертки. В ней каждая строка начинается с форманта «vt». Количество строк соответствует количеству точек на UV развертке меша. Каждая строка описывает координаты одной точки на UV-развертке в 2D пространстве.
Для развертки куба, сделанной автоматически, секция будет иметь следующий вид:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
vt 0.375000 0.000000 vt 0.625000 0.000000 vt 0.625000 0.250000 vt 0.375000 0.250000 vt 0.625000 0.500000 vt 0.375000 0.500000 vt 0.625000 0.750000 vt 0.375000 0.750000 vt 0.625000 1.000000 vt 0.375000 1.000000 vt 0.125000 0.500000 vt 0.125000 0.750000 vt 0.875000 0.500000 vt 0.875000 0.750000 |
Далее идет одна строка, начинающаяся с форманта «s» и являющаяся флагом — указанием на то, включен сглаженный шейдинг Shade Smooth или нет. Если используется Flat Shading значение в этой строке равно 0, если используется Smooth Shading — значение равно 1.
|
1 |
s 0 |
И, наконец, последняя секция .obj файла, которая описывает построение полигонов.
Каждая строка этой секции начинается с форманта «f». Количество строк соответствует количеству полигонов меша.
Для нашего дефолтного куба эта секция имеет вид:
|
1 2 3 4 5 6 |
f 1/1/1 2/2/1 4/3/1 3/4/1 f 3/4/2 4/3/2 8/5/2 7/6/2 f 7/6/3 8/5/3 6/7/3 5/8/3 f 5/8/4 6/7/4 2/9/4 1/10/4 f 3/11/5 7/6/5 5/8/5 1/12/5 f 8/5/6 4/13/6 2/14/6 6/7/6 |
Внешне эта секция выглядит самой сложной, но на самом деле здесь все достаточно просто.
Каждая строка представляет собой список точек, образующих данный полигон. Данные по каждой точке разделены пробелами.
Описание каждой точки полигона представляет собой три значения, разделенных слешами. Первое значение — индекс точки в списке точек (секции «v»). Второе значение — индекс точки в списке точек UV-развертки (секция «vt»). И третье значение — индекс нормали в списке нормалей (секция «vn»).
Например, в нашем файле с экспортом дефолтного куба в первой строки секций полигонов первое значение записывается как 1/1/1. Это описание первой точки первого полигона нашего куба. Первый индекс 1 — указывает на первую строку в секции точек, то есть, дает нам координаты этой точки. Второй индекс 1 — указывает на первую строчку в секции развертки, то есть, дает нам координаты этой точки в 2D пространстве UV развертки. И третий индекс 1 — указывает на первую строку в секции нормалей, то есть дает нам вектор нормали для этого полигона.
Для второй точки полигона, значение 2/2/1 все расшифровывается точно так же. Вторая строка в списке точек дает нам координаты в 3D пространстве, вторая строка в списке развертки дает нам координаты для этой точки полигона в 2D пространстве развертки, и первая строка в списке нормалей дает нам вектор нормали для этого полигона.

.blend file on Patreon