fix(import): mat.ambient = diffuseColor (тень окрашена, не пересвет)
Прошлая итерация без 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), сохраняя контраст со светом и точность цвета.
This commit is contained in:
parent
3a82b3c64d
commit
364726481f
@ -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).
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user