หน้าแรก · Lab · Tracking และ matchmove

TR3 Planar track: เปลี่ยนภาพบนจอ

พื้นผิวแบนตามได้ด้วย corner pin สี่มุม

Tracking และ matchmove · ~8 นาที · ฟรี

1 อธิบาย

พื้นผิวที่แบน เช่นจอเขียวบนเสา track เป็นระนาบด้วยสี่มุมได้ แม้กล้องจะเคลื่อนแบบ 3D เพราะการเคลื่อนที่ของระนาบคือ corner pin (homography) พอดี

ลากมุมทั้งสี่ไปวางบนมุมจอเขียวที่เฟรม 1 ตั้ง ชนิด track เป็น Planar (corner pin) แล้วกดเล่น ดูค่ามุมคลาดมากสุดทั้ง shot จากนั้นลองสลับกลับเป็น จุดเดียว (translate) แม้วางตรงแค่ไหน มุมก็ยังไถลไปราว 4.9 px บนจอกว้าง 103 px

plane motion = corner pin (homography, 4 corners)

2 ลงมือลอง

โจทย์: เปลี่ยนภาพบนจอด้วย planar track วางมุมให้ตรงมุมจอ และทำให้มุมคลาดมากสุดตลอด shot ไม่เกิน 2.5 px

ตอนลากมุม จะมีภาพขยายมุมนั้นให้ดูที่มุมซ้ายบน ปุ่มลูกศรขยับมุมที่เลือกทีละครึ่ง px แล้วดูค่าคลาดมากสุดทั้ง shot ไม่ใช่แค่ของเฟรมนี้

SkyVFX Lab · TR3interactive · 1001

3 เจาะลึก

ทำไมระนาบคือ corner pin พอดี

กับเลนส์ในอุดมคติที่ไม่มี distortion ไม่ว่ากล้องจะหมุนหรือเคลื่อนที่อย่างไร ภาพของพื้นผิวแบนในสองเฟรมจะสัมพันธ์กันด้วย homography ตัวเดียว และสี่มุมก็พอจะกำหนด homography นั้นได้ นี่คือเหตุผลที่ 2.5D หรือ planar track ใช้ได้กับจอ มือถือ ภาพบนผนัง หรือพื้น แม้กล้องจะเคลื่อนแบบ 3D ส่วน plate จริงที่มี lens distortion ให้ undistort ก่อน ไม่เช่นนั้นมุมจะไถล

Transform เป็น affine เส้นขนานยังขนานกันเสมอ จึงทำ perspective ไม่ได้ ส่วน CornerPin เป็น projective จึงบีบด้านหนึ่งของจอให้แคบกว่าอีกด้านได้แบบที่กล้องเห็นจริง

แบบตามอะไรได้
one pointเลื่อนตำแหน่งอย่างเดียว
Transform (affine)เลื่อน หมุน scale เส้นขนานยังขนาน
CornerPin (projective)ทุกอย่างข้างบน รวม perspective ของระนาบ

จุดเดียวไม่พอสำหรับจอ

เมื่อกล้องเคลื่อน รูปทรงของจอบนภาพเปลี่ยนไป ด้านที่ใกล้กล้องจะยาวขึ้น ด้านที่ไกลจะสั้นลง จุดเดียวบอกได้แค่ว่าจอเลื่อนไปไหน ไม่ได้บอกว่ามุมทั้งสี่ไปอยู่ตรงไหน

ในภาพนี้ จอกว้างราว 103 px ที่เฟรม 1 และ pin แบบ one point ที่วางตรงเป๊ะยังพลาดที่มุมได้ถึงราว 4.9 px ตลอดช็อต จุดกึ่งกลางอาจนิ่ง แต่ขอบภาพที่ไถลจะเห็นชัดที่สุด

ถ้ากึ่งกลางนิ่งแต่มุมไถล ให้นึกถึง perspective ก่อนจะโทษ tracker

ขั้นตอนเปลี่ยนภาพบนจอ

นำภาพที่จะใส่เข้ามาที่ความละเอียดจริงของมันเอง แล้วตั้งมุม from ของ CornerPin ให้ตรงกับขอบ input จากนั้นวางมุม to บนมุมจอใน reference frame ซึ่งเป็นเฟรมที่ไม่มีการแก้ใด ๆ แล้วค่อย export

กระจายจุดให้ห่างกันเท่าที่พื้นผิวยอม ถ้าจุดกระจุกอยู่ใกล้กัน error เล็ก ๆ จะขยายใหญ่ขึ้นที่มุมไกล

  1. 1ภาพที่ความละเอียดของมันเอง
  2. 2from = set to input
  3. 3track สี่มุม / planar
  4. 4วางมุมบน reference frame
  5. 5export CornerPin
  6. 6เช็กด้วย stabilise

ตัวเลือกของ planar tracker

ตัวเลือกชนิดการเคลื่อนที่ของ PlanarTracker มีตั้งแต่ Translation ไปจนถึง TSR + Shear และ Perspective เลือก Perspective เมื่อต้องตามมุมมองของระนาบเต็มรูป ถ้าเลือกชนิดที่ง่ายกว่า มันจะเฉลี่ยทั้งพื้นที่ออกมาเป็นการเคลื่อนที่แบบที่ง่ายกว่า planar tracker ใช้สี่มุม ไม่ใช่ mesh จึงเหมาะกับพื้นผิวแบนเท่านั้น และพื้นผิวนั้นต้อง track ได้จริง

