1 อธิบาย
อยากให้ภูเขาฝั่งเดียวสว่างขึ้น? ทำภาพที่ grade แล้ว (A) แล้วใช้ Keymix ผสมกับภาพเดิม (B) ด้วย mask จาก shape ข้างใน mask ได้ A ข้างนอกได้ B ขอบ feather ผสมนุ่ม ๆ
Keymix ต่างจาก Merge over เพราะไม่ใช้ alpha ของภาพ A เลย ใช้แค่ mask เหมาะกับงาน grade เป็นพื้นที่
Keymix: out = A · m + B · (1 − m)2 ลงมือใน mini compositor
3 เจาะลึก
Keymix ทีละพิกเซล
Keymix คิดแบบนี้: out = A·m + B·(1 − m) โดย m คือ alpha ของ mask คูณ mix ข้างใน mask (m = 1) ได้ A ข้างนอก (m = 0) ได้ B ในแถบ feather ได้ส่วนผสม
ตัวอย่าง: พิกเซลหนึ่งมีค่า 0.2 เมื่อ Grade white 1.6 ได้ 0.32 ดูว่าแต่ละระดับของ mask ได้ค่าเท่าไหร่
| mask (m) | คำนวณ | ผล |
|---|---|---|
| 0 (นอก shape) | 0.32·0 + 0.2·1 | 0.20 |
| 0.5 (กลาง feather) | 0.32·0.5 + 0.2·0.5 | 0.26 |
| 1 (ใน shape) | 0.32·1 + 0.2·0 | 0.32 |
ทำไมไม่ใช้ Merge over
Merge over ใช้ alpha ของ A เป็นตัวตัดสิน plate ส่วนใหญ่มี alpha เป็น 1 ทั้งเฟรม ถ้าเอา plate ที่ grade แล้ว over plate เดิม จะได้ภาพที่ grade ทั้งเฟรม shape ไม่มีผลอะไรเลย
Keymix ไม่สน alpha ของ A เลย ใช้แค่ mask จึงเหมาะกับงานที่ “เปลี่ยนเฉพาะพื้นที่” ทั้ง grade, despill หรือการแก้อื่น ๆ
- 1plate → B
- 2plate → Grade → A
- 3Roto → mask
- 4Keymix
ต่อเองด้วย Merge แล้วเกิดรอยต่อ
Keymix เท่ากับ Merge สามตัว: stencil เก็บ plate ไว้นอก roto, mask เก็บภาพที่ grade แล้วไว้ใน roto แล้วรวมสองชิ้นด้วย plus (Merge stencil เก็บ B ตรงที่ alpha ของ A ไม่มี ส่วน Merge mask เก็บ B เฉพาะตรงที่ alpha ของ A มี ในที่นี้ A คือ roto ดูละเอียดในบท R3) ถ้าใช้ over แทน plus ในขั้นสุดท้าย จะเกิดรอยต่อมืดตามแนว feather
เหตุผล: ชิ้นที่ grade แล้ว (ซึ่งเข้า A ของ over) มี alpha เท่ากับ m อยู่แล้ว over จะคูณ B ด้วย (1 − m) ซ้ำอีกรอบ ที่กลาง feather จากตัวอย่างข้างบน ได้ 0.16 + 0.05 = 0.21 แทนที่จะเป็น 0.26 แถบ feather จึงมืดลง
ของที่ตัดด้วย mask คู่กันแล้ว รวมกลับด้วย plus ไม่ใช่ over
ใช้ในงานจริง
ทำภูเขาฝั่งหนึ่งให้สว่างขึ้น ทำให้หน้าคนขึ้นมาหน่อย รวม despill สองแบบ (แรงที่ขอบ เบาที่แกนกลาง) หรือรวม key หลายตัวทีละส่วนของภาพ ทั้งหมดคือ Keymix ที่มี mask นุ่ม ๆ
mask ต้องตามสิ่งที่แก้ตลอดช็อต ถ้ากล้องขยับ ให้ track roto ไปด้วย mask ที่ไหลออกจากวัตถุจะเห็นเป็นแสงที่เลื่อนไปมา
4 ในงานจริง
ทำใน Nuke
- ต่อ plate เข้า B, สาย Grade เข้า A, Roto เข้า mask ของ Keymix
- ใช้ mix ของ Keymix ลดผลทั้งหมด แทนการไปแก้ Grade ทีละค่า
- ถ้าแก้แค่ node เดียว ต่อ Roto เข้า mask input ของ Grade ตรง ๆ ก็ได้ Keymix เหมาะเมื่อการแก้เป็นสายยาวหลาย node
- roto ใหญ่หรือออกนอกเฟรมที่เข้า A ของ Merge อาจทำให้ bbox บวม ตั้ง bbox ของ Merge ตัวนั้นเป็น B
- ตรวจด้วย Merge (difference) เทียบกับ plate เดิม นอก mask ต้องดำสนิท
พลาดบ่อย → แก้ยังไง
- ✗ เอา plate ที่ grade แล้ว Merge over plate เดิม✓ alpha plate เป็น 1 ทั้งเฟรม ทั้งภาพจะถูก grade ใช้ Keymix ที่มี mask
- ✗ ต่อชิ้นที่ตัดด้วย stencil กับ mask กลับด้วย over✓ over คูณ (1 − m) ซ้ำ ได้รอยมืดตาม feather ใช้ plus หรือใช้ Keymix ไปเลย
- ✗ mask ขอบแข็งรอบพื้นที่ที่ grade✓ การ grade พื้นที่ไม่มีขอบจริงใน plate ต่างจากขอบวัตถุใน R1 จึงให้ feather กว้างจนมองไม่เห็นรอยต่อ
- ✗ กล้องขยับแต่ mask อยู่กับที่✓ track แล้วให้ roto ตาม ไม่งั้นแสงที่แก้จะลอยเลื่อนไปบนภาพ
เช็กก่อนส่งช็อต
- นอก mask ภาพเหมือน plate เดิมทุกพิกเซล (difference = ดำ)
- มองไม่เห็นรอยต่อตามแนว feather
- mask ตามวัตถุตลอดช็อต
- bbox ไม่บวมเพราะ roto
5 เช็กตัวเอง
Keymix ใช้อะไรตัดสินว่าจะเอาภาพไหน
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. mask = 0.5, A = 0.32, B = 0.2 Keymix ให้ค่าเท่าไหร่
2. คุณ stencil plate ด้วย roto, mask ภาพที่ grade ด้วย roto เดียวกัน แล้วรวมด้วย over ผลเป็นยังไง
ตัวเลขมาจากไหน: ภาพคำนวณในเบราว์เซอร์ Saturation, Multiply, Clamp, Invert, Keymix, Copy และ Grade ตรงกับ Nuke 17.0v2 (ตรวจแล้ว) ส่วน Blur, Defocus, Glow, Sharpen, ChromaticAberration, Vignette, LensDistort, Grain, Erode, Toe, Keyer และ Despill เป็นแบบสอนหลักการ ไม่เท่า node ใน Nuke เป๊ะ Transform ในห้องนี้ก็เป็นแบบสอนหลักการเช่นกัน ใช้ bilinear ไม่ concatenate และตัดขอบที่เฟรม ภาพเป็นเรนเดอร์ Blender ของเราเอง (green screen สร้างด้วยโค้ดล้วน ฉากทะเลทรายใช้ภูเขาจาก Gaea 2.3 ท้องฟ้าเป็น HDRI CC0 จาก Poly Haven หินและหญ้าจาก Poly Haven CC0 ทรายและหินผาจาก Quixel และ rig หุ่นจาก Mixamo โดย Quixel และ Mixamo ใช้ในเรนเดอร์เท่านั้น)