1 อธิบาย
marker บนหน้าอกหุ่นยนต์ไม่ต้อง paint ทีละเฟรม ให้ paint เฟรมเดียวจนสะอาด hold ไว้ (FrameHold) แล้วให้ track พา patch ไปทุกเฟรม ในภาพนี้ patch ถูก paint ไว้แล้วที่เฟรม 12
เปลี่ยน “patch ขยับตาม” จาก “ไม่ตามอะไร” เป็น track ตั้ง reference frame ของ tracker แล้วดู “เฟรมที่แย่ที่สุด” กับแท่งรายเฟรมใต้ภาพ กล้องหมุน (roll) ราว 5.6 องศา และดันเข้า (push) จนหน้าอกใหญ่ขึ้นราว 13% ให้สังเกตช่วงปลายช็อตเป็นพิเศษ
M(f) = T(f) · T(ref)⁻¹, so M(ref) = identity2 ลงมือลอง
ให้ patch ของเฟรม 12 ปิด marker ได้ทุกเฟรม: เฟรมที่แย่ที่สุดเหลือ marker ต่ำกว่า 10%
ดูแท่งใต้ภาพ (แดง = ยังไม่ผ่าน) ถ้าเพี้ยนทุกเฟรมแม้แต่เฟรมที่ paint ไว้ ให้ดู reference frame ถ้าดีตรงกลางแต่หลุดที่ปลาย ให้ถามว่า track แบบนี้เก็บการเคลื่อนไหวได้ครบหรือยัง
3 เจาะลึก
paint ครั้งเดียว ใช้ทั้งช็อต
การ paint ทีละเฟรมช้า และแต่ละเฟรมจะออกมาต่างกันนิด ๆ จนภาพเต้นเวลาเล่น วิธีที่นิยมคือ patch จากเฟรมนิ่ง: hold เฟรมเดียว paint ให้สะอาด แล้วให้ track ขยับ patch ตามช็อต
ลำดับมีอยู่ไม่กี่ขั้น และแต่ละขั้นมีเหตุผลของมัน การ denoise ก่อน paint และ regrain ทีหลัง จะได้ไม่มี grain ค้างนิ่งอยู่ใน patch
- 1Denoise
- 2FrameHold ที่ ref
- 3Paint patch
- 4Match-move ตาม track
- 5Roto ขอบนุ่ม
- 6Regrain
reference frame คือจุดที่ track เป็นศูนย์
match-move วัดการเคลื่อนที่เทียบกับ reference frame ที่เฟรมนั้น transform เป็น identity คือไม่ขยับอะไรเลย patch ที่ paint บนเฟรมนั้นจึงวางตรงที่พอดี แล้วค่อยถูกพาไปเฟรมอื่น
ถ้า paint ที่เฟรม 12 แต่ reference frame อยู่ที่เฟรม 0 เฟรม 12 จะถูกขยับด้วยการเคลื่อนที่ระหว่างเฟรม 0 ถึง 12 patch จึงเหลื่อมตั้งแต่เฟรมที่ paint และความเหลื่อมนั้นติดไปทุกเฟรม
ตั้ง reference frame ของ tracker ก่อนทำอย่างอื่น แล้ว hold และ paint ที่เฟรมเดียวกันนั้น
track 1 จุดกับ 2 จุด
track จุดเดียวบอกได้แค่ตำแหน่ง ถ้ากล้อง roll หรือ push เข้า patch จะไม่หมุนและไม่ขยายตาม ใกล้เฟรม 12 ยังดูดี แต่ยิ่งห่างออกไปยิ่งหลุด ในช็อตนี้ marker ตัวอื่นคลาดไปได้ถึงราว 8.1 px ที่ปลายช็อต
marker ถูกออกแบบมาให้ track ง่าย คือคอนทราสต์สูงและเล็ก ในภาพนี้กว้างราว 15 px จึงใช้เป็นจุด track ได้ดีเอง track บน plate ต้นฉบับก่อนลบ marker
| track | เก็บอะไรได้ | บนช็อตนี้ |
|---|---|---|
| 1 จุด (move only) | ตำแหน่ง | ตรงกลางดี ปลายช็อตหลุด |
| 2 จุดขึ้นไป | ตำแหน่ง หมุน และขนาด | ตาม roll และ push ได้ |
ขอบ grain และตอนที่ track ตาย
mask ของ patch ควรเป็น roto ขอบนุ่ม ขอบแข็งจะเห็นเป็นวงรอบ patch ส่วน patch ที่ hold จากเฟรมที่มี grain จะพา grain นิ่งไปด้วย จึงต้อง denoise ก่อน paint แล้ว regrain ให้ grain เปลี่ยนทุกเฟรม (ดูบท PC5)
ถ้าจุด track ออกนอกเฟรมหรือถูกบัง patch จะไหลออกไปตั้งแต่เฟรมนั้น ให้ fade การแก้ออกตรงที่ไม่มีจุดอ้างอิงแล้ว และไล่ดูทุกเฟรม ไม่ใช่เฟรมเดียว
เล่นช็อตทั้งหมดแล้วจ้องที่ปลายทั้งสองข้าง patch มักหลุดตรงที่ห่างจาก reference frame มากที่สุด
4 ในงานจริง
ทำใน Nuke
- Tracker: track marker 2 จุดขึ้นไป เปิด T, R, S แล้วตั้ง reference frame เป็นเฟรมที่จะ paint
- FrameHold บน plate ที่ reference frame เดียวกัน (denoise ก่อนถ้า plate มี grain)
- RotoPaint: clone ลบ marker บนเฟรมที่ hold
- ตั้ง Tracker เป็น match-move หรือ export เป็น Transform เพื่อพา patch ไปตามช็อต
- Roto ขอบนุ่มเป็น mask → Merge (over) patch ลงบน plate
- Grain2 regrain patch โดย animate seed เพราะ seed ค่าเริ่มต้นเป็นค่าคงที่ grain จะนิ่ง
พลาดบ่อย → แก้ยังไง
- ✗ ปล่อย reference frame ไว้ที่เฟรมแรก แต่ paint ที่เฟรมอื่น✓ ตั้ง reference frame ให้ตรงกับเฟรมที่ paint และ hold
- ✗ ใช้ track ที่เก็บแค่ตำแหน่งกับช็อตที่ roll หรือ push เข้า✓ track 2 จุดขึ้นไป แล้วใช้ทั้ง translate, rotate และ scale
- ✗ mask ของ patch ขอบแข็ง✓ ใช้ roto ขอบนุ่ม แล้วดูรอยต่อด้วย viewer ที่ดันคอนทราสต์ขึ้น
- ✗ hold patch จากเฟรมที่มี grain✓ denoise ก่อน paint แล้ว regrain ให้ grain เปลี่ยนทุกเฟรม
- ✗ จุด track ออกนอกเฟรมแต่ไม่ได้สังเกต✓ fade การแก้ออกตรงที่ไม่มีจุดอ้างอิง และไล่ดูทุกเฟรม
เช็กก่อนส่งช็อต
- reference frame ของ track ตรงกับเฟรมที่ paint
- track เก็บ rotate และ scale ถ้ากล้อง roll หรือ push
- ไล่ดูทุกเฟรม รวมถึงปลายทั้งสองด้านของช็อต
- ขอบ patch ไม่เห็นเป็นวง แม้ดัน viewer ขึ้น
- grain บน patch ขยับทุกเฟรม ไม่ค้างนิ่ง
- จุด track อยู่ในเฟรมตลอด หรือ fade การแก้ออกแล้ว
5 เช็กตัวเอง
patch ถูก paint ที่เฟรม 12 แต่ reference frame ของ tracker ยังอยู่ที่เฟรม 0 จะเกิดอะไรขึ้น
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. ใช้ track 1 จุด reference frame 12 กราฟแท่งต่ำตรงกลางแต่สูงขึ้นที่ปลายทั้งสองข้าง เพราะอะไร
2. จุด track ตัวหนึ่งออกนอกเฟรมกลางช็อต patch จะเป็นอย่างไร และควรทำอะไร
ตัวเลขมาจากไหน: 24 เฟรมเรนเดอร์ด้วย Blender จากการเคลื่อนกล้องแบบถือมือของเราเอง (50 มม.) รอบหุ่นยนต์ที่ยืนนิ่ง ทั้งแบบมีและไม่มี marker ข้อมูล track คือจุดกึ่งกลาง marker ที่ฉายจาก Blender ตรงเป๊ะ (tracker สมบูรณ์แบบ tracker จริงจะมี jitter) patch ที่ paint คือเรนเดอร์สะอาดของเฟรม 12 การเลื่อน หมุน และย่อขยายเป็น 2D similarity transform ที่คำนวณในเบราว์เซอร์ ค่า marker ที่เหลือ (%) และเกณฑ์เป็นตัววัดแบบสอนหลักการของเราเอง