หน้าแรก · Lab · พื้นฐาน motion

M4 Overshoot และ settle

สปริงที่เลยเป้าครั้งเดียวแล้วนิ่ง

พื้นฐาน motion · ~7 นาที · ฟรี

1 อธิบาย

ของที่มีน้ำหนักไม่หยุดตรงเป้าพอดี มันเลยไปนิดแล้วกลับมา งาน motion และ UI นิยมใช้สปริงที่มีสองค่า คือ stiffness (แข็ง = เร็ว) กับ damping (หน่วงมาก = แกว่งน้อย) อัตราส่วน ζ บอกนิสัยของมัน: ต่ำกว่า 1 แกว่ง เท่ากับ 1 เข้าเป้าเร็วสุดโดยไม่เลย มากกว่า 1 อืด

กราฟนี้คำนวณจากสูตรคำตอบตรงของสปริง ไม่ได้จำลองทีละขั้น จึงไม่ระเบิดแม้ตั้งค่าสุดโต่ง ดูแถบเขียว ±2%: นับว่า "นิ่ง" เมื่อเส้นเข้าแถบแล้วไม่ออกอีก

x″ = k (1 − x) − c x′ · ζ = c ÷ (2√k)

2 ลงมือลอง

โจทย์: เลยเป้า 5–20% ครั้งเดียว เด้งกลับไม่เกิน 2% และนิ่งภายในเฟรม 16

ζ ราว 0.55–0.65 ให้เลยเป้าครั้งเดียว จากนั้นเพิ่ม stiffness จนเร็วพอ (เพิ่ม damping ตามเพื่อคง ζ)

SkyVFX Lab · M4interactive · 1001

3 เจาะลึก

สองค่า สามนิสัย

สปริงมวล 1 มี stiffness k และ damping c ความถี่ธรรมชาติคือ √k (เรเดียนต่อวินาที) อัตราส่วน damping ζ = c ÷ (2√k) เป็นตัวบอกนิสัย ถ้าอยากให้เร็วขึ้นโดยนิสัยเดิม ต้องเพิ่ม k และเพิ่ม c ตามเพื่อคง ζ

ζเลยเป้าเด้งกลับความรู้สึก
0.1366%44%ยางยืด แกว่งไม่หยุด
0.69.5%0.9%มีน้ำหนัก เลยครั้งเดียว
10%0%แม่น ไม่เลย
20%0%อืด เข้าเป้าช้า

เลยเป้าแค่ไหน คำนวณได้

สำหรับ ζ < 1 การเลยเป้าครั้งแรกเท่ากับ e^(−ζπ/√(1−ζ²)) และแต่ละครั้งที่แกว่งกลับจะเล็กลงด้วยอัตราเดียวกัน ζ = 0.6 ให้เลยเป้าราว 9.5% แล้วเด้งกลับราว 0.9% ซึ่งเล็กจนตามองแทบไม่เห็น ผลคือ "เลยครั้งเดียวแล้วนิ่ง"

ตัวอย่างเช่น k = 200, c = 17 (ζ ≈ 0.60) นิ่งในแถบ ±2% ตั้งแต่เฟรม 11

อยากได้ "เด้งหนึ่งที" ให้เริ่มที่ ζ ≈ 0.6 แล้วปรับแค่ความเร็ว

ทำไมใช้คำตอบตรง ไม่ใช่จำลองทีละขั้น

การจำลองทีละเฟรมแบบง่ายที่สุด (explicit Euler) เพิ่มพลังงานเข้าไปเรื่อย ๆ สปริงแข็งมาก ๆ ที่ 24 ขั้นต่อวินาทีอาจแกว่งแรงขึ้นจนระเบิด คำตอบตรงไม่มีปัญหานี้ ถ้าต้องจำลอง ให้ใช้ขั้นย่อยหลายขั้นต่อเฟรมและวิธีที่เสถียรกว่า เช่น semi-implicit Euler

4 ในงานจริง

ทำใน Nuke

  1. Transform: key overshoot ด้วยมือ คือ key เลยเป้า แล้ว key กลับมาเล็กน้อย แล้ว key นิ่ง
  2. ดูใน Curve Editor ว่าการแกว่งแต่ละครั้งเล็กลงจากครั้งก่อนด้วยอัตราคงที่ แต่ระยะเวลาระหว่างแต่ละครั้งเท่าเดิม (สปริงที่มี damping แกว่งด้วยคาบคงที่ ต่างจากลูกบอลเด้งที่ช่วงห่างสั้นลงเรื่อย ๆ)
  3. ถ้าต้องการสูตร ใส่ expression ที่ translate ของ Transform โดยใช้ exp() และ cos() กับ frame เช่นเดียวกับสูตรสปริงในบทนี้
  4. เปิด motionblur ของ Transform เพื่อให้ช่วงที่เร็วมี blur ตามจริง

พลาดบ่อย → แก้ยังไง

  • ✗ เพิ่ม stiffness อย่างเดียวเพื่อให้เร็วขึ้น✓ ζ จะลดลง ทำให้แกว่งมากขึ้น ต้องเพิ่ม damping ตามด้วย
  • ✗ ใส่ overshoot กับทุกอย่าง✓ ของหนักหรือแข็ง (กล้องบนขาตั้ง, เครื่องจักร) มักไม่ควรเด้ง ใช้ ζ ใกล้ 1
  • ✗ key overshoot ที่ใหญ่เท่ากันทุกครั้ง✓ แต่ละครั้งต้องเล็กลงด้วยอัตราคงที่ ไม่งั้นจะดูเป็นกลไก

เช็กก่อนส่งช็อต

  • จำนวนครั้งที่แกว่งเหมาะกับวัสดุ (แข็ง = น้อย)
  • แต่ละครั้งเล็กลงอย่างสม่ำเสมอ
  • นิ่งสนิทก่อนช็อตถัดไปหรือก่อน action ต่อไป
  • ช่วงที่เร็วที่สุดมี motion blur

5 เช็กตัวเอง

เช็กตัวเอง 1 ข้อ

เพิ่ม damping ไปเรื่อย ๆ จน ζ = 1 การเคลื่อนเป็นแบบไหน

สิ่งที่ได้เรียน

🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด

คำถามเพิ่ม

1. สปริงแกว่งดีแล้ว แต่ช้าไปสองเท่า ทำอย่างไรให้เร็วขึ้นโดยนิสัยการแกว่งเดิม

2. ζ = 0 ได้การเคลื่อนแบบไหน

ตัวเลขมาจากไหน: สปริงมวล 1 เริ่มนิ่งที่ 0 แล้วถูกดึงไปที่ 1 ใช้คำตอบตรงทางคณิตศาสตร์ครบทั้งสามแบบ (แกว่ง, critical, overdamped) ตรวจด้วยตัวเลขแล้ว แถบ ±2% และช่วง 5–20% เป็นตัวเลขที่เราเลือกให้โจทย์ ไม่ใช่มาตรฐาน