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;