export แบบได้อะไร
CornerPin2D (relative)from ถูกเติมไว้ ไม่มีการเปลี่ยนที่ reference frame
CornerPin2D (absolute)from ว่าง ใช้เมื่อภาพเข้ามาที่ format ของมันเอง
CornerPin2D (stabilize)CornerPin ที่ stabilise ระนาบให้นิ่ง
TrackerTracker ที่มีสี่จุด

เช็กด้วย stabilise และเลือกพื้นผิวให้ถูก

copy CornerPin แล้วกลับด้านเป็น stabilise ซูมเข้า แล้วลากเวลาไปมาเร็ว ๆ จอควรนิ่งสนิท ถ้ามุมไหนขยับ ให้แก้ที่มุมนั้น การ stabilise เพิ่มการ resample อีกรอบ จึงขยายอาการสั่นจาก filter ให้ดูมากกว่าจริง ตัดสินสุดท้ายบนผลที่ไม่ stabilise ขณะเล่น

track ผิวจอ ไม่ใช่เงาสะท้อนหรือคนที่เดินผ่านหน้าจอ และอย่าใช้ planar กับสิ่งที่ไม่แบน เช่นตัวหุ่นยนต์หรือเนินที่มีหินอยู่คนละความลึก

การเช็กแบบ stabilise เข้มงวด ถ้ามุมไหลตอน stabilise ก็ไหลจริงในช็อต

4 ในงานจริง

ทำใน Nuke

  1. Read ภาพที่จะใส่ที่ความละเอียดของมันเอง ไม่ Reformat เป็น format ของ plate ก่อน
  2. Tracker: track สี่มุมของจอ เปิด T/R/S แล้วเลือก Export > CornerPin2D (use reference frame) หรือใช้ PlanarTracker (NukeX) แล้ว export เป็น CornerPin2D (relative)
  3. CornerPin2D: ในแท็บ from ตั้ง no animation แล้ว set to input
  4. ตั้ง reference frame แล้ววางมุมให้ตรงจอที่เฟรมนั้น ก่อน export
  5. copy CornerPin2D เปิด invert เพื่อ stabilise ต่อ Reformat (resize none, ใหญ่กว่าเล็กน้อย) ไม่ให้ภาพถูกตัด แล้วลากเวลาเร็ว ๆ

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

  • ✗ นำภาพเข้ามาที่ format ของ plate มุม from จึงผิด✓ ใช้ความละเอียดจริงของภาพ แล้ว set to input ที่แท็บ from
  • ✗ วางมุมบนเฟรมที่ไม่ใช่ reference frame✓ ตั้ง reference frame ก่อน แล้ววางมุมบนเฟรมนั้น
  • ✗ track เงาสะท้อนหรือคนที่อยู่หน้าจอ✓ track ผิวจอเอง และกันสิ่งที่เคลื่อนบนจอออก
  • ✗ ใช้ planar กับสิ่งที่ไม่แบน✓ ใช้ planar กับพื้นผิวแบนเท่านั้น ถ้ามีความลึกต่างกันให้ใช้ 2D หรือ 3D track
  • ✗ วางจุด track กระจุกกลางจอ✓ กระจายจุดให้ห่างกันที่สุดเท่าที่พื้นผิวยอม

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

  • ภาพที่ใส่อยู่ที่ความละเอียดของมันเอง และ from ตรงขอบ input
  • มุมตรงจอที่ reference frame
  • stabilise บน pin แล้วลากเร็ว ๆ จอนิ่งทุกมุม
  • ดูทั้งช็อตแบบไม่ stabilise ขณะเล่น มุมไม่ไถล
  • คนหรือสิ่งที่อยู่หน้าจอยังอยู่หน้าภาพที่ใส่

5 เช็กตัวเอง

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

pin แบบ one point วางตรงจุดเป๊ะแล้ว แต่มุมของภาพยังไถลเมื่อกล้องเคลื่อน เพราะอะไร

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

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

คำถามเพิ่ม

1. ภาพที่ใส่บนจอบิดเบี้ยวตั้งแต่เฟรมแรก และไม่เต็มจอ เพิ่งพบว่ามัน Reformat เป็น format ของ plate ไว้ ปัญหาคืออะไร

2. ข้อไหนเหมาะกับ planar track ที่สุด

ตัวเลขมาจากไหน: shot มือถือ 48 เฟรม (640×360) เรนเดอร์ใน Blender (Cycles) จากฉากทะเลทรายของเรา เพิ่มจอเขียวบนเสาและโดรนบินผ่าน เฟรม 1 คือกล้องเดียวกับ plate นิ่ง ตำแหน่งจริงของทุกจุดมาจาก 3D ของฉากเอง (truth.json, dist.f32) การเคลื่อนที่ของระนาบมาจากมุมจริงของจอในฉาก (กล้อง Blender) ภาพจึงแสดงผลของ planar track ที่สมบูรณ์แบบ planar tracker จริงประมาณ corner pin เดียวกันจากภาพ และมี error เล็กน้อยเพิ่มเข้ามา test card เป็นของ SkyVFX เอง คำนวณในเบราว์เซอร์