1 อธิบาย
สกรีนเขียวสว่างสะท้อนแสงเขียวใส่ตัวหุ่น (spill) แม้ matte จะดี หุ่นก็ยังดูเขียว despill คือจำกัดช่องเขียวไม่ให้เกินค่าอ้างอิงที่คำนวณจากแดงและน้ำเงิน
แบบ average (เทียบกับค่าเฉลี่ยของแดงและน้ำเงิน) ตัดเขียวแรงกว่าแบบ max (เทียบกับช่องที่มากกว่า) แบบ max อ่อนโยนกับสีผิวและสีเหลืองมากกว่า แต่ทิ้งเขียวไว้มากกว่า
average: g′ = min(g, (r + b)/2 · L) · max: g′ = min(g, max(r, b) · L)2 ลงมือใน mini compositor
โจทย์: เปิด Despill แล้วเลือกวิธีให้ spill บนตัวหุ่นเหลือ ≤ 0.0079
เปิด node Despill ก่อน (ติ๊ก "ปิด node" ออก) แล้วลองสองแบบ
3 เจาะลึก
สองสูตรกับสี่สี
average: g′ = min(g, (r+b)/2) และ max: g′ = min(g, max(r, b)) (ตารางใช้ L = 1) สีเทาที่โดน spill ทั้งสองแบบแก้ได้ใกล้กัน แต่สีเหลืองกับสีฟ้าอมเขียว average ตัดเขียวที่เป็นของจริงทิ้ง สีจึงเพี้ยน
| สี | r, g, b | average g′ | max g′ |
|---|---|---|---|
| หุ่นเทาโดน spill | 0.40, 0.55, 0.42 | 0.41 | 0.42 |
| สีเหลือง | 0.80, 0.70, 0.10 | 0.45 (เป็นส้ม) | 0.70 (เท่าเดิม) |
| ผิวคน | 0.70, 0.50, 0.40 | 0.50 (เท่าเดิม) | 0.50 (เท่าเดิม) |
| ฟ้าอมเขียว | 0.10, 0.60, 0.70 | 0.40 (เพี้ยน) | 0.60 (เท่าเดิม) |
Despill ทำให้มืดลง
เขียวมีน้ำหนักในความสว่างมาก (Rec.709 ให้ G = 0.7152) หุ่นเทาข้างบนถูกตัดเขียว 0.14 (แบบ average) ความสว่างหายไปราว 0.1 ขอบจึงดูหม่นเป็นสีเทาดำ
คืนความสว่าง: เอา plate ลบภาพที่ despill แล้ว (คือ spill ที่ถูกตัด) ทำให้เป็นขาวดำ แล้วบวกกลับ ใช้เมื่อฉากหลังสว่างพอ ๆ กับจอ ถ้าฉากหลังมืดกว่าจอให้ปิด หรือ respill ด้วยสีของฉากหลังแทน
ภาพ plate − despill คือ mask ฟรีของบริเวณที่โดน spill
Despill อยู่สายของตัวเอง
คีย์มีสามงานแยกกัน: alpha, despill และการ merge ทำ despill แยกจาก plate ต้นฉบับ แล้ว Copy alpha ที่เสร็จแล้วเข้ามา Premult ครั้งเดียว แล้วค่อย Merge over ถ้ารวมหลายคีย์ อย่าใช้ despill ในตัว keyer เพราะแต่ละตัวทำไม่เหมือนกัน จะเห็นรอยต่อ
งานจริงมักใช้สอง despill: ที่ขอบแรงและดันไปทางสีฉากหลัง ที่ core อ่อนและเก็บสีเดิม แล้ว Keymix ด้วย core matte ที่เบลอ
- 1plate
- 2Despill (RGB)
- 3Copy alpha
- 4Premult
- 5Merge over BG
เลือกเป้าหมายจากฉากหลัง
ใส่ฉากหลังจริงก่อนทำ despill แล้วถามสองข้อ: ฉากหลังหลังขอบนี้สว่างแค่ไหน และสีของตัวตรงนี้คืออะไร สีเทากลางเหมาะกับฉากหลังเทากลางเท่านั้น ฉากหลังทะเลทรายสีอุ่นควรได้ขอบที่อุ่นตาม
หน้ากอง: ให้ตัวแสดงห่างจอเท่าที่ทำได้ spill จะน้อยลงตั้งแต่ต้น
4 ในงานจริง
ทำใน Nuke
- Expression node: ช่อง g = min(g, max(r,b)) สำหรับ core หรือ min(g, (r+b)/2) สำหรับขอบ
- HueCorrect: กดเส้น g_sup ลงเฉพาะช่วงสีเขียว หยุดก่อนถึงสีที่ไม่ใช่เขียว
- คืนความสว่าง: Merge (minus) plate − despill → Saturation 0 → Merge (plus) เข้ากับภาพที่ despill
- Despill สองแบบ (ขอบ/core) รวมด้วย Keymix ผ่าน core matte ที่เบลอ
- Despill หลัง Copy ต้องเขียนแค่ RGB ไม่งั้นทับ alpha ที่ทำไว้ แล้ว Premult → Merge over
พลาดบ่อย → แก้ยังไง
- ✗ ใช้ despill ในตัว keyer ตอนรวมหลายคีย์✓ despill แยกสายจาก plate ต้นฉบับ
- ✗ ใช้ average ทั้งตัว เสื้อเหลืองกลายเป็นส้ม✓ ใช้ max ใน core เก็บ average ไว้ที่ขอบ
- ✗ ลืมว่า despill ทำให้มืด ขอบเป็นเทาหม่น✓ คืนความสว่าง หรือ respill ด้วยสีฉากหลัง
- ✗ Erode matte เพื่อลบขอบเขียว✓ ขอบเขียวเป็นงาน despill ไม่ใช่ alpha erode แค่ตัดขอบทิ้ง ไม่ได้แก้สี (ดู K4)
- ✗ Despill node ทับ alpha หลัง Copy✓ ตั้งให้ออกแค่ RGB
เช็กก่อนส่งช็อต
- ไม่มีขอบเขียวเมื่อเร่ง saturation ขึ้นไว้ดู
- สีเหลือง ผิว และสีฟ้าบนตัวไม่เพี้ยน
- ความสว่างขอบเข้ากับฉากหลังจริง
- alpha ไม่ถูก despill ทับ
- Premult แค่ครั้งเดียวก่อน Merge over
5 เช็กตัวเอง
ตัวละครใส่เสื้อเหลือง despill แบบไหนทำให้เสื้อเพี้ยนน้อยกว่า
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. พิกเซล (0.30, 0.60, 0.50) despill แบบ max ได้ g′ เท่าไหร่
2. หุ่นอยู่บนถนนกลางคืนที่มืด เปิด restore luminance แล้วขอบเรืองแสง เพราะอะไร
ตัวเลขมาจากไหน: Keyer ในห้องนี้เป็นแบบ green-difference ง่าย ๆ (ไม่ใช่ Keylight หรือ IBK) สูตร despill มาจากหลักการ despill มาตรฐาน คะแนนเทียบกับ matte จริงที่เรนเดอร์จาก Blender พร้อมกับ plate กรีน (หุ่นตัวเดียวกันและกล้องตัวเดียวกับ plate) เป้าหมายวัดจากภาพชุดนี้ เทียบกับคีย์ที่ดีที่สุดที่ Keyer นี้ทำได้