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

M6 Camera shake สำหรับงาน VFX

shake ของระเบิดเริ่มตอน shockwave มาถึง ไม่ใช่ตอนแสงวาบ

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

1 อธิบาย

Shake มีสามค่าหลัก คือ frequency (สั่นถี่แค่ไหน), amplitude (แรงแค่ไหน) และ decay (จางเร็วแค่ไหน) ในงาน comp ให้ key แค่ amplitude ส่วน frequency ตั้งคงที่ไว้ เพราะการ key frequency ทำให้ noise ข้างในกระตุกหรือเร่งผิดธรรมชาติ

แสงจากระเบิดถึงกล้องแทบทันที แต่ shockwave เดินทางราวความเร็วเสียง ถ้าระเบิดห่าง 170 เมตร shockwave จึงมาถึงช้ากว่าแสงราวครึ่งวินาที (12 เฟรม) มือใหม่มักสั่นกล้องตั้งแต่เฟรมแสงวาบ ทำให้เสียความรู้สึกเรื่องระยะและขนาดของระเบิด

delay = distance ÷ 343 m/s · offset = A · e^(−decay·t) · noise(freq · t)

2 ลงมือลอง

โจทย์: ให้ shake เริ่มตอน shockwave มาถึง แรงพอเห็น (≥ 4 px) และจางเหลือ ≤ 10% ก่อนจบ loop

หาเส้นฟ้าบน timeline และข้อความ "shockwave มาถึงกล้อง" ในภาพ แล้วลองสลับ motion blur ของประกายไฟดู

SkyVFX Lab · M6interactive · 1001

3 เจาะลึก

เวลาของ shake บอกขนาดและระยะ

แสงมาถึงทันที แต่ shockwave และเสียงมาช้ากว่าตามระยะทาง ระเบิดที่อยู่ไกลจึงมีช่องว่างระหว่างแสงวาบกับการสั่น ช่องว่างนี้คือสิ่งที่ทำให้คนดูรู้สึกว่าระเบิดใหญ่และไกล ถ้าสั่นตั้งแต่แสงวาบ ระเบิดจะดูเล็กและอยู่ใกล้

ระยะช้ากว่าแสงเฟรม @24
43 m0.125 s3
172 m0.5 s12
343 m1 s24
1 km2.9 s70

ระยะ ÷ 343 = วินาทีที่ต้องรอ แล้วคูณ 24 ได้จำนวนเฟรม

key แค่ amplitude

Frequency คือความเร็วที่ noise ข้างใน shake ถูกอ่าน ถ้า key ให้เปลี่ยนตามเวลา ตำแหน่งที่อ่าน noise จะเร่งหรือถอยกะทันหัน ได้การกระตุกแปลก ๆ ตั้ง frequency คงที่ แล้วคุมความแรงด้วย amplitude อย่างเดียว ถ้ามีหลายเหตุการณ์ ให้แยก shake ต่อเหตุการณ์

Shake ที่ดีมักมีหลายชั้น: สั่นถี่เล็ก ๆ (jitter) แรงกระแทกหลัก (impact) และการลอยช้า ๆ (drift) แต่ละชั้นมี frequency ของตัวเองที่คงที่

  1. 1แสงวาบ (ไม่สั่น)
  2. 2shockwave มาถึง
  3. 3amplitude พุ่ง
  4. 4decay จางลง

Motion blur กับ shake

ใช้ motion blur ของ node ที่ทำ shake เอง (shutter ราว 0.5 แบบ centred) กับ plate และ CG ที่ยังไม่มี blur จากการสั่นในตัว เส้นของประกายไฟคือ motion blur ของจุดสว่างอยู่แล้ว ถ้าโดน blur 2D จาก shake ซ้ำ จะได้เส้นอ้วนตรงแทนเส้นโค้งที่ควรเป็น element ที่มีเส้น blur ชัดในตัวอย่างประกายไฟ ให้ผ่าน shake อีกชุดที่ link knob กับตัวหลักแต่ปิด motion blur แล้วค่อย merge กลับเข้า comp ที่สั่นแล้ว หรือดีที่สุดคือใส่ shake ที่กล้องตั้งแต่ตอนเรนเดอร์ CG เส้นจะออกมาโค้งถูกตั้งแต่แรก

