Сохранение progressive ogf мешей
Эта проблема так же есть в game level экспортёре: #328
@igelbox у меня тоже была идея использовать decimate модификатор, но я решил этого не делать, так как не просто так в оригинальных моделях по одному ребру уменьшается детализация. Может быть есть какая-то причина так плавно уменьшать детализацию.
Когда тестировал swi, я создавал меш, который отображает смещение и количество треугольников в виде линий:
Одна полоска - это swi. Начало полоски - это offset, а конец полоски - это offset + triangles_count.
У некоторых swi есть пересекающиеся диапазоны треугольников. Отличается только начало и конец.
Значения vertices count можно легко сгенерировать, так как оно увеличивается на 1 в каждой последующей swi.
Значения triangles count тоже легко сгенерировать, они тоже увеличиваются, но на 2.
А offset легко сгенерировать, если диапазоны треугольников пересекаются.
Проблема в том, что треугольники нужно отсортировать так, чтобы offset можно было наращивать (прибавлять 6, так как 2 треугольника хранят 6 индексов) и получать корректную модель.
Вот код, который создаёт меш на картинке:
import bpy
a = (
(651, 80, 63),
(639, 78, 62),
(627, 76, 61),
(615, 74, 60),
(603, 72, 59),
(591, 70, 58),
(579, 68, 57),
(567, 66, 56),
(375, 64, 55),
(363, 62, 54),
(354, 60, 53),
(345, 58, 52),
(336, 56, 51),
(330, 54, 50),
(174, 52, 49),
(162, 50, 48),
(150, 48, 47),
(141, 46, 46),
(9, 44, 45),
(0, 42, 44)
)
verts = []
fcount = 0
for i, (o, f, v) in enumerate(a):
verts.extend((
(o * 0.1, i * 0.2, 0.0),
(o * 0.1, i * 0.2 + 0.1, 0.0),
(o * 0.1 + f * 3 * 0.1, i * 0.2 + 0.1, 0.0),
(o * 0.1 + f * 3 * 0.1, i * 0.2, 0.0)
))
fcount += 1
faces = []
for i in range(fcount):
faces.append((i*4, i*4+1, i*4+2, i*4+3))
me = bpy.data.meshes[0]
me.clear_geometry()
me.from_pydata(verts, (), faces)
Кортеж a хранит swi из реального ogf файла. Первое число - смещение, второе - количество треугольников, третье - количество вершин.
@SamArtGit, спасибо за наводку от atanda про Sliding Window VIPM with Hugue's Hoppe QEM. Я там разное интересное по этой теме нашёл.
Скопировал из #468, чтоб всё в 1м месте было:
Поигрался я тут с SWI на примере green_stalker_4.ogf и вот видно, что там хренова куча SWI-уровней и на каждом пропадает по 1 ребру. Но, самое странное, почему-то мелкие детали (сумки, шарф, сапоги) не упрощаются даже на самых низкодетализированных уровнях:
https://user-images.githubusercontent.com/5264687/155866919-130fe066-5b37-4f22-99a6-28c46e7c4a38.mov
А хочется узнать - есть какой-либо прогресс по данному топику? Фича очень-очень, поэтому интересно есть ли что-то на ближайшее будущее.
Есть PR #472, он ждёт ревью. Пока он не замёржен - можете попробовать установить аддон из ветки, что в этом PR указана. Заодно и с тестированием поможете - может я там чего странного понаписал.