TouchDesigner 2025 · LEDMatrixSystem.toe · 977 nodes

Volumetric Slicing

ระบบจอ LED สามมิติที่ทำงานจริง — ใส่ภาพ 3D เข้า LED cube ด้วยการวางกล้อง 12 ตัวซ้อนกัน ตัด volume เป็นชั้นๆ แล้วเรียงเป็น texture แผ่นเดียว ส่งออก Art-Net

grid 12×12×48 6,912 LED texture 144×48 44 universe 25 fps Art-Net
1 แนวคิดหลัก — ตัด volume เป็น 12 ชั้น
🖱️ ลากเพื่อหมุนดู · กล้องแต่ละตัวเห็นเฉพาะ "แผ่นบาง" ที่ความลึกของตัวเอง
กล้องทุกตัวใช้ expression เดียวกัน โดย me.digits คือเลขท้ายชื่อ node:
near = (me.digits-1)*(1/12)
far  = (me.digits)*(1/12)
projection = ortho · orthowidth = 1.0 · tz = 0.5
2 เรียง 12 ชั้นเป็น texture แผ่นเดียว

layout1 รับ 12 ภาพ (เรียงกลับหลัง: out12 → out1) ต่อกันในแนวนอน → ได้ texture 144 × 48 ซึ่งมีจำนวน pixel เท่ากับจำนวน LED พอดี

1 slice
12 × 48
จำนวน slice
12
texture รวม
144 × 48
= pixel
6,912
💡 renderpassTOP คือกุญแจของ performance — แทนที่จะสร้าง renderTOP 12 ตัว ระบบใช้ render2U เป็นฐานแล้วต่อ renderpass1..12 เป็นลูกโซ่ เปลี่ยนแค่กล้อง (item1..item12) จึงเร็วกว่ามาก
3 ของจริงคือ 72×72×48 — เตรียมคอนเทนต์ยังไง

ที่อธิบายมาข้างบนคือสเกลต้นแบบ 12 ชั้น · ของจริงที่จะติดตั้งคือ 72 (กว้าง) × 72 (ลึก) × 48 (สูง) = 248,832 ดวง
คอนเทนต์จึงถูกหั่นเป็น สไลซ์ขนาด 72 × 48 จำนวน 72 แผ่น (แผ่นละ 1 ระดับความลึก) — ถ้าวางต่อกันเป็นแถวเดียวจะได้ภาพยาว 5,184 × 48 ซึ่งยาวเกินไปจนใช้งานลำบาก เอามาเรียงใหม่เป็นตาราง 8 × 9 ได้ภาพ 576 × 432 — จำนวน pixel เท่าเดิมเป๊ะ แต่ทรงใกล้เคียงจตุรัส ทำงาน/พรีวิว/เข้ารหัสวิดีโอง่ายกว่ามาก

🖱️ คลิกช่องไหนก็ได้เพื่อดูว่ามันคือชั้นความลึกไหน · แถบบน = ภาพยาวแบบเดิม
ขนาดภาพที่ต้องส่ง
576 × 432
สัดส่วน
1.33 : 1
1 สไลซ์
72 × 48
pixel รวม
248,832
8 × 9 = 576 × 432 — ลงตัวพอดี ไม่มีช่องว่าง และใกล้จตุรัสที่สุดในบรรดาแบบที่ไม่เหลือเศษ
สิ่งที่ต้องส่งค่าหมายเหตุ
ขนาดภาพ / วิดีโอ576 × 432 pxห้ามย่อ-ขยาย · 1 pixel = 1 ดวง LED เป๊ะๆ
ขนาด 1 ช่อง (tile)72 × 48 px72 = แกนกว้างของจอ · 48 = แกนสูง
จำนวนช่อง8 คอลัมน์ × 9 แถว = 72ครบพอดี ไม่มีช่องว่าง
ลำดับการอ่านซ้าย→ขวา แล้วลงแถวถัดไปช่องบนซ้าย = ชั้นที่ 1 · ช่องล่างขวา = ชั้นที่ 72
ความหมายของแต่ละช่อง1 ช่อง = 1 ระดับความลึกไล่จากด้านหนึ่งของห้องไปอีกด้าน
เฟรมเรต25–60 fpsส่ง image sequence (PNG) หรือวิดีโอที่ไม่บีบสีแรง
สีsRGB · ไม่มี alphaดำสนิท = ดวงนั้นดับ
🧭 เช็คทิศทางความลึกก่อนเริ่มงานจริง — ส่งไฟล์ทดสอบที่ชั้นที่ 1 เป็นสีแดงล้วน ชั้นที่ 72 เป็นสีน้ำเงินล้วน ที่เหลือดำ แล้วดูของจริงว่าแดงอยู่ด้านหน้าหรือด้านหลัง ถ้ากลับด้านให้สลับลำดับ tile ที่ปลายทาง (แก้ที่ระบบ ไม่ต้องรื้อคอนเทนต์)
🧪 ตัวอย่างจริง — รูปทรง 3D → 72 แผ่น → 576 × 432

เลือกทรงแล้วดูว่ามันถูกหั่นออกมาหน้าตายังไง · ภาพขวาล่างคือไฟล์จริงขนาด 576 × 432 ที่จะส่งเข้าระบบ (กดดาวน์โหลดเอาไปเปิดใน After Effects / Photoshop ดูได้เลย)

