หน้าแรก · Lab · Case Files: แก้ปัญหา comp จากงานจริง

CF6 เคส 6: ประกายไฟหาย และขอบหุ่นมืด

Premult ฆ่าทุกอย่างที่อยู่นอก alpha

Case Files: แก้ปัญหา comp จากงานจริง · ~6 นาที · ฟรี

1 อธิบาย

อาการ: ศิลปินบวกประกายไฟเข้ากับ CG ไว้แล้ว แต่ใน comp ประกายไฟหายเกือบหมด เหลือแค่ตรงที่อยู่บนตัวหุ่น แถมขอบหุ่นมืดเป็นเส้น สองอาการนี้ดูไม่เกี่ยวกัน แต่มาจากต้นเหตุเดียว

ประกายไฟมี alpha = 0 Premult คูณสีด้วย alpha ทุกอย่างที่อยู่นอก alpha ของหุ่นจึงกลายเป็น 0 และหุ่นจาก render ก็ premult มาแล้ว การคูณซ้ำทำให้ขอบมืด เรื่องเดียวกันเกิดในงานจริงกับ pass เสริมของ CG ที่ไม่อยู่ใน alpha หลัง Copy + Premult แล้วหายไปเงียบ ๆ

Premult: rgb · a → a = 0 gives 0

2 ลงมือใน mini compositor

โจทย์: หา node ตัวเดียวที่ทำให้เกิดทั้งสองอาการ แล้วแก้ให้ตรงเป้าหมาย

SkyVFX mini compositor · CF6640×360 · float · 1001

3 เจาะลึก

Premult คือการคูณด้วย alpha

Premult ทำแค่ rgb × a อะไรที่ alpha = 0 จึงกลายเป็น 0 แสง ไฟ emission และ pass เสริมที่มักเรนเดอร์ด้วย alpha 0 หรืออยู่นอก alpha ของวัตถุ จะหายไปทันทีเมื่อผ่าน Premult

เคสนี้มีสองอาการจากต้นเหตุเดียว: ประกายไฟหาย (alpha 0) และขอบหุ่นมืด (หุ่น premult มาแล้ว แล้วถูกคูณอีกรอบ) เมื่อเจอหลายอาการพร้อมกัน ให้หา node ที่อธิบายได้ทุกอาการก่อน

พิกเซลก่อน Premultหลัง Premult
ประกายไฟนอกตัวหุ่นrgb 5, a 0rgb 0
ขอบหุ่น (premult แล้ว)rgb 0.15, a 0.5rgb 0.075
กลางตัวหุ่นrgb 0.3, a 1rgb 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. 1วัตถุ: grade แบบ unpremult
  2. 2Premult
  3. 3Merge over
  4. 4แสง/emission: plus ทีหลัง

4 ในงานจริง

ทำใน Nuke

  1. ก่อนใส่ Premult ดู Read ตรงขอบของวัตถุทึบที่ alpha เริ่มโปร่ง ทั้ง rgb และ alpha ถ้าสีของผิววัตถุจางลงไปพร้อมกับ alpha แปลว่า premult มาแล้ว (render CG ส่วนใหญ่เป็นแบบนี้) อย่าใช้ "rgb ≤ alpha" เป็นตัวตัดสิน highlight หรือ emission ที่สว่างเกิน alpha แม้แต่ที่ alpha 0 เป็นเรื่องปกติของภาพที่ premult แล้ว
  2. Merge (plus) สำหรับ emission, ไฟ, ประกาย หลัง Premult หรือหลัง Merge over (ถ้าแสงอยู่หลังของหน้า ต้อง holdout ก่อน ดู CF5)
  3. Copy alpha แล้ว Premult: เช็กว่า pass ทุกอันยังอยู่ในขอบเขต alpha ใหม่
  4. ไล่ดูด้วยการ 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 เช็กตัวเอง

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

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 เป๊ะ