arrow_backBack to Logs
code
TechApril 10, 20262 min read

หาเรื่องใส่ตัวกับการทำ add-on เล่นเพราะคันมือเฉยๆ

เกี่ยวกับ add-on นี้มันเริ่มจากที่เห็นว่า Quixel มีปล่อยของใหม่มาให้ดาวโหลดใน FAB market ทำให้คิดว่าถ้าเอามาใช้ใน blender ก็น่าจะดี

ทำให้พบว่าตอนนี้ UE ↔ DCC app มันทำงานร่วมกันได้แล้วระดับหนึ่ง คือมัน export มาลงโปรแกรมได้ แต่ texture มันไม่มา เลยเป็นที่มาของ add-on นี้

feature หลักๆ ตอนแรก

  • auto-detect FAB imports ด้วย depsgraph handler
  • รองรับ PNG กับ TGA textures
  • .blend embedded images
  • ตอนนั้นคิดว่าพอแล้ว ไม่รู้ว่าจะมี edge cases อีกเยอะ

    ทำไปทำมาก็คิดว่า embedded texture ก็น่าสนใจ .blend file มันเก็บ image ข้างใน ก็เลยต้อง extract ออกมาให้ได้ แต่พอยิ่งทำหลายเรื่องมันยิ่งผุดมาให้แก้ไปเรื่อย

  • FAB vault locations ต้อง auto-detect ตาม platform - Mac, Windows, Linux แต่ละที่มันเก็บ cache ต่างกัน ตอนนั้น research อยู่นานว่าแต่ละ platform มันเก็บที่ไหนบ้าง
  • texture patterns ตอนนั้นยังไม่ dynamic — ยังต้อง hardcode prefix อยู่
  • รู้สึกว่างานจะไม่จบถ้าต้องมานั่งเพิ่มทุก prefix เรื่อยๆ เลยเปลี่ยนเป็น dynamic detection ใน version ต่อไป


    Claude Code configuration

    ตอนนั้น setup Claude Code agents ไว้ 4 ตัว

  • blender-expert - Blender Python API
  • unreal-expert - Unreal integration
  • asset-pipeline - FAB workflow
  • texture-debugger - debug texture matching
  • commands, hooks, rules ก็ configure ไว้หมด - ตอนนั้นรู้สึกว่ามัน organized ดี

    แต่พอทำงานจริงๆ ก็พบว่า rules มันต้อง update ตลอด - texture patterns ใหม่ๆ ที่ไม่เคยเจอมาก่อน


    cross-platform

    Mac กับ Windows ใช้งานได้ปกติ - แต่ Linux มี issue เรื่อง vault paths นิดหน่อย ตอนนั้นคิดว่า .local/share/Epic/ น่าจะ work บน Linux ทุก distribution - จริงๆ แล้วมันไม่ได้ standard ขนาดนั้น เท่าที่ทำมาตอนนี้ก็ไม่แน่ใจว่ามันทำงานมั้ยเพราะก็ยังไม่ได้ลองจริงๆ ได้แค่เดาเอา


    texture patterns - cheatsheet

    เรื่องที่ปวดหัวที่สุด เลยคิดว่าจะโน๊ตไว้หน่อย เพราะ debug นานที่สุด แบบที่สุดจริงๆ ตัวอย่างข้างล่างคือลองดึงมาจากโมเดล 1 ตัว แต่มีจุดที่เพี้ยนอยู่เยอะ จนคิดว่าต้องพอก่อน ยังไม่ทำต่อล่ะกัน

    TGA (BanBody style):

    BanBody, BanJacket, BanHair, BanBoots,
    BanBracers, BanHat, BanChaps

    บางตัวมี Mtl suffix (BanBodyMtl_BaseColor) บางตัวไม่มี (BanJacket_BaseColor)

    PNG (Epic style):

    T_Armor, T_Cloth, T_Organik, T_Metalic, T_Other

    Unreal prefixes:

    T_ = Texture
    M_ = Material
    SM_ = Static Mesh
    MI_ = Material Instance