1 อธิบาย
อาการ: หุ่นจาก green screen มีเส้นขอบสว่างบาง ๆ รอบขาและไหล่ และมีแถบจาง ๆ สว่างขึ้นตามรอยต่อพื้นกับฉากเขียว คนส่วนใหญ่จะรีบ erode หรือบีบ matte แต่ลองกด Viewer ไปที่ช่อง a แล้วเทียบ node Premult กับ Grade: alpha เหมือนกันทุกพิกเซล เพราะ Grade ตัวนี้ไม่แตะ alpha สิ่งที่เปลี่ยนคือสี
Grade ตัวนี้ดัน gamma ขึ้นเพื่อให้หุ่นจางเหมือน plate ที่มีหมอก gamma ไม่ใช่การคูณล้วน พอทำกับสีที่ premult แล้ว พิกเซลขอบที่สีถูกคูณ alpha ไว้จะถูกมองเป็น "สีมืด" แล้วถูกยกขึ้นมากเกิน ทั้งขอบและเศษ alpha เล็ก ๆ ที่รอยต่อพื้นจึงสว่างผิด
on a premult edge: (c·a)^(1/γ) ≠ c^(1/γ)·a2 ลงมือใน mini compositor
โจทย์: แก้ขอบสว่างโดยไม่แตะ matte และไม่เปลี่ยนค่า gamma
ดูตัวเลือกใน Properties ของ Grade ที่ทำ unpremult → grade → premult ให้ในตัว
3 เจาะลึก
แยกให้ออก: ปัญหา alpha หรือปัญหาสี
ขอบที่ผิดมีสองต้นเหตุคนละเรื่อง ถ้า alpha ผิด ขอบจะกว้างหรือแคบผิด เห็นพื้นหลังลอดหรือกินผม ถ้าสีผิด รูปร่างของขอบถูกแล้ว แต่ความสว่างหรือสีของพิกเซลขอบเพี้ยน
วิธีแยกเร็วที่สุดคือเทียบช่อง a ระหว่าง node ถ้า alpha ไม่เปลี่ยนแต่ขอบเปลี่ยน ปัญหาอยู่ที่สี การ erode หรือบีบ matte จะกินรายละเอียดโดยไม่แก้อะไร
ขอบเปลี่ยนแต่ alpha ไม่เปลี่ยน: เช็ก grade สีก่อนแตะ matte
ตัวเลขที่ขอบ
สมมติขอบหุ่นมีสีจริง 0.3 และ alpha 0.5 ภาพ premult เก็บ 0.15 ถ้าใส่ gamma 1.6 กับ 0.15 ตรง ๆ ได้ราว 0.31 แต่ถ้า unpremult ก่อน: 0.3 ผ่าน gamma ได้ราว 0.47 คูณ alpha กลับได้ราว 0.24 ขอบที่ผิดสว่างกว่าที่ควรราว 30%
| การปรับ | บนภาพ premult ตรง ๆ | เหตุผล |
|---|---|---|
| gain / multiply | ได้ | การคูณสลับลำดับกับ premult ได้ |
| gamma | ไม่ได้ | ขอบสว่างหรือมืดผิด |
| lift / offset | ไม่ได้ | บวกค่าให้พิกเซล alpha ต่ำด้วย |
| saturation | ได้ (คูณรอบ luma) | Rec.709 luma เป็นเส้นตรง |
เศษ alpha ที่ถูกขยาย
gamma ที่มากกว่า 1 ดันค่าเล็ก ๆ ขึ้นแรง พิกเซลที่ alpha ต่ำมากตามรอยต่อพื้นกับฉาก ซึ่งปกติแทบมองไม่เห็น จึงสว่างขึ้นเป็นแถบ พอ grade แบบ unpremult สีของพิกเซลเหล่านั้นถูกคูณกลับด้วย alpha เล็ก ๆ จึงกลับไปจางเหมือนเดิม
4 ในงานจริง
ทำใน Nuke
- Grade: ติ๊ก "(un)premult by" แล้วเลือก rgba.alpha ทุกครั้งที่ใช้ gamma, lift หรือ offset กับภาพ premult
- หรือทำเป็นสาย: Unpremult → Grade/ColorCorrect → Premult
- Viewer กด A เพื่อดู alpha แล้วกดดู node ก่อนและหลังสลับกัน
- ตรวจขอบที่ gain ×4 และ saturation สูง เพื่อให้เส้นขอบโผล่ชัด
พลาดบ่อย → แก้ยังไง
- ✗ เห็นขอบผิดแล้ว erode ทันที✓ เทียบ alpha ก่อน ถ้า alpha ไม่เปลี่ยนแปลว่าสีผิด
- ✗ ใส่ gamma หรือ lift กับภาพ premult ตรง ๆ✓ unpremult ก่อน หรือใช้ "(un)premult by" ใน Grade
- ✗ วัดขอบที่ output ของ key อย่างเดียว✓ วัดที่ comp จริงด้วย เพราะ grade ระหว่างทางเปลี่ยนขอบได้
เช็กก่อนส่งช็อต
- alpha กับสีของขอบ ตรวจแยกกัน
- ทุก gamma, lift หรือ offset บนภาพ premult ทำแบบ unpremult
- ดูขอบที่ gain ×4 บนพื้นหลังทั้งสว่างและมืด
- ไม่มีเศษ alpha ที่สว่างขึ้นตามรอยต่อพื้น
5 เช็กตัวเอง
alpha ก่อนและหลัง Grade เหมือนกัน แต่ขอบสว่างขึ้น ควรสงสัยอะไรก่อน
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. อันไหนทำกับภาพ premult ได้โดยขอบไม่เพี้ยน
2. alpha ก่อนและหลัง node เหมือนกัน แต่ขอบเปลี่ยน แปลว่าอะไร
ตัวเลขมาจากไหน: เคสจากปัญหาที่เจอในงานจริง เล่าใหม่แบบไม่ระบุงาน และสร้างซ้ำด้วยภาพ Blender ของเราเอง ภาพคำนวณในเบราว์เซอร์: Merge, Grade, Premult, Keymix, Invert, Clamp ตรงกับ Nuke 17.0v2 (ตรวจแล้ว) ส่วน Toe, Defocus, Sharpen, Grain, Keyer และ Despill เป็นแบบสอนหลักการ ไม่เท่า node ใน Nuke เป๊ะ