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

P5 ทำไม 2.5D ถึงพัง: ช่องที่เปิดออก

กล้องขยับแล้วเห็นหลังหิน ซึ่ง plate ไม่เคยถ่ายไว้ ต้อง paint เตรียมไว้

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

1 อธิบาย

plate มีแค่สิ่งที่กล้องเห็นจากตำแหน่งเดียว พื้นด้านหลังหินไม่เคยถูกถ่าย พอกล้องเลื่อน หินวิ่งเร็วกว่าพื้นด้านหลัง ช่องที่ไม่มีข้อมูลจะเปิดออกข้างหิน ขอบฟ้าเหนือเขา และขอบเฟรม

ถ้าไม่ทำอะไรจะเป็นรู ถ้าปล่อยให้ geometry ยืด จะได้ริ้วยาวที่ดูออกง่าย (คนละเรื่องกับค่า stretch ใน P2) วิธีที่ใช้จริงคือ paint clean plate ที่ลบวัตถุออก (รวมเงามืดที่ขอบวัตถุ เพื่อไม่ให้ถูก clone เข้าไปในพื้นที่ด้านหลัง) ฉายไว้ด้านหลัง และ paint เผื่อขอบเฟรมด้วย

gap width ≈ f_px · T · (1/Z_near − 1/Z_far)

2 ลงมือลอง

เลื่อนกล้องอย่างน้อย 1.5 ม. แล้วเลือกวิธีเติมช่องที่ไม่มีรูและไม่มีริ้ว

ติ๊ก “ดูเฉพาะ clean plate” เพื่อดูภาพที่ paint ไว้ด้านหลัง

SkyVFX Lab · P5interactive · 1001

3 เจาะลึก

ช่องเปิดตรงไหน และกว้างแค่ไหน

ช่องเปิดตรงที่ความลึกกระโดด: ขอบหินกับพื้นด้านหลัง ขอบเขากับฟ้า และขอบเฟรม ความกว้าง ≈ f·T·(1/Z_ใกล้ − 1/Z_ไกล) เลื่อน 1.5 ม. หินที่ 7 ม. หน้าพื้นที่ราว 10 ม. เปิดช่องราว 40 px

ช่องเกิดด้านเดียวของวัตถุ ด้านตรงข้ามจะถูกวัตถุบังเพิ่มแทน เลื่อนกล้องไปทางไหน ช่องจะเปิดด้านนั้น

สามทางเลือก

figure ให้ลองทั้งสามแบบกับฉากเดียวกัน

วิธีผลใช้เมื่อ
ไม่เติมรู มองเห็นทันทีไว้ตรวจหาจุดที่ต้อง paint
ยืดขอบริ้วยาวจากขอบวัตถุช่องแคบมาก 1–2 px
clean plate ด้านหลังพื้นต่อเนื่องงานจริงเกือบทั้งหมด

clean plate ที่ดี

ลบวัตถุออกให้หมด รวมถึงเงามืดที่ขอบวัตถุ (contact shadow) เพื่อไม่ให้เงานั้นถูก clone หรือเลอะเข้าไปในพื้นที่หลังวัตถุ แล้ว paint พื้นที่ถูกบังให้เหมือนจริง ถ้าเงาของวัตถุทอดไปด้านหลังจริงก็ต่อเงาส่วนนั้นให้ด้วย และ paint เผื่อเกินขอบเฟรมตามระยะที่กล้องจะเลื่อน

clean plate ใน figure ทำอัตโนมัติด้วยการ clone พื้นจากข้าง ๆ ในแถวเดียวกัน (ลบราว 1.4% ของภาพ) จึงยังเห็นรอยจาง ๆ ตอนดูเฉพาะชั้นนั้น งานจริงต้อง paint ให้เนียนกว่านี้ แต่ช่องที่เปิดมักแคบ รอยเล็ก ๆ จึงมักไม่โผล่

paint หลังวัตถุ = paint สิ่งที่กล้องจะเห็นตอนขยับ

ฉายเฉพาะแพตช์

การเอา plate ทั้งภาพผ่าน undistort, projection, render และ redistort ทำให้ภาพนุ่มลงเล็กน้อย จึงดีกว่าถ้าฉายเฉพาะส่วนที่ paint (มี alpha เฉพาะแพตช์) แล้ววางทับ plate จริง ส่วนที่ไม่ได้แตะยังคมเท่าเดิม

ถ้าส่วนที่ถูกบังโผล่ให้เห็นในเฟรมอื่นของช็อต ใช้ภาพจริงจากเฟรมนั้นฉายแทนการ paint

4 ในงานจริง

ทำใน Nuke

  1. RotoPaint บนเฟรมที่ฉาย: ลบวัตถุและเงามืดที่ขอบ โดยไม่ clone เงาเข้าไปในพื้นที่หลังวัตถุ แล้ว paint เผื่อขอบเฟรม
  2. ให้ alpha มีแค่บริเวณแพตช์ แล้ว Premult
  3. แพตช์ + กล้องฉายที่ตรึงไว้ → Project3D → Card หรือ geometry ของพื้นด้านหลัง
  4. Scene → ScanlineRender ด้วย Camera ที่ขยับ แล้ว merge ไว้ใต้ชั้นวัตถุ

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

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

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

  • เล่นทั้งช็อต ไม่มีรูหรือริ้วข้างวัตถุ
  • ในช่องที่เปิดไม่มีรอยเงาดำที่ clone มาผิดที่
  • ขอบเฟรมไม่มีบริเวณว่าง
  • ส่วนที่ไม่ได้ paint คมเท่า plate เดิม

5 เช็กตัวเอง

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

ช็อตเลื่อนข้างผ่านเสาไฟ หลังเสามีกำแพงลาย ควรเตรียมอะไร

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

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

คำถามเพิ่ม

1. กล้องเลื่อนไปทางขวา ช่องข้างหินจะเปิดด้านไหน

2. ส่วนหลังหินโผล่ให้เห็นจริงในเฟรมท้าย ๆ ของช็อต ควรทำยังไง

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