หน้าแรก · Lab · 2.5D และ projection

P4 อ่านความลึกจาก parallax

ตำแหน่งในเฟรมหลอกได้ แต่ระยะที่จุดเลื่อนบอกความลึกตรง ๆ

2.5D และ projection · ~6 นาที · ฟรี

1 อธิบาย

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

โปรแกรม camera track 3D ใช้หลักเดียวกัน มันดูว่าจุดแต่ละจุดเลื่อนต่างกันเท่าไรแล้วคำนวณกลับเป็นตำแหน่ง 3D และการเคลื่อนของกล้อง จึงต้องมีจุด track กระจายทั้งใกล้ กลาง และไกล

Z ≈ f_px · T / shift

2 ลงมือลอง

ขยับกล้องให้เห็นเส้นของแต่ละจุด แล้วกด A–E เรียงจากใกล้ที่สุดไปไกลที่สุด

เส้นฟ้ายาว = จุดใกล้ เส้นสั้น = จุดไกล ไม่ต้องดูว่าจุดอยู่สูงหรือต่ำในภาพ

SkyVFX Lab · P4interactive · 1001

3 เจาะลึก

จากระยะเลื่อนกลับเป็นความลึก

ถ้ารู้ว่ากล้องเลื่อนไปเท่าไร (T) และจุดเลื่อนบนจอเท่าไร คำนวณความลึกกลับได้ Z ≈ f_px·T / shift (f_px คือ focal length หน่วยพิกเซล ในฉากนี้ ≈ 622) ใน figure พอกดครบทั้ง 5 จุด ระบบจะบอกความลึกและ px ต่อเมตรของแต่ละจุด

ในความจริงเราไม่รู้ T แน่นอน แต่ “สัดส่วน” ยังใช้ได้ จุดที่เลื่อนเป็นสามเท่าของอีกจุดอยู่ใกล้กว่าสามเท่า ไม่ว่ากล้องจะเลื่อนข้างไปเท่าไร (ใช้ได้เมื่อกล้องเลื่อนข้างโดยไม่ pan หรือ tilt)

ตำแหน่งในเฟรมหลอกได้

บนพื้นราบ ของที่อยู่ต่ำในเฟรมมักใกล้กว่า แต่กฎนี้ใช้กับของที่วางบนพื้นเท่านั้น ยอดเสา นก หรือป้ายที่ลอยอยู่สูงในเฟรมอาจอยู่ใกล้มาก parallax ไม่สนใจว่าจุดอยู่สูงหรือต่ำ

จุดใน figureความลึกเลื่อน/ม.
หินใกล้≈ 6.9 m≈ 90 px
ยอดเสาส้ม≈ 8.9 m≈ 70 px
หินซ้ายกลาง≈ 18 m≈ 35 px
หินขวาไกล≈ 30 m≈ 21 px
เขา≈ 89 m≈ 7 px

camera tracker อ่าน parallax แบบนี้

tracker หาจุดเด่นหลายร้อยจุดแล้วตามมันทั้งช็อต จากนั้นหาตำแหน่ง 3D ของจุดและเส้นทางกล้องที่อธิบายการเลื่อนทั้งหมดได้พร้อมกัน ถ้าจุดอยู่ระยะเดียวกันหมด ข้อมูลความลึกจะไม่พอ solve จะไม่มั่นคง

ของที่เคลื่อนเอง (คน รถ ใบไม้ไหว เงาสะท้อน) ทำให้คำนวณผิด เพราะการเลื่อนของมันไม่ได้มาจากกล้อง ต้องตัดออกด้วย mask

  1. 1หา/ตามจุด
  2. 2ตัดของที่เคลื่อนเอง
  3. 3solve กล้อง + จุด 3D
  4. 4เช็กด้วยการ์ดบนพื้น

จุด track ต้องมีทั้งใกล้ กลาง ไกล

4 ในงานจริง

ทำใน Nuke

  1. ใช้ Tracker ตามจุดที่ระยะต่างกันสักสองสามจุด แล้วเทียบระยะที่เลื่อนในช่วงเดียวกัน
  2. การ solve 3D ใน Nuke ทำด้วย CameraTracker (NukeX): mask ของที่เคลื่อนเองออกก่อน
  3. เช็กผล solve: วาง Card บนพื้นแล้ว render ผ่าน ScanlineRender ทับ plate ดูว่าติดไหม

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

  • ✗ เดาความลึกจากตำแหน่งสูง/ต่ำในเฟรม✓ ดูระยะที่จุดเลื่อนเมื่อกล้องขยับ
  • ✗ track แค่จุดไกลทั้งหมด✓ กระจายจุดให้ครบทั้งใกล้ กลาง ไกล
  • ✗ ปล่อยให้คนหรือรถที่เดินอยู่เข้าไปใน solve✓ mask ของที่เคลื่อนเองออก

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

  • มีจุด track หลายระยะ
  • ไม่มีของที่เคลื่อนเองใน solve
  • การ์ดทดสอบบนพื้นติดตลอดช็อต

5 เช็กตัวเอง

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

กล้องเลื่อนข้าง จุด X เลื่อน 90 px จุด Y เลื่อน 30 px ข้อไหนถูก

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

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

คำถามเพิ่ม

1. เลื่อนกล้องไปพร้อมกัน จุด P เลื่อน 120 px จุด Q เลื่อน 40 px ถ้า P ลึก 5 ม. Q ลึกราวเท่าไร

2. ทำไม camera solve ที่มีแต่จุดบนภูเขาไกลถึงไม่มั่นคง

ตัวเลขมาจากไหน: ฉากสร้างใหม่ในเบราว์เซอร์จาก plate ทะเลทรายและ depth pass จาก Blender (กล้อง 35 มม. เซนเซอร์ 36 มม. สูง 1.6 ม. ก้ม 4°) ตัวเลข parallax คำนวณจากสูตร pinhole: เลื่อนกล้อง T ม. จุดที่ลึก Z ม. เลื่อน ≈ 622·T/Z px ในเฟรมกว้าง 640 การแยกชั้น, ค่า "stretch", ตาข่ายความลึก และ clean plate อัตโนมัติ เป็นแบบสอนหลักการ (ขอบวัตถุและการลบหินทำแบบง่าย) ไม่ใช่ผลจาก Nuke