version วันนี้เน้นเรื่อง texture matching อย่างเดียวเลย - หลังจากลองใช้กับ FAB assets จริงๆ ก็เลยเห็นว่ายังมี edge cases อีกเยอะ
T/M prefix matching
สิ่งที่พบคือ T_ กับ M_ มันต้อง match กันได้เลย - texture กับ material มันใช้ prefix ต่างกัน แต่ชื่อหลังเหมือนกัน
เช่น T_Pirate_Chandelier กับ M_Pirate_Chandelier - ตอนแรก split แค่ space แต่มันต้อง split underscore ด้วย ถึงจะเจอว่า Pirate_Chandelier ตรงกัน
วิธีก็ strip T_ M_ SM_ MI_ ออกตอน compare - แค่นั้นก็ match ได้เลย
แต่ที่ตลกคือ Normal(OpenGL) มันมี parenthetical ติดมาด้วย - พวกนี้ก็ต้อง strip ออกก่อนถึงจะเจอ normal keyword
glossiness ก็เพิ่มเข้าไปใน keyword list - ลืมไปนานเลย
variant matching - ปัญหาที่ซ่อนมาก
Armor1 มันไม่ควร ได้ armor2 textures
ตอนแรกคิดว่า variant matching แบบ loose ก็พอ แต่พอลองกับ assets จริงๆ มันผิดบ่อยมาก - Armor1 ได้ texture ของ Armor2 ไป
วิธีแก้ก็ต้อง parse FAB prefix ให้ละเอียดขึ้น - ต้องแยก SET, MATERIAL, VARIANT ออกจากกัน แล้วก็ require ตัวเลขให้ตรงกันเป๊ะ
เช่น Warrior-Armor1 กับ Warrior-Armor2 - variant ต้องตรงกัน ถึงจะ match
Rescan All button
ตอน import ผิดไปแล้วอยากทำใหม่ - ตอนแรกต้อง disable แล้ว enable addon ใหม่ มันไม่สะดวกเลย
ก็เลยเพิ่มปุ่ม Rescan All - ครอบทุก mesh objects ใน scene แล้วก็ apply texture matching ใหม่หมด
Mtl suffix - edge case ที่ไม่คาดคิด
BanBody กับ BanBodyMtl - สองตัวนี้มันต้อง match กันได้ แต่มันไม่เหมือนกันพอดี
ตอนแรกคิดว่า prefix มันต่างกันก็คือต่างกัน แต่จริงๆ แล้ว Mtl มันแปลว่า material - ก็เลยต้อง strip ออกก่อน compare
collection naming - ยังต้อง fix อีก
ตอนสร้าง collection ชื่อมันเอา vault folder name เลย - Warrior-e0dbddd5 - ID ติดมาด้วย
ก็เลย strip FAB ID suffix ออก เหลือแค่ Warrior
แล้วก็ reuse existing collection แทนสร้างใหม่ทุกที - ตอนแรกไม่ได้คิดเรื่องนี้เลย พอ import ซ้ำก็สร้าง collection ใหม่ทุกที
unregister - อันที่ไม่คาดคิดจริงๆ
ตอน disable addon - มัน crash
เพราะลืม register FAB_OT_clear_tex_search ตอนที่ addon enable - พอ disable ก็เลย unregister ที่ไม่เคย register มาก่อน
safe delete ก็ต้องใช้ด้วย คือ if hasattr(x, 'remove'): x.remove() แทน del x - ไม่งั้นมันก็ crash ตอน cleanup
สรุป version นี้
v0.9.3 - texture matching ดีขึ้นเยอะ
จากที่ลองใช้กับ FAB assets จริงๆ - ทุก edge case ที่เจอวันนี้มันไม่เคยเจอตอนเขียน code ครั้งแรกเลย
ค่ายที่ใช้ naming convention ต่างกัน, variant ที่มีตัวเลข, Mtl suffix ที่ต้อง strip, parenthetical qualifiers ที่ต้อง clean - มันมาจาก assets จริงๆ ทั้งนั้น
สรุดว่าถ้าจะทำให้มัน robust จริงๆ ต้องลองกับ assets เยอะๆ - unit test อย่างเดียวไม่พอ