diff --git a/rbxl-importer/src/__pycache__/converter.cpython-314.pyc b/rbxl-importer/src/__pycache__/converter.cpython-314.pyc index 6f7af91..447629e 100644 Binary files a/rbxl-importer/src/__pycache__/converter.cpython-314.pyc and b/rbxl-importer/src/__pycache__/converter.cpython-314.pyc differ diff --git a/rbxl-importer/src/converter.py b/rbxl-importer/src/converter.py index 8785b7f..dd054c7 100644 --- a/rbxl-importer/src/converter.py +++ b/rbxl-importer/src/converter.py @@ -103,19 +103,42 @@ SHAPE_TO_PRIMITIVE = { # ────── BrickColor таблица (упрощённая) ────── # Roblox использует old BrickColor enum (числа 1-1032). Только распространённые: BRICKCOLOR_TO_HEX = { - 1: '#f2f3f3', 5: '#d9e4f7', 9: '#9c9e9c', 11: '#e8eaea', - 21: '#c4281c', 23: '#0d69ac', 24: '#f5cd30', 26: '#27313e', - 28: '#293f1a', 29: '#a3bb71', 37: '#4b9740', 38: '#ab5a32', - 101: '#dab8a3', 102: '#82c1e9', 103: '#9b9696', 104: '#6b327a', - 105: '#cf8b3e', 106: '#d97e29', 107: '#3a8fbf', 108: '#695b50', - 111: '#a7a6a6', 119: '#aac84a', 125: '#e8b486', 138: '#8a8a76', - 141: '#26462b', 153: '#9b605a', 192: '#5a3019', 194: '#9c9b91', - 199: '#3c3e3f', 208: '#dbdcdc', 224: '#f3e3a5', 226: '#fff8a8', + # Базовые тона + 1: '#f2f3f3', 2: '#a1a5a2', 3: '#f9e999', 5: '#d9e4f7', + 9: '#9c9e9c', 11: '#e8eaea', 18: '#cc8e69', 21: '#c4281c', + 23: '#0d69ac', 24: '#f5cd30', 26: '#1b2a35', 28: '#293f1a', + 29: '#a3bb71', 37: '#4b9740', 38: '#ab5a32', 101: '#dab8a3', + 102: '#82c1e9', 103: '#9b9696', 104: '#6b327a', 105: '#cf8b3e', + 106: '#d97e29', 107: '#3a8fbf', 108: '#695b50', 111: '#a7a6a6', + 115: '#c7d23c', 116: '#56fff0', 118: '#b4d2e4', 119: '#aac84a', + 120: '#d4f0a6', 123: '#cf6b6f', 124: '#9c54a6', 125: '#e8b486', + 126: '#a6c2e3', 127: '#deb87b', 128: '#a37e5b', 131: '#9ba19d', + 133: '#cc7c39', 134: '#de8b5f', 135: '#74859c', 136: '#876a7a', + 137: '#e6a262', 138: '#8a8a76', 140: '#234770', 141: '#26462b', + 143: '#bdc3e3', 145: '#5c8aa1', 146: '#75718b', 147: '#9a8a64', + 148: '#5a605a', 149: '#1b2a47', 150: '#9ea1a3', + # ВАЖНО: 151 — Earth green (тёмная трава Crossroads) + 151: '#7c9b53', + 153: '#9b605a', 154: '#7a2d2d', 157: '#f5e09c', 158: '#b58c9c', + 168: '#3c3a37', 176: '#a39989', 178: '#aa724c', 180: '#cc9555', + 190: '#f7b830', 191: '#e69138', + 192: '#5a3019', 193: '#f59d24', 194: '#9c9b91', 195: '#447ba6', + 196: '#283970', 198: '#7b4b85', 199: '#3c3e3f', 200: '#7a854b', + 208: '#dbdcdc', 209: '#a4733f', 210: '#7d8a8e', 211: '#9da3b3', + 212: '#a5cce0', 213: '#6584b5', 215: '#7c8aa4', 216: '#8a5040', + 217: '#7a5443', 218: '#94748a', 219: '#5c5a8a', 220: '#a3a8c4', + 221: '#cc4488', 222: '#e8a8e0', 223: '#dd7790', 224: '#f3e3a5', + 225: '#e8b685', 226: '#fff8a8', 232: '#bce0f0', 268: '#3c2e74', + 301: '#73584b', + # Бипалитра 1001-1032 — стандартные яркие цвета 1001: '#ffffff', 1002: '#cccccc', 1003: '#000000', 1004: '#ff0000', 1005: '#ff8000', 1006: '#ffff00', 1007: '#80c000', 1008: '#00ff00', 1009: '#00c080', 1010: '#0080ff', 1011: '#0000ff', 1012: '#5000ff', 1013: '#a000ff', 1014: '#ff00ff', 1015: '#ff0080', 1016: '#ff80c0', 1017: '#ff8080', 1018: '#ffc080', 1019: '#ffff80', 1020: '#80ff80', + 1021: '#80c0ff', 1022: '#80ffff', 1023: '#80ff00', 1024: '#00ff80', + 1025: '#ff4040', 1026: '#8a0028', 1027: '#001f80', 1028: '#4d4d4d', + 1029: '#9d9d9d', 1030: '#5e3923', 1031: '#7a4f30', 1032: '#cca5a5', } diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 7d2c160..20cc931 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -507,10 +507,11 @@ 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) — позволяет scene.ambientColor (0.3,0.3,0.3) подсветить - // тени до 30% яркости цвета. На прямом свете diffuse доминирует. - // Без emissive — контраст света/тени сохраняется как в Roblox. - mat.ambientColor = new Color3(1, 1, 1); + // ambient НЕ выставляем — иначе scene.ambient (0.3) + ambient(0.4-1.0) + // приплюсовывается к diffuse и цвета становятся пересвеченными + // (особенно белые/серые становятся пересветлёнными). + // Babylon default (0,0,0) даёт чистый Lambert: освещённый цвет=diffuse, + // тень=чёрная (что в Roblox смягчается scene.ambient). // Если задан textureUrl — подгружаем PNG как diffuseTexture. Это // используется для GD-скинов куба (например /gd/skins/cube_smile.png).