1 อธิบาย
ภาพนิ่งภาพเดียวบอกความลึกไม่ได้แน่นอน ยอดเสาสีส้มอยู่สูงในเฟรมใกล้ ๆ ภูเขา ดูเหมือนอยู่ไกล แต่พอกล้องขยับ จุดที่ใกล้จะลากเส้นยาว จุดไกลลากเส้นสั้น
โปรแกรม camera track 3D ใช้หลักเดียวกัน มันดูว่าจุดแต่ละจุดเลื่อนต่างกันเท่าไรแล้วคำนวณกลับเป็นตำแหน่ง 3D และการเคลื่อนของกล้อง จึงต้องมีจุด track กระจายทั้งใกล้ กลาง และไกล
Z ≈ f_px · T / shift2 ลงมือลอง
ขยับกล้องให้เห็นเส้นของแต่ละจุด แล้วกด A–E เรียงจากใกล้ที่สุดไปไกลที่สุด
เส้นฟ้ายาว = จุดใกล้ เส้นสั้น = จุดไกล ไม่ต้องดูว่าจุดอยู่สูงหรือต่ำในภาพ
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หา/ตามจุด
- 2ตัดของที่เคลื่อนเอง
- 3solve กล้อง + จุด 3D
- 4เช็กด้วยการ์ดบนพื้น
จุด track ต้องมีทั้งใกล้ กลาง ไกล
4 ในงานจริง
ทำใน Nuke
- ใช้ Tracker ตามจุดที่ระยะต่างกันสักสองสามจุด แล้วเทียบระยะที่เลื่อนในช่วงเดียวกัน
- การ solve 3D ใน Nuke ทำด้วย CameraTracker (NukeX): mask ของที่เคลื่อนเองออกก่อน
- เช็กผล solve: วาง Card บนพื้นแล้ว render ผ่าน ScanlineRender ทับ plate ดูว่าติดไหม
พลาดบ่อย → แก้ยังไง
- ✗ เดาความลึกจากตำแหน่งสูง/ต่ำในเฟรม✓ ดูระยะที่จุดเลื่อนเมื่อกล้องขยับ
- ✗ track แค่จุดไกลทั้งหมด✓ กระจายจุดให้ครบทั้งใกล้ กลาง ไกล
- ✗ ปล่อยให้คนหรือรถที่เดินอยู่เข้าไปใน solve✓ mask ของที่เคลื่อนเองออก
เช็กก่อนส่งช็อต
- มีจุด track หลายระยะ
- ไม่มีของที่เคลื่อนเองใน solve
- การ์ดทดสอบบนพื้นติดตลอดช็อต
5 เช็กตัวเอง
กล้องเลื่อนข้าง จุด 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