ตำแหน่งใน stack: shake อยู่หลัง glow และ flare แต่ก่อน grain เสมอ grain เป็น node สุดท้าย ถ้า shake หลัง grain ตัว grain จะถูกเขย่าและ blur ไปด้วย

4 ในงานจริง

ทำใน Nuke

  1. CameraShake: key แค่ amplitude, frequency คงที่, เปิด motion blur ของ node กับ plate และ CG (ประกายไฟใช้สำเนาที่ link กันแต่ปิด blur)
  2. หรือทำเองด้วย Transform: ใส่ expression noise() ที่ translate แล้วคูณด้วยค่า amplitude ที่ key ไว้ใน knob แยก
  3. เผื่อขอบภาพ (overscan) หรือ scale ขึ้นเล็กน้อย เพื่อไม่ให้ขอบดำโผล่ตอนสั่น
  4. วางหลัง glow/flare และก่อน Grain ซึ่งเป็น node สุดท้าย
  5. ดูจังหวะจาก cache ที่ความเร็วจริง การเลื่อนทีละเฟรมตัดสินจังหวะไม่ได้

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

  • ✗ สั่นตั้งแต่เฟรมแสงวาบของระเบิดที่อยู่ไกล✓ เลื่อนไปเริ่มตอน shockwave มาถึง (ระยะ ÷ 343 วินาที)
  • ✗ key frequency ให้สั่นถี่ขึ้นตอนกระแทก✓ frequency คงที่ แล้วเพิ่ม amplitude แทน
  • ✗ ใส่ MotionBlur ทับประกายไฟหลัง shake✓ ประกายมี blur ในตัวแล้ว ให้ผ่าน shake สำเนาที่ link กันแต่ปิด motion blur หรือใส่ shake ที่กล้องตอนเรนเดอร์
  • ✗ shake หลัง grain✓ grain ต้องเป็น node สุดท้าย ย้าย shake ขึ้นไปก่อน

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

  • shake เริ่มตอน shockwave มาถึง ไม่ใช่ตอนแสงวาบ
  • key แค่ amplitude, frequency คงที่
  • ไม่มีเฟรมที่ blur หรือกระโดดแรงผิดปกติ
  • ไม่เห็นขอบภาพตอนสั่น
  • ประกายไม่ถูก blur ซ้ำ และ grain อยู่ท้ายสุด

5 เช็กตัวเอง

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

element ประกายไฟเรนเดอร์มาพร้อม motion blur แล้ว คุณใส่ camera shake แบบ 2D ทับ ควรทำยังไงกับ blur

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

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

คำถามเพิ่ม

1. ระเบิดห่าง 686 เมตร ที่ 24 fps ควรเริ่ม shake หลังแสงวาบกี่เฟรม (โดยประมาณ)

2. อยากให้แรงกระแทกหนักขึ้นตอนต้น ควรทำอะไร

ตัวเลขมาจากไหน: ใช้ความเร็วเสียง 343 m/s (อากาศแห้งราว 20 °C) และถือว่าแสงมาถึงทันที shockwave ของระเบิดแรง ๆ ใกล้จุดระเบิดวิ่งเร็วกว่าเสียง แล้วช้าลงเข้าหาความเร็วเสียงเมื่อไกลออกไป ตัวเลขจึงเป็นค่าประมาณ "noise" ของ shake ในหน้านี้คือผลรวมคลื่น sine สามชุด ใช้แทน noise จริงของเครื่องมือ shake ภาพระเบิดวาดด้วยโค้ด