From 00014717ab53b4024255eb57a928b0a664c28a97 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 16:52:39 +0300 Subject: [PATCH] =?UTF-8?q?fix(import):=20=D1=83=D0=BC=D0=B5=D0=BD=D1=8C?= =?UTF-8?q?=D1=88=D0=B8=D0=BB=20ambient/emissive=20=E2=80=94=20=D0=B1?= =?UTF-8?q?=D1=8B=D0=BB=D0=BE=20=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D0=B2=D0=B5?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Версия 25% emissive + 1.0 ambient дала картинку слишком плоской: пропали тени, объём, контраст. Roblox-оригинал имеет чёткие тени от строений и контрастные грани. Новые значения: - mat.ambientColor: 1.0 → 0.5 (всё ещё подмешивает scene ambient в тени, но не убивает контраст) - glossy emissive: 25% → 8% (цвет 'живой' но не светится) Должно дать баланс: цвет в тени виден, при этом тени остаются тенями. --- src/editor/engine/PrimitiveManager.js | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 6f23b06..0f501a8 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -507,11 +507,10 @@ 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); + // ambient умеренный — чтобы тени не становились грязно-чёрными, + // но сохранялся контраст между освещёнными/затенёнными гранями. + // (1,1,1) делает картинку плоской; 0.5 — нормальный компромисс. + mat.ambientColor = new Color3(0.5, 0.5, 0.5); // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // используется для GD-скинов куба (например /gd/skins/cube_smile.png). @@ -576,12 +575,11 @@ export class PrimitiveManager { break; case 'glossy': default: { - // Roblox Plastic — это белый specular маленький + цвет «сочный» - // даже в тени. Подмешиваем 25% цвета в emissive чтобы избежать - // грязных тёмных пятен в импортированных Roblox-картах - // (Crossroads и подобные). Specular низкий и нейтральный. + // Roblox Plastic — лёгкий specular + чуть emissive чтобы цвет + // не тух в тенях. 8% emissive — сохраняем контраст света/тени + // (как в Roblox: видны грани, объём, тени от строений). const dc = Color3.FromHexString(color || '#cccccc'); - mat.emissiveColor = new Color3(dc.r * 0.25, dc.g * 0.25, dc.b * 0.25); + mat.emissiveColor = new Color3(dc.r * 0.08, dc.g * 0.08, dc.b * 0.08); mat.specularColor = new Color3(0.05, 0.05, 0.05); mat.specularPower = 64; break;