В структуре 3д модели файла игры вначале идут координаты вершины, затем отступ несколько байтов, и после идут координаты vt (uv). Таким образом на каждую вершину приходится отдна текстурная вершина (vt).
Но при экспорте из блендера .obj файла, в нём количество vt гуляет и может быть как больше так и меньше количества вершин. Kак при экспорте получить точное количество vt , чтобы совпадало с количеством вершин у модели, чтобы после я смог спокойно это вставить в файл игры ?
Никак, obj для этого не приспособлен. Либо используйте другой формат, либо пишете парсер obj, который будет собирать уникальные вершины из индексов треугольников.
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.
Используйте формат *.ply вместо *.obj.
Или пишите python-скрипт экспорта меша для блендер (это будет самый правильный вариант).
fdx
> чтобы после я смог спокойно это
> вставить в файл игры ?
Своей игры?
Файл игры?
Это оптимизация. у норм экспортёра есть опция выключения оптимизации
iw4nna.rock
> пишите python-скрипт экспорта меша для блендер (это будет самый правильный вариант).
+ 1
А так, да ... методология и термины, прямо как на машине времени в 30 лет назад попал )))
Вот оригинальный .obj файл из игры: 1.zip Количество vt жёстко соответствует количеству вершин; Все индексы равны номерам вершин. То, как надо короче. А вот измененный файл: 2.zip при экспорте из блендера он добавил лишние 2 vt, ну и индексы перемешал под конец. Может нужна определенная методика наложения uv или особенности моделирования, чтобы все вышло именно так как надо ? Ведь оригинальный .obj blender экспортирует правильно. Есть идеи, как это сделать?
iw4nna.rock
Нет, не своей, но очень известной. Для неё есть только скрипты, вытаскивающие 3д модели в блендер, а заталкивающих обратно нет. Поэтому модов нормальных нет на эту игру, а желание у людей есть. И вот я как раз и пишу заталкивающий скрипт.
fdx
> Может нужна определенная методика наложения uv или особенности моделирования, чтобы все вышло именно так как надо ?
нет, формат OBJ, так устроен, что хранит все позиции, нормали, текстурные координаты отдельными наборами и в индексированном виде (то есть не хранит одинаковые позиции или нормали). Это сделано для уменьшения размера файла.
Если вам нужен файл OBJ без "сжатия", то вам нужно написать программу для перестройки OBJ или программу для перестройки PLY в OBJ, или написать python-скрипт прямо в блендере и запускать его для сохранения OBJ в нужном вам виде.
iw4nna.rock
ply формат мне понравился, однако если в uv разметке и раньше vt было на 2шт больше чем v вершин, оно так и останется и в ply. При сохранении в ply он просто дорисует ещё 2шт v вершин, чтобы подогнать их количество под количество vt. В итоге общее число вершин меняется. Можно конечно изначально убрать у модели 1-2 вершины и тогда, прибавляя, количество вершин возвратится к изначальному.
В итоге опять это вопрос больше по методике наложения uv и особенностями моделирования, ведь именно из-за uv разметки количество vt больше чем v.
fdx
Все верно.
Ты сам себе противоречишь.
Сначала ты хочешь одинаковое количество всех атрибутов, а сейчас жалуешься что тебе дописали ещё тех атрибутов, которых было меньше.
Ну а что экспортёру остаётся делать, если позиции вершин совпадают (одна вершина по сути), но uv у них разные? Логично, он разрежет модель как на текстурной развёртке и количество вершин увеличится
AMM1AK
понятно.. значит нужно дублировать вершины в одной точке по шву, и тогда все vt будут уникальными
fdx
Ну ты сам ничего не должен дублировать.
Это экспортёр сделает за тебя. А ты уже читай в движке что он насохранял и рисуй
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). Номер индекса вершины один.
Тема в архиве.
Тема закрыта.