From 14e173a0891f7fb2e14b6ec13b640f6165df2e4d Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 16:49:54 +0300 Subject: [PATCH] =?UTF-8?q?fix(import):=20=D1=81=D0=BE=D1=87=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=86=D0=B2=D0=B5=D1=82=D0=B0=20=D0=B2=20=D0=B8=D0=BC?= =?UTF-8?q?=D0=BF=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D1=85=20Roblox-=D0=BA=D0=B0=D1=80=D1=82=D0=B0?= =?UTF-8?q?=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Crossroads-импорт давал тёмно-грязные цвета вместо классических насыщенных Roblox-цветов: - трава тёмно-зелёная вместо ярко-зелёной - дороги серые вместо белых - крыши приглушённо-красные Причины: 1. mat.ambientColor=(0,0,0) default — scene.ambientColor=(0.3,0.3,0.3) не действовал. Тени получали 0 контрибьюшна цвета. 2. material=glossy (default для Roblox Plastic) шёл в case default: только specularColor=(0,0,0), без emissive — цвет blandный. Фикс: - mat.ambientColor=(1,1,1) для всех материалов: подмешивает scene ambient в тени, цвета остаются видны. - Для glossy/default: emissive = 25% цвета (как в studs/45%, но скромнее), specular слабый (0.05). Roblox-look — насыщенный даже без прямого света. Также case 'matte' теперь отдельный (был под default). --- .../rbxl_xml_parser.cpython-314.pyc | Bin 17055 -> 17055 bytes src/editor/engine/PrimitiveManager.js | 18 +++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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 c20812bac769ab2c1d1527828004790db65e67a9..b54fe31622bf15fe66ca9c173c8931c119ea6617 100644 GIT binary patch delta 25 fcmbQ=$~eE3kx!eCmx}=ijvP|U(lgk|H_-_IR3HYg delta 25 fcmbQ=$~eE3kx!eCmx}=i_8nBqx}mp`Z=w?bSIq}d 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; + } } // Триггеры — всегда полупрозрачные жёлтые в редакторе