🖱️ ลากหมุนได้ · ทรงจริงในก้อน LED 72×72×48 · ระนาบสีขาว = แผ่นที่กำลังดู
แผ่นที่กำลังดู ขยายใหญ่ — ขนาดจริง 72 × 48 pixel = 1 ช่องในไฟล์
ไฟล์จริง 576 × 432 (8 ช่อง × 9 แถว) · กรอบขาว = แผ่นที่กำลังดู · ภาพนี้คือ pixel จริง 1:1 ไม่ได้วาดจำลอง
LED ที่ติดในเฟรมนี้
—
คิดเป็น
—
แผ่นที่มีเนื้อ
—
ไฟล์
576 × 432
💡 สังเกตว่าทรงกลมไม่ได้ออกมาเป็นวงกลมทุกแผ่น — แผ่นหน้าสุด/หลังสุดจะเป็นจุดเล็กๆ แล้วค่อยโตขึ้นจนใหญ่สุดตรงกลาง นี่คือหลักการเดียวกับ CT scan · ส่วนกล่องจะได้สี่เหลี่ยมเท่ากันทุกแผ่นในช่วงที่มีเนื้อ และว่างสนิทนอกช่วงนั้น
📐 ทำไมไม่ใช่ 499 × 499: 248,832 = 2¹⁰ × 3⁵ ไม่มีตัวหารที่เป็นจตุรัสพอดี · ตัวหารที่ขนาบรากที่สอง (498.8) คือ 486 กับ 512 → 512 × 486 ใกล้จตุรัสที่สุด (1.05:1) แต่จะหั่นสไลซ์ข้ามบรรทัด มองด้วยตาไม่รู้ว่าชั้นไหนเป็นชั้นไหน · 576 × 432 จึงใช้งานจริงง่ายกว่า
4 ลองเล่นจริง — จากโมเดล 3D สู่เม็ด LED

ทั้ง 3 ช่องนี้คือ pipeline เดียวกันทำงานสด: โมเดลหมุน → กล้องตัดเป็นชั้น → texture → LED cube · ลากหมุนได้ทั้งช่องซ้ายและขวา

1 · โมเดล 3D — ต้นฉบับใน geo2 (POP scene)
3 · LED cube — 12×12×48 เม็ดจริงที่ติดจากค่าใน texture
2 · OUTPUT TOP — texture 144 × 48 ที่ layout1 สร้าง (ซ้าย = ชั้นหลัง out12 → ขวา = ชั้นหน้า out1) · นี่คือภาพเดียวที่ส่งต่อไปเป็นค่าสีของ LED ทุกดวง
💡 สังเกตว่าเม็ด LED ทางขวา หยาบกว่าโมเดลต้นฉบับ — เพราะ volume ถูกบีบเหลือ 12 ชั้นตามความลึก นี่คือข้อจำกัดจริงของจอ (ยิ่งเพิ่ม layers ยิ่งละเอียด แต่ต้องเพิ่มกล้อง + universe ตามไปด้วย)
5 เส้นทางข้อมูลทั้งระบบ (คลิกดูรายละเอียด)
🎨
soptotop
491 nodes · สร้างภาพ
🔀
color_remix
TOP → CHOP
🧭
remap
จัดลำดับ pixel
🧊
3D Preview
instancing
📡
dmxout1
Art-Net จริง
6 แหล่งเนื้อหาใน soptotop

TD 2025 ใช้ POPs (Point Operators — ประมวลผลจุดบน GPU) ทั้งหมดรวมที่ geo2 แล้วให้กล้อง 12 ตัวถ่าย

กลุ่มNodeหน้าที่
รูปทรงpointgen1-6 · box1 · torus1 · sphere1 · text1สร้าง point cloud (sphere/tube/torus/rectangle/ตัวอักษร)
อนุภาคparticle1/2 + forceradial1/2ระบบ particle มีแรงดึงเข้า/ผลักออก
รบกวนnoise1 · noise2 · noise5ทำให้ฟอร์มมีชีวิต ไม่นิ่ง
สีlookuptex1 → ramp1ให้สีจุดจาก ramp (outputattrscope = Color)
โมเดลgeo2_1 · geo2bผีเสื้อ (buomplastic.fbx) · คนวิ่ง (Running kopie.fbx, index = me.time.frame)
แอนิเมชันlfo1 · speed1 + limit1ขยับ scene ตามเวลา (lfo → geo2.ty, zigzag ±2)
7 วิธีฉีดสีทดสอบโดยไม่พังของเดิม

แทรก switchTOP ก่อน flip1 เพื่อสลับระหว่างเนื้อหาจริงกับสีทดสอบ — กลับคืนได้ทันทีด้วยการเปลี่ยน index

red_test   = constantTOP  48×144  RGB(1, 0, 0)
src_switch = switchTOP    in0 = soptotop/out1 · in1 = red_test
flip1.inputConnectors[0].connect(src_switch)

src_switch.par.index = 1   # → แดงล้วนทั้งจอ
src_switch.par.index = 0   # → กลับไปใช้เนื้อหาเดิม
✅ ผลตรวจจริง: color CHOP ได้ r=255, g=0, b=0 ครบทั้ง 6,912 ดวง · dmxout1 universe000 อ่านได้ 255,0,0,255,0,0,… = Art-Net ส่งออกจริง
8 ข้อควรระวัง