Skip to content
Tayakorn

คู่มือ Blender Animation

LEVEL 3 · ระดับสูง

Driver — property ตัวหนึ่งอ่านค่าจากอีกตัว

จนถึงตอนนี้ ค่ามาจากสองทาง: เส้นโค้งที่ผูกกับเวลา (บทที่ 3) และ constraint ที่ทำงานทับทีหลัง (บทที่ 10)

ยังมีทางที่สาม — ให้ property ตัวหนึ่งเลิกเก็บค่าของตัวเอง แล้วไปอ่านจาก property ตัวอื่นแทน นั่นคือ driver

ตั้งให้ scale.z ของกล่อง อ่านจาก location.x ของตัวควบคุม ด้วยสูตร 1 + lift * 0.5:

  Ctrl.location.x = 0.0  -> Box.scale.z = 1.000
  Ctrl.location.x = 1.0  -> Box.scale.z = 1.500
  Ctrl.location.x = 2.0  -> Box.scale.z = 2.000
  Ctrl.location.x = 4.0  -> Box.scale.z = 3.000

ในไฟล์นี้ไม่มี keyframe แม้แต่จุดเดียว แต่ค่าเปลี่ยนทุกครั้งที่ขยับตัวควบคุม

11.1 ต่างจาก keyframe ตรงไหน

keyframedriver
ค่าขึ้นกับเวลา (เลขเฟรม)property ตัวอื่น
หยุดเวลาแล้วค่าค้างนิ่งยังเปลี่ยนได้ ถ้าต้นทางเปลี่ยน
ปลายทางระบุด้วยdata pathdata path เหมือนกัน

แถวสุดท้ายคือจุดที่บทที่ 2 กลับมาจ่ายคืน — ตอนตั้ง driver คุณต้องบอกให้ได้ว่าปลายทางคือ data path ไหน index อะไร ในตัวอย่างนี้คือ 'scale' index 2

11.2 ใช้จริงตอนไหน

เมื่อมี "ความสัมพันธ์" ที่ควรเป็นจริงตลอดเวลา ไม่ใช่แค่ในช่วงเวลาหนึ่ง เช่น

  • ลูกบิดหมุน แล้วประตูเปิดตาม
  • ตัวเลื่อนตัวเดียวคุมการยิ้มของหน้าทั้งหน้า
  • ล้อหมุนสัมพันธ์กับระยะที่รถวิ่ง โดยไม่ต้องคีย์ล้อเลย

ข้อสุดท้ายคือตัวอย่างที่เห็นค่าชัดที่สุด: ถ้าคีย์ล้อเอง พอแก้ความเร็วรถทีหลัง ล้อจะลื่นไถลทันที แต่ถ้าใช้ driver มันถูกเสมอโดยอัตโนมัติ

เคล็ดลับ: ถ้าพบว่าตัวเองกำลังจะคีย์ของสองอย่างให้ตรงกันเป๊ะ ๆ นั่นคือสัญญาณว่าควรใช้ driver แทน

11.3 ข้อควรระวัง

driver ที่อ้างวนกลับมาหาตัวเอง (A อ่าน B, B อ่าน A) จะทำให้ Blender ไม่รู้ว่าต้องคำนวณใครก่อน — และนั่นคือคำถามที่บทถัดไปตอบทั้งบท

Read the full book