ПрограммированиеФорумГрафика

как экспортировать obj с фиксированным количеством vt ?

#0
13:13, 8 сен 2024

В структуре 3д модели файла игры вначале идут координаты вершины, затем отступ несколько байтов, и после идут координаты vt (uv).  Таким образом на каждую вершину приходится отдна текстурная вершина (vt).

+ Показать

Но при экспорте из блендера .obj файла, в нём количество vt гуляет и может быть как больше так и меньше количества вершин. Kак при экспорте получить точное количество vt , чтобы совпадало с количеством вершин у модели, чтобы после я смог спокойно это вставить в файл игры ?

#1
14:02, 8 сен 2024

Никак, obj для этого не приспособлен. Либо используйте другой формат, либо пишете парсер obj, который будет собирать уникальные вершины из индексов треугольников.

#2
14:09, 8 сен 2024

fdx
> Kак
Face elements
Faces are defined using lists of vertex, texture and normal indices in the format vertex_index/texture_index/normal_index for which each index starts at 1 and increases corresponding to the order in which the referenced element was defined. Polygons such as quadrilaterals can be defined by using more than three indices.

https://en.wikipedia.org/wiki/Wavefront_.obj_file

#3
14:44, 8 сен 2024

Используйте формат *.ply вместо *.obj.
Или пишите  python-скрипт экспорта меша для блендер (это будет самый правильный вариант).

fdx
> чтобы после я смог спокойно это
> вставить в файл игры ?
Своей игры?
Файл игры?

#4
15:13, 8 сен 2024

Это оптимизация. у норм экспортёра есть опция выключения оптимизации

#5
17:52, 8 сен 2024

iw4nna.rock
> пишите python-скрипт экспорта меша для блендер (это будет самый правильный вариант).
+ 1

А так, да ...  методология и термины, прямо как на машине времени в 30 лет назад попал )))

#6
8:20, 9 сен 2024

Вот оригинальный .obj файл из игры: 1.zip Количество vt жёстко соответствует количеству вершин; Все индексы равны номерам вершин. То, как надо короче. А вот измененный файл: 2.zip при экспорте из блендера он добавил лишние 2 vt, ну и индексы перемешал под конец. Может нужна определенная методика наложения uv или особенности моделирования, чтобы все вышло именно так как надо ? Ведь оригинальный .obj blender экспортирует правильно. Есть идеи, как это сделать?

#7
9:05, 9 сен 2024

iw4nna.rock
Нет, не своей, но очень известной. Для неё есть только скрипты, вытаскивающие 3д модели в блендер, а заталкивающих обратно нет. Поэтому модов нормальных нет на эту игру, а желание у людей есть. И вот я как раз и пишу заталкивающий скрипт.

#8
14:52, 9 сен 2024

fdx
> Может нужна определенная методика наложения uv или особенности моделирования, чтобы все вышло именно так как надо ?
нет, формат OBJ, так устроен, что хранит все позиции, нормали, текстурные координаты отдельными наборами и в индексированном виде (то есть не хранит одинаковые позиции или нормали). Это сделано для уменьшения размера файла.
Если вам нужен файл OBJ без "сжатия", то вам нужно написать программу для перестройки OBJ или программу для перестройки PLY в OBJ, или написать python-скрипт прямо в блендере и запускать его для сохранения OBJ в нужном вам виде.

#9
7:15, 10 сен 2024

iw4nna.rock
  ply формат мне понравился, однако если в uv разметке и раньше vt было на 2шт больше чем v вершин, оно так и останется и в ply. При сохранении в ply он просто дорисует ещё 2шт v вершин, чтобы подогнать их количество под количество vt. В итоге общее число вершин меняется. Можно конечно изначально убрать у модели 1-2 вершины и тогда, прибавляя, количество вершин возвратится к изначальному.

  В итоге опять это вопрос больше по методике наложения uv и особенностями моделирования, ведь именно из-за uv разметки количество vt больше чем v.

#10
7:51, 10 сен 2024

fdx
Все верно.
Ты сам себе противоречишь.
Сначала ты хочешь одинаковое количество всех атрибутов, а сейчас жалуешься что тебе дописали ещё тех атрибутов, которых было меньше.
Ну а что экспортёру остаётся делать, если позиции вершин совпадают (одна вершина по сути), но uv у них разные? Логично, он разрежет модель как на текстурной развёртке и количество вершин увеличится

#11
8:03, 10 сен 2024

AMM1AK
понятно.. значит нужно дублировать вершины в одной точке по шву, и тогда все vt будут уникальными

#12
9:57, 10 сен 2024

fdx
Ну ты сам ничего не должен дублировать.
Это экспортёр сделает за тебя. А ты уже читай в движке что он насохранял и рисуй

#13
10:18, 10 сен 2024

fdx вершина дублируется , если другая нормаль или uv.
Например:

 v1  = 1,1,1
 uv1 = 0,1
 uv2 = 0,-1
 n1  = 0,1,0

f 1/1/1 //vrtx num,uv num, normal num. Номер индекса вершины ноль.
f 1/2/1 //это уже новая вершина(из-за uv2). Номер индекса вершины один.
ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.