| … | … | @@ -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.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, ")"); |
| 167 | 167 | return OK; |
| 168 | 168 | } |
| 169 | 169 | |
| … | … | @@ -984,18 +984,39 @@ void BlenderBridge::import_changes(Node *root) { |
| 984 | 984 | memcpy(mat_data, base + cursor, 44); |
| 985 | 985 | cursor += 44; |
| 986 | 986 | |
| 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); |
| 997 | 1019 | } |
| 998 | | mesh_inst->set_surface_override_material(0, std_mat); |
| 999 | 1020 | } |
| 1000 | 1021 | |
| 1001 | 1022 | } |