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 ตรงไหน
| keyframe | driver | |
|---|---|---|
| ค่าขึ้นกับ | เวลา (เลขเฟรม) | property ตัวอื่น |
| หยุดเวลาแล้ว | ค่าค้างนิ่ง | ยังเปลี่ยนได้ ถ้าต้นทางเปลี่ยน |
| ปลายทางระบุด้วย | data path | data path เหมือนกัน |
แถวสุดท้ายคือจุดที่บทที่ 2 กลับมาจ่ายคืน — ตอนตั้ง driver คุณต้องบอกให้ได้ว่าปลายทางคือ data path ไหน index อะไร ในตัวอย่างนี้คือ 'scale' index 2
11.2 ใช้จริงตอนไหน
เมื่อมี "ความสัมพันธ์" ที่ควรเป็นจริงตลอดเวลา ไม่ใช่แค่ในช่วงเวลาหนึ่ง เช่น
- ลูกบิดหมุน แล้วประตูเปิดตาม
- ตัวเลื่อนตัวเดียวคุมการยิ้มของหน้าทั้งหน้า
- ล้อหมุนสัมพันธ์กับระยะที่รถวิ่ง โดยไม่ต้องคีย์ล้อเลย
ข้อสุดท้ายคือตัวอย่างที่เห็นค่าชัดที่สุด: ถ้าคีย์ล้อเอง พอแก้ความเร็วรถทีหลัง ล้อจะลื่นไถลทันที แต่ถ้าใช้ driver มันถูกเสมอโดยอัตโนมัติ
เคล็ดลับ: ถ้าพบว่าตัวเองกำลังจะคีย์ของสองอย่างให้ตรงกันเป๊ะ ๆ นั่นคือสัญญาณว่าควรใช้ driver แทน
11.3 ข้อควรระวัง
driver ที่อ้างวนกลับมาหาตัวเอง (A อ่าน B, B อ่าน A) จะทำให้ Blender ไม่รู้ว่าต้องคำนวณใครก่อน — และนั่นคือคำถามที่บทถัดไปตอบทั้งบท