fix(import): уменьшил ambient/emissive — было пересвечено

Версия 25% emissive + 1.0 ambient дала картинку слишком плоской:
пропали тени, объём, контраст. Roblox-оригинал имеет чёткие тени
от строений и контрастные грани.

Новые значения:
- mat.ambientColor: 1.0 → 0.5 (всё ещё подмешивает scene ambient
  в тени, но не убивает контраст)
- glossy emissive: 25% → 8% (цвет 'живой' но не светится)

Должно дать баланс: цвет в тени виден, при этом тени остаются тенями.
This commit is contained in:
min 2026-06-08 16:52:39 +03:00
parent 14e173a089
commit 00014717ab

View File

@ -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;