OverviewFilesCommitsIssuesDocsReleasesPeers

blender-bridge commits / ef79a96

Wire VT materials to imported meshes (v0.13.2)
In import_changes(), when a VirtualTexture node is configured and has registered textures, imported meshes get a ShaderMaterial that samples from the VT atlas instead of a flat-color StandardMaterial3D. Falls back to StandardMaterial3D when VT has no textures or is unconfigured. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ef79a966d3dd238461de9879768f4bb6e2266ad1
by plankatron <fleeky@gmail.com> · 2026-03-03T20:42:05.000Z

Changed files (3) +35 -14

blender_addon/__init__.py +1 -1
……@@ -11,7 +11,7 @@ Usage:
1111
1212import bpy
1313
14ADDON_VERSION = "0.13.1"
14ADDON_VERSION = "0.13.2"
1515
1616# Support hot-reload (F3 > Reload Scripts)
1717if "shm_protocol" in locals():
blender_addon/blender_manifest.toml +1 -1
……@@ -2,7 +2,7 @@ schema_version = "1.0.0"
22id = "blender_godot_bridge"
33name = "Blender-Godot Bridge"
44tagline = "Real-time bidirectional scene sync with Godot"
5version = "0.13.1"
5version = "0.13.2"
66blender_version_min = "4.2.0"
77type = "add-on"
88maintainer = "blender-bridge <noreply@localhost>"
src/blender_bridge.cpp +33 -12
……@@ -163,7 +163,7 @@ Error BlenderBridge::start_server(const String &socket_path) {
163163 _known_instance_ids.clear();
164164 _next_object_id = 1;
165165
166 UtilityFunctions::print("BlenderBridge v0.13.1: Server started (shm=", _shm_name, ", sock=", socket_path, ", regions=2x", (int)_region_size, ")");
166 UtilityFunctions::print("BlenderBridge v0.13.2: Server started (shm=", _shm_name, ", sock=", socket_path, ", regions=2x", (int)_region_size, ")");
167167 return OK;
168168}
169169
……@@ -984,18 +984,39 @@ void BlenderBridge::import_changes(Node *root) {
984984 memcpy(mat_data, base + cursor, 44);
985985 cursor += 44;
986986
987 Ref<StandardMaterial3D> std_mat;
988 std_mat.instantiate();
989 std_mat->set_albedo(Color(mat_data[0], mat_data[1], mat_data[2], mat_data[3]));
990 std_mat->set_roughness(mat_data[4]);
991 std_mat->set_metallic(mat_data[5]);
992 Color emission(mat_data[6], mat_data[7], mat_data[8], mat_data[9]);
993 if (emission.r > 0.0f || emission.g > 0.0f || emission.b > 0.0f) {
994 std_mat->set_feature(BaseMaterial3D::FEATURE_EMISSION, true);
995 std_mat->set_emission(emission);
996 std_mat->set_emission_energy_multiplier(mat_data[10]);
987 Color albedo(mat_data[0], mat_data[1], mat_data[2], mat_data[3]);
988 float roughness_val = mat_data[4];
989 float metallic_val = mat_data[5];
990
991 // Try VT material first (shows Blender image textures via atlas)
992 bool used_vt = false;
993 if (!_virtual_texture_path.is_empty()) {
994 Node *vt_node = get_node_or_null(_virtual_texture_path);
995 VirtualTexture *vt = Object::cast_to<VirtualTexture>(vt_node);
996 if (vt && vt->get_texture_count() > 0) {
997 Ref<ShaderMaterial> vt_mat = vt->create_vt_material(albedo, roughness_val, metallic_val);
998 if (vt_mat.is_valid()) {
999 mesh_inst->set_surface_override_material(0, vt_mat);
1000 used_vt = true;
1001 }
1002 }
1003 }
1004
1005 // Fallback: StandardMaterial3D with flat colors
1006 if (!used_vt) {
1007 Ref<StandardMaterial3D> std_mat;
1008 std_mat.instantiate();
1009 std_mat->set_albedo(albedo);
1010 std_mat->set_roughness(roughness_val);
1011 std_mat->set_metallic(metallic_val);
1012 Color emission(mat_data[6], mat_data[7], mat_data[8], mat_data[9]);
1013 if (emission.r > 0.0f || emission.g > 0.0f || emission.b > 0.0f) {
1014 std_mat->set_feature(BaseMaterial3D::FEATURE_EMISSION, true);
1015 std_mat->set_emission(emission);
1016 std_mat->set_emission_energy_multiplier(mat_data[10]);
1017 }
1018 mesh_inst->set_surface_override_material(0, std_mat);
9971019 }
998 mesh_inst->set_surface_override_material(0, std_mat);
9991020 }
10001021
10011022 }