From 364726481f159a15f7c8f9d780f4d93861c59822 Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 17:02:08 +0300 Subject: [PATCH] =?UTF-8?q?fix(import):=20mat.ambient=20=3D=20diffuseColor?= =?UTF-8?q?=20(=D1=82=D0=B5=D0=BD=D1=8C=20=D0=BE=D0=BA=D1=80=D0=B0=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0,=20=D0=BD=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=81=D0=B2=D0=B5=D1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Прошлая итерация без ambient давала почти-чёрные грани в тени — sun под углом + hemi только вверх = низ/бок граней получают только скудный hemi.groundColor=(0.3,0.3,0.4) = тёмные пятна. Roblox-look: тень это просто менее яркий вариант цвета (не чёрный). Фикс: mat.ambientColor = mat.diffuseColor (= цвет примитива). scene.ambientColor=(0.3) × ambient(цвет) = 30% цвета в тени. На прямом свете diffuse доминирует — белые остаются белыми, зелёные зелёными. Это даёт тени окрашенные (как в Roblox), сохраняя контраст со светом и точность цвета. --- src/editor/engine/PrimitiveManager.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 20cc931..b1094fc 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -506,12 +506,12 @@ export class PrimitiveManager { _applyMaterial(mesh, typeDef, color, material, textureUrl) { const matName = `${mesh.name}_mat`; const mat = new StandardMaterial(matName, this.scene); - mat.diffuseColor = Color3.FromHexString(color || '#888888'); - // ambient НЕ выставляем — иначе scene.ambient (0.3) + ambient(0.4-1.0) - // приплюсовывается к diffuse и цвета становятся пересвеченными - // (особенно белые/серые становятся пересветлёнными). - // Babylon default (0,0,0) даёт чистый Lambert: освещённый цвет=diffuse, - // тень=чёрная (что в Roblox смягчается scene.ambient). + const dc = Color3.FromHexString(color || '#888888'); + mat.diffuseColor = dc; + // ambient = СОБСТВЕННЫЙ цвет (умеренный). Это даёт цвет в тени + // равный ~30% от собственного, а не белый (как делал ambient=(1,1,1)). + // На светлом полу: белые цвета остаются белыми, тёмные грани не чёрные. + mat.ambientColor = dc; // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // используется для GD-скинов куба (например /gd/skins/cube_smile.png).