1 อธิบาย
Merge over คิดว่า A ถูก premult มาแล้ว ภาพหุ่นจาก Blender premult มาแล้ว แต่ในสายนี้มีคนใส่ Premult อีกตัว สีที่ขอบจึงถูกคูณ alpha สองครั้ง ขอบเลยมืดกว่าที่ควร
กด gain ที่ Viewer ขึ้นหรือดูที่ขอบแขน แล้วชี้อ่านค่าเทียบกันระหว่าง node
over: A + B·(1 − a)2 ลงมือใน mini compositor
โจทย์: ทำให้ผลลัพธ์ตรงกับเป้าหมาย (ขอบสะอาด) โดยไม่ลบ node
ปิด node ได้ที่ช่อง "ปิด node" ใน Properties เหมือนปุ่ม D ใน Nuke
3 เจาะลึก
สามสถานะของ element
ลองดูพิกเซลขอบหนึ่งจุด: สีจริง 0.8 alpha 0.5 วางบน plate ค่า 0.2 ผลลัพธ์ต่างกันชัดเจนตามสถานะของ A
| สถานะ | ค่า A ที่ขอบ | over บน 0.2 | หน้าตา |
|---|---|---|---|
| ยังไม่ premult | 0.8 | 0.9 | ขอบเรือง |
| premult ครั้งเดียว | 0.4 | 0.5 | ขอบสะอาด |
| premult สองครั้ง | 0.2 | 0.3 | ขอบดำ |
premult สองครั้ง = สีที่ขอบเหลือ C·α² รูยังขนาดเท่าเดิม ขอบจึงมืด
ใคร premult และเมื่อไร
CG จากโปรแกรม 3D ส่วนใหญ่ premult มาแล้ว ส่วนงานคีย์หรือ roto ได้ภาพที่ยังไม่ premult กับ alpha แยกกัน ต้อง Premult หนึ่งครั้งหลังแก้สีเสร็จ
กฎสั้น ๆ: แต่ละสายมี Premult จริงแค่ครั้งเดียว ถ้าภาพ premult มาแล้ว Premult ทุกตัวต้องตามหลัง Unpremult เป็นคู่
- 1Read CG (premult)
- 2Unpremult
- 3Grade
- 4Premult
- 5Merge over
ไล่หา node ตัวการ
เลือกพิกเซลขอบหนึ่งจุด แล้วเลื่อน Viewer ลงไปทีละ node ที่ขอบปกติ rgb ÷ alpha ควรใกล้กับสีของเนื้อหุ่นข้างใน ถ้าค่านี้ลดฮวบลงที่ node ไหน node นั้นคือตัวที่ premult ซ้ำ
ทดสอบเร็ว: เลือก node ที่สงสัย กด D ปิด แล้วดูขอบอีกครั้ง
วางบนสีขาว ขอบดำจะชัด วางบนสีดำ ขอบเรืองจะชัด
node ที่รักษา premult ไว้ให้
Premult ไม่เคยเปลี่ยน alpha มันคูณแค่ rgb ส่วน Unpremult หาร rgb ด้วย alpha และปล่อยพิกเซลที่ alpha เป็น 0 ไว้ตามเดิม
Merge mask (B·a) เก็บ B ไว้เฉพาะในรูปของ alpha ของ A ส่วน stencil (B·(1−a)) เจาะรูปของ A ออกจาก B (ดูต่อในบทที่ 01) ทั้งสองคูณ rgb และ alpha ไปพร้อมกัน ภาพจึงยัง premult ถูกต้อง ส่วน Blur, Transform, Defocus ควรทำบนภาพ premult ทั้ง rgba พร้อมกัน
4 ในงานจริง
ทำใน Nuke
- Unpremult → Grade/ColorCorrect → Premult เป็นคู่ครอบงานสี
- หรือใช้ช่อง (un)premult by: rgba.alpha ใน Grade ให้ทำคู่นี้ในตัว
- Blur / Transform ทำบนภาพ premult โดยให้ channels ของ Blur เป็น rgba (Transform ขยับทุก channel อยู่แล้ว)
- Merge over: element เข้า A plate เข้า B
- ดีบัก: เลือก node กด D แล้วดู Viewer เทียบ
พลาดบ่อย → แก้ยังไง
- ✗ ใส่ Premult หลัง Read CG "กันไว้ก่อน"✓ เช็กก่อนว่า premult มาแล้วหรือยัง ถ้าแล้ว Premult ที่เพิ่มจะทำให้ขอบดำ
- ✗ Unpremult → Grade แล้วลืม Premult✓ พิกเซลขอบยังมีสีเต็มค่า จึงเรืองบน plate (และ lift นอก alpha ก็ถูกบวกเข้าไปด้วย) ปิดคู่ด้วย Premult เสมอ
- ✗ ในสายคีย์ Premult ก่อน แล้วค่อย Grade lift ต่อ✓ ย้าย Grade และ despill ทั้งหมดไปไว้ก่อน Premult ตัวเดียว
- ✗ Blur แค่ rgb ไม่ blur alpha✓ สีกับ alpha ไม่ตรงกันอีกต่อไป ให้ blur rgba พร้อมกัน
เช็กก่อนส่งช็อต
- แต่ละสายมี premult จริงครั้งเดียว
- Unpremult ทุกตัวมี Premult ปิดคู่
- over บนขาวและดำแล้วไม่มีขอบดำหรือขอบเรือง
- filter ทุกตัวทำงานบน rgba
5 เช็กตัวเอง
ภาพ CG ที่เรนเดอร์ออกมาเป็น EXR จากโปรแกรม 3D ส่วนใหญ่มาแบบไหน
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. สายคีย์เป็น Keyer → Premult → Grade (lift) → Merge over ควรแก้อย่างไร
2. ใต้ Read หุ่น เพื่อนใส่ Unpremult แล้วตามด้วย Premult ทันที โดยไม่มีอะไรตรงกลาง ภาพหุ่นเปลี่ยนไหม
ตัวเลขมาจากไหน: สูตร Merge, Grade, Premult, Unpremult ในห้องนี้ตรงกับ Nuke 17.0v2 ครบ 109 กรณีทดสอบ (เทียบตัวเลขจาก Nuke จริง) ส่วน Blur และ Transform เป็นแบบง่าย ใกล้เคียงแต่ไม่เท่า Nuke เป๊ะ ภาพทั้งหมดเรนเดอร์จาก Blender จากฉากของเราเอง: วางฉากด้วยโค้ด ภูเขาเป็น terrain ที่สร้างใน Gaea 2.3 (Community, build แบบ headless) ท้องฟ้าเป็น HDRI CC0 จาก Poly Haven หินและหญ้าแห้งจาก Poly Haven (CC0) texture ทรายและหินผาจาก Quixel และหุ่นบน rig จาก Mixamo (Quixel และ Mixamo ใช้ในเรนเดอร์เท่านั้น ไม่มีไฟล์ต้นฉบับแจก)