1 อธิบาย
อาการ: ศิลปินบวกประกายไฟเข้ากับ CG ไว้แล้ว แต่ใน comp ประกายไฟหายเกือบหมด เหลือแค่ตรงที่อยู่บนตัวหุ่น แถมขอบหุ่นมืดเป็นเส้น สองอาการนี้ดูไม่เกี่ยวกัน แต่มาจากต้นเหตุเดียว
ประกายไฟมี alpha = 0 Premult คูณสีด้วย alpha ทุกอย่างที่อยู่นอก alpha ของหุ่นจึงกลายเป็น 0 และหุ่นจาก render ก็ premult มาแล้ว การคูณซ้ำทำให้ขอบมืด เรื่องเดียวกันเกิดในงานจริงกับ pass เสริมของ CG ที่ไม่อยู่ใน alpha หลัง Copy + Premult แล้วหายไปเงียบ ๆ
Premult: rgb · a → a = 0 gives 02 ลงมือใน mini compositor
โจทย์: หา node ตัวเดียวที่ทำให้เกิดทั้งสองอาการ แล้วแก้ให้ตรงเป้าหมาย
3 เจาะลึก
Premult คือการคูณด้วย alpha
Premult ทำแค่ rgb × a อะไรที่ alpha = 0 จึงกลายเป็น 0 แสง ไฟ emission และ pass เสริมที่มักเรนเดอร์ด้วย alpha 0 หรืออยู่นอก alpha ของวัตถุ จะหายไปทันทีเมื่อผ่าน Premult
เคสนี้มีสองอาการจากต้นเหตุเดียว: ประกายไฟหาย (alpha 0) และขอบหุ่นมืด (หุ่น premult มาแล้ว แล้วถูกคูณอีกรอบ) เมื่อเจอหลายอาการพร้อมกัน ให้หา node ที่อธิบายได้ทุกอาการก่อน
| พิกเซล | ก่อน Premult | หลัง Premult |
|---|---|---|
| ประกายไฟนอกตัวหุ่น | rgb 5, a 0 | rgb 0 |
| ขอบหุ่น (premult แล้ว) | rgb 0.15, a 0.5 | rgb 0.075 |
| กลางตัวหุ่น | rgb 0.3, a 1 | rgb 0.3 |
เรื่องเดียวกันในงาน CG จริง
ในงานจริงเคยเจอว่า pass เสริมอย่างหยดของเหลวบนตัวละครหายไปทั้งที่เรนเดอร์มาครบ ต้นเหตุคือมีคน Copy alpha จาก pass อื่นเข้ามาแล้ว Premult ต่อ ส่วนที่ไม่อยู่ใน alpha ใหม่จึงถูกตัดทิ้งเงียบ ๆ ไม่มี error อะไรเตือน
ก่อน Premult ถามเสมอ: มีอะไรอยู่นอก alpha ที่ต้องเก็บไหม
ลำดับที่ปลอดภัย
ประกอบส่วนที่มี alpha (ตัววัตถุ) ให้เรียบร้อยก่อน แล้วค่อยบวกส่วนที่เป็นแสงหลัง Premult หรือหลัง Merge over ส่วนที่เป็นแสงไม่ต้องการ premult เพราะมันไม่ได้บังอะไร ลำดับนี้ใช้ได้กับแสงที่เป็นของวัตถุนั้นเองหรืออยู่ข้างหน้ามัน ถ้าแสงมาจากของที่อยู่หลังของหน้า ยังต้อง holdout แบบเคส 5 (CF5): stencil ด้วย alpha ของของหน้า หรือ plus แสงเข้า plate ก่อนแล้วค่อย over ของหน้า
- 1วัตถุ: grade แบบ unpremult
- 2Premult
- 3Merge over
- 4แสง/emission: plus ทีหลัง
4 ในงานจริง
ทำใน Nuke
- ก่อนใส่ Premult ดู Read ตรงขอบของวัตถุทึบที่ alpha เริ่มโปร่ง ทั้ง rgb และ alpha ถ้าสีของผิววัตถุจางลงไปพร้อมกับ alpha แปลว่า premult มาแล้ว (render CG ส่วนใหญ่เป็นแบบนี้) อย่าใช้ "rgb ≤ alpha" เป็นตัวตัดสิน highlight หรือ emission ที่สว่างเกิน alpha แม้แต่ที่ alpha 0 เป็นเรื่องปกติของภาพที่ premult แล้ว
- Merge (plus) สำหรับ emission, ไฟ, ประกาย หลัง Premult หรือหลัง Merge over (ถ้าแสงอยู่หลังของหน้า ต้อง holdout ก่อน ดู CF5)
- Copy alpha แล้ว Premult: เช็กว่า pass ทุกอันยังอยู่ในขอบเขต alpha ใหม่
- ไล่ดูด้วยการ disable ทีละ node (ปุ่ม D) แล้วดูว่าอาการหายไหม (เหมือนในเคส 2)
พลาดบ่อย → แก้ยังไง
- ✗ Premult ทุกอย่าง "ให้ชัวร์" ก่อน merge✓ premult เฉพาะภาพที่ยัง straight อยู่ และไม่ premult แสงที่ alpha 0
- ✗ บวก emission เข้ากับ CG ก่อน Premult✓ บวกหลัง Premult หรือหลัง over (ถ้าแสงอยู่หลังของหน้า ต้อง holdout ก่อน ดู CF5)
- ✗ แก้ทีละอาการแยกกัน✓ หา node ที่อธิบายทุกอาการได้ก่อน
เช็กก่อนส่งช็อต
- ไม่มี Premult ซ้ำบนภาพที่ premult มาแล้ว
- แสง/emission ที่ alpha 0 ยังอยู่ครบใน comp
- pass เสริมทุกอันยังอยู่หลัง Copy + Premult
- ขอบ CG ไม่มีเส้นมืด (Viewer gain ขึ้น)
5 เช็กตัวเอง
node ไหนทำให้ประกายไฟหาย
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. emission ของหลอดไฟเรนเดอร์มากับ alpha 0 ถ้าผ่าน Premult จะเป็นอย่างไร
2. ขอบ CG มืดเป็นเส้น และ element แสงหาย สงสัยอะไรก่อน
ตัวเลขมาจากไหน: เคสจากปัญหาที่เจอในงานจริง เล่าใหม่แบบไม่ระบุงาน และสร้างซ้ำด้วยภาพ Blender ของเราเอง ภาพคำนวณในเบราว์เซอร์: Merge, Grade, Premult, Keymix, Invert, Clamp ตรงกับ Nuke 17.0v2 (ตรวจแล้ว) ส่วน Toe, Defocus, Sharpen, Grain, Keyer และ Despill เป็นแบบสอนหลักการ ไม่เท่า node ใน Nuke เป๊ะ