From 2f3508ed3a7aff1558b7b4d5baadf72309fc2716 Mon Sep 17 00:00:00 2001 From: Roz K Date: Sat, 31 Dec 2022 06:20:30 +0100 Subject: [PATCH] Improve mesh indexing. --- game/obj2rkar.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/game/obj2rkar.py b/game/obj2rkar.py index 680a036..1d5ddaa 100644 --- a/game/obj2rkar.py +++ b/game/obj2rkar.py @@ -192,22 +192,29 @@ class ObjArchive(Archive): if name: assert mesh objects[name] = mesh - vertices = set() - for mesh in objects.values(): - vertices |= frozenset(chain.from_iterable(mesh)) - vertices = tuple(vertices) + + vertices = [] indices = [] models = {} for name, mesh in sorted(objects.items()): offset = len(indices) assert offset < 65536 - indices.extend(map(vertices.index, chain.from_iterable(mesh))) - count = len(indices) - offset + mesh_vertices = [] + for vertex in chain.from_iterable(mesh): + if vertex not in mesh_vertices: + mesh_vertices.append(vertex) + base_vertex = len(vertices) + mesh_indices = list(map(lambda v: mesh_vertices.index(v) + base_vertex, chain.from_iterable(mesh))) + assert max(mesh_indices) < 65536 + count = len(mesh_indices) + print(name, ": vertices =", count, "packed =", len(mesh_vertices)) assert count % 3 == 0 count //= 3 assert count < 65536 - print(name, ": offset =", offset, "triangles =", count) + vertices.extend(mesh_vertices) + indices.extend(mesh_indices) models[name] = (offset, count) + name = str(objpath.stem) assert name not in self.vertices_db.keys() #TODO: move to math