ข้ามไปยังเนื้อหา
Tayakorn
คู่มือ Blender Animation

คู่มือ Blender Animation

LEVEL 3 · ระดับสูง

Constraint — ค่าที่ถูกเขียนทับหลังคุณคีย์ไปแล้ว

ถึงเวลาไขปริศนาที่ปลูกไว้ตั้งแต่บทที่ 1

สร้างกล่องหนึ่งใบ คีย์ตำแหน่งไว้ที่จุดกำเนิดชัด ๆ แล้วใส่ constraint ชนิด Copy Location ชี้ไปที่เป้าหมายที่ (7, 3, 2):

=== ก่อนใส่ constraint ===
  ค่าใน property (box.location)        : (0.0, 0.0, 0.0)
  ตำแหน่งจริงหลังประเมิน (matrix_world) : (0.0, 0.0, 0.0)

=== หลังใส่ Copy Location -> Target(7, 3, 2) ===
  ค่าใน property (box.location)        : (0.0, 0.0, 0.0)     ← ไม่ขยับเลยสักนิด
  ตำแหน่งจริงหลังประเมิน (matrix_world) : (7.0, 3.0, 2.0)     ← แต่ของไปอยู่โน่นแล้ว

นี่คือคำตอบ กล่องอยู่ที่ (7, 3, 2) จริง แต่ค่าที่คุณคีย์ไว้ยังเป็น (0, 0, 0) ครบถ้วนไม่ถูกแตะ

constraint ไม่แก้ค่าของคุณ มันทำงานทีหลัง บนผลลัพธ์ที่คำนวณเสร็จแล้ว

10.1 ทำไมนี่คือคำอธิบายของอาการยอดฮิต

อาการที่ทุกคนเคยเจอ: เลื่อนค่าใน N-panel แล้วของไม่ขยับ หรือคีย์ตำแหน่งไว้แล้วของดื้อไปอยู่ที่อื่น

เกือบทุกครั้งคำตอบคือมี constraint ตัวหนึ่งทำงานอยู่ท้ายสาย และมันชนะเสมอ เพราะมันได้คิวหลัง

สิ่งที่ควรทำเมื่อเจออาการนี้ ไม่ใช่การไล่ลบคีย์ แต่คือเปิดแท็บ Object Constraint Properties ดูว่ามีอะไรอยู่ในนั้น

10.2 ทำไมออกแบบให้ไม่เขียนทับ

เพราะถ้า constraint เขียนกลับลง property ค่าที่คุณตั้งใจคีย์จะถูกทำลายถาวรทันทีที่เปิดไฟล์ และคุณจะย้อนกลับไม่ได้เลย

การแยกสองชั้นนี้ออกจากกันทำให้ ปิด constraint แล้วของกลับไปที่เดิมทันที ซึ่งเป็นสิ่งที่ทำให้มันปลอดภัยพอจะใช้จริง

💡 อุปมา: ค่าที่คุณคีย์ = สิ่งที่คุณพิมพ์ลงในเอกสาร · constraint = ตัวกรองที่แสดงผลทับตอนพิมพ์ออกกระดาษ — ต้นฉบับไม่เคยเปลี่ยน จุดที่อุปมานี้ใช้ไม่ได้ คือ constraint ไม่ได้ทำงานแค่ตอน "พิมพ์ออก" มันทำงานทุกเฟรม และผลของมันเป็นข้อมูลที่ constraint ตัวถัดไปเอาไปใช้ต่อได้

10.3 ลำดับใน stack มีความหมาย

constraint หลายตัวบนวัตถุเดียวกันทำงานเรียงจากบนลงล่าง ตัวล่างรับผลของตัวบนมาแล้วทำต่อ สลับลำดับ = ได้ผลคนละอย่าง

นี่คือเหตุผลที่ constraint stack เป็น "รายการที่เรียงได้" ไม่ใช่ "กล่องติ๊กถูก"

อ่านแบบเต็มเล่ม