From 3a82b3c64db02f9ad7d4b8f0f97794200f5bde7b Mon Sep 17 00:00:00 2001 From: min Date: Mon, 8 Jun 2026 17:00:25 +0300 Subject: [PATCH] =?UTF-8?q?fix(import):=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=B8=D0=BB=20BrickColor=20=D0=BF=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D1=82=D1=80=D1=83=20+=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20ambie?= =?UTF-8?q?nt=20material?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Главная причина пересвета: 1. BrickColor 151 (Earth green = трава Crossroads) ОТСУТСТВОВАЛ в таблице. Пол получал дефолт #cccccc и выглядел белым. После анализа карты 344 примитива использовали дефолт. 2. mat.ambientColor=(1,1,1) + scene.ambientColor=(0.3) делало белые цвета пересветлёнными — серый выглядел белым. Фикс: - BRICKCOLOR_TO_HEX расширен с ~50 до ~120 цветов. Добавлены: 151 (Earth green), 26 темный, 18, 115-148, 168-301, 1021-1032 и др. После: #cccccc дефолт 344→68 (бОльшая часть теперь правильных). - Убран mat.ambientColor — оставлен default (0,0,0). Lambert чистый: освещённая грань = diffuse, тень = почти чёрная (scene.ambient смягчает). Цвета теперь точно как в diffuse, без пересвета. Деплой: converter.py скопирован на VM 130 + systemctl restart. --- .../src/__pycache__/converter.cpython-314.pyc | Bin 56367 -> 58378 bytes rbxl-importer/src/converter.py | 39 ++++++++++++++---- src/editor/engine/PrimitiveManager.js | 9 ++-- 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/rbxl-importer/src/__pycache__/converter.cpython-314.pyc b/rbxl-importer/src/__pycache__/converter.cpython-314.pyc index 6f7af917aede50d7dc23403ed78f374e4b9983d0..447629e0731214e02241ee9ac9b1774cd9733126 100644 GIT binary patch delta 4338 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 delta 2193 zcmZXSdr(wW9LMkPE|=ZqvEstA>mmUH0)z6}1$GOc_{2x}OGVTrSRTGmLNUchOW6ZZ z3qAQxB=dpgBzl_0a?;F4rcN-8Lyk>lR#P!eVhuBm^+&&Z?$xo{KR&7Kc37bTYLP0t%-4q0EdUh@m)=Xu}Mm9W#jz%py85 zn>ZA6h_UD*CZn4;9CL})m`AL^eBvVX5ErADxC9^fL#9-=6rZ5cGAtn0;wWMrjwY_b zF@6Y?ZN#xOXvJ~FtvH^z2MdWG;{@U-IFa}%P9pZ;Wa4d{LcD`h{eVR{jW``=_@R)t z!kPFajf-&>5%DSFY@9=!izUQ)SW29a3y2HRM=Zm@(^Sf_g6PLeVii^sYj6>9F)kr4 z#bv}=Tuxkpb?R354Ay5-ZHU8_b_rM6rP_#wcx)hFEj$6AC0`?a7_KF66rPCd$kz)` z!VPvQ3O9;DvQM^22@*a>j{~eH$R625_PkqG|1?QzNbx!G1$IAZs&mtWxj3mz!WXAn zrldEd$4R~s3G7?N<`Ewn1^hORP&N34ggE!GXvE$22mrov!UbzJ6`k@n}!OM3H`z#hc^I2Yr+A zt#Ansu_@-b#KWF>l2nx>Nkg?8Ir6{L9A&NM*x1fT-(lK$NlPE{jiK`%V;9Z!@HWp2 zQA})xbtqeDbq43;yRu!?Y`b-Bc|}E~$6c|`m{{%cyFGa%o(fMzzA8C+?z|j7iPxW( zm8)iQD_mLGUUjC@>-T1pxGG)Mt{Rdme^q5wB}olUROG5sQ$tJfTAKrSiaiTp1E1&U zlc^NOi~-opHVr*a%!)k++gN|>_rx2IU4>ojKwLkuE&dkl=gSg~02OOu7_hss3QJ77 z44temX*!(X`N`vDD(g~a1Ds&psZDT(7pGm2;Vh3Du^Hej>lpbtbo085d`13C;+?Kq zprI}IkPM;x!~6j=m9BAa0~GNeC)AsbMf8!aavIn-B}M$`%*h65;&*5LtWddGvQLI~ z-Z0;jJt&Y{m@)m({ojbVSZoPtVzr1b-ZN_ks1T@%mRe$hZ> zV8;f41AOJKlwc}*_qWS%j(aqMcf)}1HmZ!z-TQ=y?SgWvh+7Xyv1pSLSe z&wseQK8Q;BwOs%${LkxV8Csa!{S)lwechL2DqUZk1$yhc8}!x}SYPj1xXzD#xlooj z26N-BjS#Tdx`%K3dD`F7mp23Ieo&7&x?sA!>s|YtUUZ=q@%8?$q)zYTl{kbyxHE zbXW7jd!)ew!^0qI;4uS44}=-Ot)gIn*L=4{c3eprTx?LT8SKS&rNw?b 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).