| … | … | @@ -11,7 +11,7 @@ Usage: |
| 11 | 11 | |
| 12 | 12 | import bpy |
| 13 | 13 | |
| 14 | ADDON_VERSION = "0.12.1" | |
| 14 | ADDON_VERSION = "0.12.2" | |
| 15 | 15 | |
| 16 | 16 | # Support hot-reload (F3 > Reload Scripts) |
| 17 | 17 | if "shm_protocol" in locals(): |
| … | … | @@ -2,7 +2,7 @@ schema_version = "1.0.0" |
| 2 | 2 | id = "blender_godot_bridge" |
| 3 | 3 | name = "Blender-Godot Bridge" |
| 4 | 4 | tagline = "Real-time bidirectional scene sync with Godot" |
| 5 | version = "0.12.1" | |
| 5 | version = "0.12.2" | |
| 6 | 6 | blender_version_min = "4.2.0" |
| 7 | 7 | type = "add-on" |
| 8 | 8 | maintainer = "blender-bridge <noreply@localhost>" |
| … | … | @@ -267,10 +267,14 @@ class ChangeDetector: |
| 267 | 267 | all_verts.append((pos.x, pos.y, pos.z)) |
| 268 | 268 | |
| 269 | 269 | for tri in inst_mesh.loop_triangles: |
| 270 | # Reverse winding (swap vertices 1↔2) so from_pydata() | |
| 271 | # produces outward-facing normals. loop_triangles.vertices | |
| 272 | # uses the internal loop order which, when fed to from_pydata | |
| 273 | # as a new standalone mesh, creates inward-facing faces. | |
| 270 | 274 | all_faces.append(( |
| 271 | 275 | tri.vertices[0] + vert_offset, |
| 272 | tri.vertices[1] + vert_offset, | |
| 273 | 276 | tri.vertices[2] + vert_offset, |
| 277 | tri.vertices[1] + vert_offset, | |
| 274 | 278 | )) |
| 275 | 279 | |
| 276 | 280 | vert_offset += len(inst_mesh.vertices) |
| … | … | @@ -163,7 +163,7 @@ Error BlenderBridge::start_server(const String &socket_path) { |
| 163 | 163 | _known_instance_ids.clear(); |
| 164 | 164 | _next_object_id = 1; |
| 165 | 165 | |
| 166 | UtilityFunctions::print("BlenderBridge v0.12.1: Server started (shm=", _shm_name, ", sock=", socket_path, ", regions=2x", (int)_region_size, ")"); | |
| 166 | UtilityFunctions::print("BlenderBridge v0.12.2: Server started (shm=", _shm_name, ", sock=", socket_path, ", regions=2x", (int)_region_size, ")"); | |
| 167 | 167 | return OK; |
| 168 | 168 | } |
| 169 | 169 |