From 3e928e8d4e967ccdfba790297d0ea0eb5a52ffae Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 16:56:35 +0300 Subject: [PATCH] =?UTF-8?q?fix(import):=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB?= =?UTF-8?q?=20emissive,=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20ambient?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B5=D0=BD=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit emissive прибавлялся к diffuse даже на ярком свету — пересвечивал цвета (особенно белые/серые). Новая схема: - emissive = 0 (всегда) - mat.ambientColor = (1,1,1) — пропускает scene.ambientColor (0.3) в тени, делает тени 30% яркости цвета вместо чёрных - На прямом свете diffuse доминирует, всё как должно быть Это должно дать Roblox-look: серый #cccccc выглядит серым, белый выглядит белым, в тенях цвет виден но темнее. --- src/editor/engine/PrimitiveManager.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 0f501a8..7d2c160 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -507,10 +507,10 @@ export class PrimitiveManager { const matName = `${mesh.name}_mat`; const mat = new StandardMaterial(matName, this.scene); mat.diffuseColor = Color3.FromHexString(color || '#888888'); - // ambient умеренный — чтобы тени не становились грязно-чёрными, - // но сохранялся контраст между освещёнными/затенёнными гранями. - // (1,1,1) делает картинку плоской; 0.5 — нормальный компромисс. - mat.ambientColor = new Color3(0.5, 0.5, 0.5); + // ambient (1,1,1) — позволяет scene.ambientColor (0.3,0.3,0.3) подсветить + // тени до 30% яркости цвета. На прямом свете diffuse доминирует. + // Без emissive — контраст света/тени сохраняется как в Roblox. + mat.ambientColor = new Color3(1, 1, 1); // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // используется для GD-скинов куба (например /gd/skins/cube_smile.png). @@ -575,11 +575,10 @@ export class PrimitiveManager { break; case 'glossy': default: { - // Roblox Plastic — лёгкий specular + чуть emissive чтобы цвет - // не тух в тенях. 8% emissive — сохраняем контраст света/тени - // (как в Roblox: видны грани, объём, тени от строений). - const dc = Color3.FromHexString(color || '#cccccc'); - mat.emissiveColor = new Color3(dc.r * 0.08, dc.g * 0.08, dc.b * 0.08); + // Roblox Plastic — слабый specular, без emissive. + // diffuse=#cccccc должно выглядеть СЕРЫМ (как в Roblox). + // ambient (от scene 0.3 × mat.ambient 0.4) даёт цвет в тенях, + // но не убивает контраст. mat.specularColor = new Color3(0.05, 0.05, 0.05); mat.specularPower = 64; break;