diff --git a/rbxl-importer/src/__pycache__/rbxl_xml_parser.cpython-314.pyc b/rbxl-importer/src/__pycache__/rbxl_xml_parser.cpython-314.pyc index c20812b..b54fe31 100644 Binary files a/rbxl-importer/src/__pycache__/rbxl_xml_parser.cpython-314.pyc and b/rbxl-importer/src/__pycache__/rbxl_xml_parser.cpython-314.pyc differ diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 9e6a556..6f23b06 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -507,6 +507,11 @@ export class PrimitiveManager { const matName = `${mesh.name}_mat`; const mat = new StandardMaterial(matName, this.scene); mat.diffuseColor = Color3.FromHexString(color || '#888888'); + // ambient — даёт «среднее» освещение боковым граням что не освещены + // прямо. Без этого scene.ambientColor=(0.3,0.3,0.3) не работает — + // материал тени получает только diffuse от hemi, что приводит к + // тёмно-грязным цветам в импортированных Roblox-картах. + mat.ambientColor = new Color3(1, 1, 1); // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // используется для GD-скинов куба (например /gd/skins/cube_smile.png). @@ -567,9 +572,20 @@ export class PrimitiveManager { break; } case 'matte': - default: mat.specularColor = new Color3(0, 0, 0); break; + case 'glossy': + default: { + // Roblox Plastic — это белый specular маленький + цвет «сочный» + // даже в тени. Подмешиваем 25% цвета в emissive чтобы избежать + // грязных тёмных пятен в импортированных Roblox-картах + // (Crossroads и подобные). Specular низкий и нейтральный. + const dc = Color3.FromHexString(color || '#cccccc'); + mat.emissiveColor = new Color3(dc.r * 0.25, dc.g * 0.25, dc.b * 0.25); + mat.specularColor = new Color3(0.05, 0.05, 0.05); + mat.specularPower = 64; + break; + } } // Триггеры — всегда полупрозрачные жёлтые в редакторе