From 3ec3112acecd6c76705359d764aa4a0e5e551121 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Fri, 29 May 2026 09:04:42 +0200 Subject: [PATCH 1/3] Readme: bump max blender to 5.1.2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3906280a7..1f37369be 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Fast64 -This requires Blender 3.2 - 5.0.1. Blender 4.0+ is recommended. +This requires Blender 3.2 - 5.1.2. Blender 4.0+ is recommended. Forked from [kurethedead/fast64 on BitBucket](https://bitbucket.org/kurethedead/fast64/src). From 225472d58ce8ec23bee7d6efcf57b49cd75d939f Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Fri, 29 May 2026 09:54:31 +0200 Subject: [PATCH 2/3] fix vertex color importing in blender 5.1 --- fast64_internal/f3d/f3d_parser.py | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/fast64_internal/f3d/f3d_parser.py b/fast64_internal/f3d/f3d_parser.py index 8941f3363..b0594dbf7 100644 --- a/fast64_internal/f3d/f3d_parser.py +++ b/fast64_internal/f3d/f3d_parser.py @@ -1864,7 +1864,7 @@ def deleteMaterialContext(self): raise PluginError("Attempting to delete material context that is None.") # if deleteMaterialContext is False, then manually call self.deleteMaterialContext() later. - def createMesh(self, obj, removeDoubles, importNormals, callDeleteMaterialContext: bool): + def createMesh(self, obj: bpy.types.Object, removeDoubles, importNormals, callDeleteMaterialContext: bool): mesh = obj.data if len(self.verts) % 3 != 0: print(len(self.verts)) @@ -1902,13 +1902,26 @@ def createMesh(self, obj, removeDoubles, importNormals, callDeleteMaterialContex # There will be one loop for every vertex uv_layer[i].uv = self.verts[i].uv - color_layer = mesh.vertex_colors.new(name="Col").data - for i in range(len(mesh.loops)): - color_layer[i].color = self.verts[i].rgb.to_4d() - - alpha_layer = mesh.vertex_colors.new(name="Alpha").data - for i in range(len(mesh.loops)): - alpha_layer[i].color = [self.verts[i].alpha] * 3 + [1] + # The mesh.vertex_colors is deprecated since a long time, + # and its usage by fast64 here breaks in Blender 5.1 somehow. + # (can't replicate in simple cases) + if bpy.app.version < (5, 1, 0): + color_layer = mesh.vertex_colors.new(name="Col").data + for i in range(len(mesh.loops)): + color_layer[i].color = self.verts[i].rgb.to_4d() + + alpha_layer = mesh.vertex_colors.new(name="Alpha").data + for i in range(len(mesh.loops)): + alpha_layer[i].color = [self.verts[i].alpha] * 3 + [1] + else: + col_attr = mesh.color_attributes.new("Col", "BYTE_COLOR", "CORNER") + for i in range(len(mesh.loops)): + col_attr.data[i].color = (*self.verts[i].rgb, 1) + + alpha_attr = mesh.color_attributes.new("Alpha", "BYTE_COLOR", "CORNER") + for i in range(len(mesh.loops)): + a = self.verts[i].alpha + alpha_attr.data[i].color = (a, a, a, 1) if bpy.context.mode != "OBJECT": bpy.ops.object.mode_set(mode="OBJECT") From e93c3ce5d8506587acbaee08548f8efc589f91e2 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Fri, 29 May 2026 13:56:29 +0200 Subject: [PATCH 3/3] Use color_attributes API for Blender 3.2+ too --- fast64_internal/f3d/f3d_parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fast64_internal/f3d/f3d_parser.py b/fast64_internal/f3d/f3d_parser.py index b0594dbf7..baa1c0fcc 100644 --- a/fast64_internal/f3d/f3d_parser.py +++ b/fast64_internal/f3d/f3d_parser.py @@ -1902,10 +1902,10 @@ def createMesh(self, obj: bpy.types.Object, removeDoubles, importNormals, callDe # There will be one loop for every vertex uv_layer[i].uv = self.verts[i].uv - # The mesh.vertex_colors is deprecated since a long time, + # The mesh.vertex_colors API is deprecated since Blender 3.2, # and its usage by fast64 here breaks in Blender 5.1 somehow. # (can't replicate in simple cases) - if bpy.app.version < (5, 1, 0): + if bpy.app.version < (3, 2, 0): color_layer = mesh.vertex_colors.new(name="Col").data for i in range(len(mesh.loops)): color_layer[i].color = self.verts[i].rgb.to_4d()