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

P2 Camera projection และระยะปลอดภัย

ฉาย plate จากกล้องเดิมลงบน geometry ง่าย ๆ แล้วดูว่าขยับได้แค่ไหนก่อนภาพเละ

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

1 อธิบาย

camera projection คือการเอากล้องที่ถ่าย plate มาเป็น “โปรเจกเตอร์” ฉายภาพลงบน geometry ง่าย ๆ ที่วางตรงกับฉาก ที่นี่ใช้พื้นเรียบหนึ่งแผ่น การ์ดหนึ่งใบสำหรับเขา และฉากฟ้าไกล ๆ แล้วถ่ายใหม่ด้วยกล้องอีกตัวที่ขยับได้

ปัญหาคือ plate มีพิกเซลจำกัด ยิ่งกล้องใหม่เข้าไปใกล้ พื้นใกล้ ๆ ยิ่งถูกขยาย (stretch) จนเบลอ และของที่ไม่มี geometry รองรับ เช่นหิน จะถูกแปะแบนลงพื้นแล้ว “ไหล” เมื่อกล้องขยับ

stretch = 1 / σ_min( ∂plate px / ∂screen px )

2 ลงมือลอง

ขยับกล้องจน “ยืดมากสุด” อยู่ระหว่าง 1.8× ถึง 2.0× นี่คือขอบของระยะปลอดภัย

ลองเปิด stretch map: เขียว = คมเท่า plate, แดง = ขยายเกิน 2 เท่า

SkyVFX Lab · P2interactive · 1001

3 เจาะลึก

โปรเจกเตอร์กับกล้องถ่ายใหม่

มีกล้องสองตัวที่ทำงานคนละหน้าที่ กล้องฉาย (projection camera) ต้องเหมือนกล้อง plate ทุกอย่างและหยุดนิ่งที่เฟรมที่ใช้ฉาย ส่วนกล้อง render เป็นตัวที่ขยับได้

ถ้ากล้องฉายขยับตามกล้อง render ภาพจะวิ่งตามกล้องไปด้วยและไม่ติดกับ geometry เลย คิดแบบเดียวกับ reference frame ของการ track

  1. 1ภาพที่ paint/เลือกเฟรม
  2. 2กล้องฉาย (หยุดนิ่ง)
  3. 3ฉายลง geometry
  4. 4render ด้วยกล้องที่ขยับ

อ่านค่า stretch

stretch คือพิกเซล plate หนึ่งพิกเซลกินพื้นที่บนจอใหม่กี่พิกเซลในทิศที่แย่ที่สุด 1× = คมเท่าเดิม 2× = พิกเซลถูกขยายสองเท่าในทิศนั้น ภาพเริ่มนุ่มให้เห็น

ใน figure พื้นใกล้ที่สุดอยู่ราว 4.4 ม. จากกล้อง ดันเข้าไปแค่ราว 1.4 ม. ก็ยืดเกือบ 1.9× เพราะพื้นที่ใกล้ถูกเห็นแบบเฉียงและขยายทั้งสองแกน การเลื่อนข้าง 2 ม. ก็ยืดราว 1.8× จากการเฉือนของพื้น

ดันเข้ายืดมากสุด
0 m1.00×
0.5 m≈ 1.28×
1.0 m≈ 1.60×
1.4 m≈ 1.89×
2.0 m≈ 2.36×

แก้เรื่องความละเอียด

ภาพที่แสดงเล็กลงบนจอยังเก็บรายละเอียดไว้ครบ แต่ภาพที่ถูกแสดงใหญ่ขึ้นสร้างรายละเอียดใหม่ไม่ได้ จึงควรฉายจากเฟรมที่กล้องอยู่ใกล้วัตถุที่สุด หรือ paint ภาพที่ละเอียดกว่า plate (เช่น 2 เท่า) สำหรับบริเวณที่กล้องจะเข้าไปใกล้

ของนุ่ม ๆ อย่างหมอก ฟ้า หรือ grade ทนการขยายได้ดี ใช้ความละเอียดต่ำได้ ส่วนพื้นผิวคม ๆ ใกล้กล้องต้องการพิกเซลมาก

ฉายจากเฟรมที่ใกล้ที่สุด ไม่ใช่เฟรมแรก

geometry ง่ายเกินไปเห็นได้ยังไง

หินใน plate ไม่มี geometry รองรับ จึงถูกฉายแบนลงพื้น ตอนกล้องนิ่งดูปกติ แต่พอขยับ หินจะเอนและไหลไปกับพื้น ใน figure วงส้มคือที่หินควรอยู่ จุดฟ้าคือที่ projection วางมัน

ทางเลือกคือสร้าง geometry คร่าว ๆ ให้หิน หรือ paint หินออกจากภาพที่ฉายลงพื้นแล้วใส่หินเป็นชั้นของตัวเอง

4 ในงานจริง

ทำใน Nuke

  1. Camera ที่ตรงกับ plate: ทำสำเนาไว้ใช้ฉาย แล้วตรึงไว้ที่เฟรมที่จะฉาย
  2. ภาพที่จะฉาย + กล้องฉาย → Project3D
  3. Project3D → Card หรือ geometry จาก ReadGeo ที่วางตรงกับฉาก
  4. รวมใน Scene แล้ว ScanlineRender ด้วย Camera ตัวที่ขยับ
  5. เทียบผลกับ plate ที่เฟรมฉาย ต้องตรงกันก่อนเริ่มขยับ

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

  • ✗ ใช้กล้องตัวเดียวกันทั้งฉายและ render✓ แยกกล้องฉายที่ตรึงไว้ ภาพจึงติดกับ geometry
  • ✗ ฉายจากเฟรมแรกทั้งที่กล้องดันเข้าไปทีหลัง✓ ฉายจากเฟรมที่ใกล้ที่สุด หรือ paint ภาพละเอียดกว่า
  • ✗ ฉายวัตถุที่นูนลงบนพื้นเรียบ✓ ทำ geometry คร่าว ๆ หรือ paint ออกแล้วแยกเป็นชั้น
  • ✗ ขยับกล้องเกินระยะที่ plate ถ่ายไว้✓ ดูบริเวณ “นอก plate” แล้ว paint เผื่อหรือจำกัดการขยับ

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

  • ที่เฟรมฉาย ภาพ render ตรงกับ plate
  • ไม่มีพื้นผิวคมที่ยืดเกินราว 2× ตลอดช็อต
  • ไม่มีบริเวณนอก plate โผล่ในเฟรม
  • วัตถุนูนไม่ไหลไปกับพื้น

5 เช็กตัวเอง

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

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

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

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

คำถามเพิ่ม

1. ภาพที่ฉายวิ่งตามกล้องไปตลอดและไม่ติดกับพื้น สาเหตุน่าจะเป็นอะไร

2. ช็อตดันกล้องเข้าหารูปปั้นจากเฟรม 1 ถึง 100 ควรฉายจากเฟรมไหน

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