1 อธิบาย
ใน over ภาพ A จะทับภาพ B จึงต้องเรียง layer จากไกลไปใกล้ เสาสีส้มใน plate อยู่ห่างกล้อง 7.0 m หุ่นอยู่ 9.0 m ของใน plate ที่อยู่ใกล้กล้องกว่า CG แบบนี้ CG ต้องถูกตัดออกตรงนั้น (holdout) ไม่อย่างนั้นจะลอยทับอยู่ข้างหน้า
ย้ายลำดับ layer ด้วยปุ่ม ↑/↓ หรือเปลี่ยน holdout ของหุ่น ระหว่าง “ไม่มี”, “stencil ด้วย matte เสา” และ “holdout จาก 3D” แล้วดูบรรทัดลำดับกับค่าที่ต่างในบริเวณเสาเทียบกับ render ทั้งฉากของ Blender ตอนเริ่มหุ่นอยู่หน้าสุด (ล่างสุดของรายการ) จึงทับเสา
over = A + B(1 − a)2 ลงมือลอง
โจทย์: ทำให้หุ่นอยู่หลังเสา เหมือน render ทั้งฉากของ Blender โดยให้ค่าที่ต่างในบริเวณเสาต่ำกว่าเป้าใน panel
ในรายการ บนสุดอยู่หลังสุด ล่างสุดอยู่หน้าสุด ในบรรทัดลำดับ ซ้ายอยู่หลัง ถามตัวเองว่าอะไรอยู่ใกล้กล้องที่สุด ลองทั้งการย้ายเสาไปหน้าสุดและการใช้ holdout
3 เจาะลึก
A ทับ B: ลำดับคือความลึก
over คือ A + B·(1 − a) ตรงที่ alpha ของ A เป็น 1 ภาพ B จะหายไปหมด เลเยอร์ที่ merge ทีหลังจึงดูเหมือนอยู่ใกล้กล้องกว่าเสมอ ไม่ว่าในฉากจริงจะอยู่ตรงไหน
ก่อนต่อ node ให้ไล่ดูฉากจากไกลไปใกล้ แล้วเรียง Merge ตามนั้น ในฉากนี้ plate อยู่ไกลสุด หุ่นยนต์อยู่กลาง และเสาอยู่ใกล้สุด
- 1plate (ไกลสุด)
- 2หุ่นยนต์ over
- 3เสาที่ตัดออก over (ใกล้สุด)
สองวิธี: เจาะ CG หรือวางเสากลับไว้บนสุด
stencil คือ B·(1 − a) โดย A เป็น matte ของเสา หุ่นยนต์จะถูกเจาะตรงที่ matte ขาว พอ over ลงบน plate เสาจริงจะโผล่ผ่านช่องนั้นเอง
อีกวิธีคือตัดเสาออกจาก plate ด้วย matte เดียวกัน แล้ว over ไว้บนสุดของ stack ทั้งสองวิธีพึ่ง matte ของเสาเหมือนกัน matte ดีแค่ไหน ขอบก็ดีแค่นั้น
| วิธี | ใช้อะไร | ระวัง |
|---|---|---|
| Stencil CG | matte ของเสา เป็น A ของ Merge stencil | matte กลับด้าน หรือหยิบ alpha ของหุ่นยนต์มาแทน |
| วางเสากลับบนสุด | plate ที่ตัดด้วย matte ของเสา แล้ว premult | ต้องอยู่ท้ายสุดของ stack |
holdout มาจากไหนได้บ้าง
สำหรับของใน plate ส่วนใหญ่ใช้ roto ถ้าทั้งสองฝั่งมี depth ก็เทียบ depth ได้ ถ้ามี geometry ของสิ่งที่บังก็ให้ renderer ตัดให้ และถ้ามี deep ก็ไม่ต้องสนลำดับเลย
Z depth เก็บแค่ผิวหน้าสุดของแต่ละ pixel ส่วน deep merge ทีละ sample ตามความลึก จึงไม่ต้องตั้งลำดับและไม่ต้อง render ใหม่ เป็นทางที่ทนที่สุดกับขน volume และ motion blur
| แหล่ง holdout | เหมาะกับ |
|---|---|
| Roto | ของแข็งใน plate เช่นเสา วาดและ track เอง |
| ZMerge (เทียบ depth) | เลเยอร์ที่มี depth ทั้งคู่ เลือกตาม depth ใน channel ที่ตั้งไว้ |
| 3D holdout render | มี geometry ของสิ่งที่บัง ยอมเรนเดอร์ใหม่เมื่อฉากเปลี่ยน |
| Deep (DeepHoldout2) | ขน ควัน volume motion blur ไม่ต้องเรนเดอร์ใหม่ |
holdout ทุกเลเยอร์ และขอบต้องนุ่ม
ถ้า element พก layer อื่นมาด้วย เช่น pass ที่จะใช้ทำ glow หรือ relight ภายหลัง ต้อง holdout ทุก layer ไม่ใช่แค่ rgba layer ที่ขาดหายไปจาก element ด้านหน้าจะไม่ถูกบัง ใช้ AddChannels เติม layer ที่ขาดก่อน pass ที่เพิ่มเข้ามาหลังจุด holdout ก็จะข้ามการตัดไปด้วย
matte ที่แข็งและเป็นขั้นบันไดจะทิ้งขอบหุ่นยนต์บาง ๆ รอบเสา ขอบ matte ควรนุ่มเท่ากับขอบเสาใน plate
ไล่ดูทีละ layer ในบริเวณเสา ทุก layer ที่จะใช้ต่อต้องถูกเจาะเหมือนกัน
4 ในงานจริง
ทำใน Nuke
- Roto: วาด matte ของเสาบน plate แล้ว track ตามกล้อง
- Merge2 (operation stencil): A = matte ของเสา, B = หุ่นยนต์ จากนั้น Merge2 (over) หุ่นยนต์ลงบน plate
- อีกทาง: Copy matte ของเสาเข้า alpha ของ plate → Premult → Merge2 (over) ไว้บนสุดของ stack
- ZMerge: ถ้าทั้งสองฝั่งมี depth ตั้ง channel ของ depth ให้ถูก และใช้ depth ที่ไม่ได้ premult
- Deep: DeepHoldout2 ตัด element ด้วย deep ของฉาก แล้วค่อยออกมา merge ใน 2D
- AddChannels: เติม layer ที่ขาดให้ครบก่อน holdout
พลาดบ่อย → แก้ยังไง
- ✗ merge CG ไว้ท้ายสุด ทับของใน plate ที่อยู่ใกล้กล้องกว่า✓ เรียงจากไกลไปใกล้ ของที่ใกล้กว่าไปทีหลัง หรือใส่ holdout ให้ CG
- ✗ stencil ด้วย matte ผิด เช่นกลับด้าน หรือใช้ alpha ของหุ่นยนต์เอง✓ ใช้ matte ของเสา และเปิดดูก่อนว่าขาวตรงเสา
- ✗ matte ของ holdout แข็งและเป็นขั้นบันได มีขอบเหลือรอบเสา✓ ทำขอบ matte ให้นุ่มเท่าขอบเสาใน plate
- ✗ holdout แค่ beauty แต่ layer อื่นที่ติดมาไม่ถูกตัด✓ holdout ทุก layer และใช้ AddChannels เติม layer ที่ขาด
- ✗ ใช้ depth ที่ premult ที่ขอบมาเทียบใน ZMerge✓ ใช้ depth ดิบ ไม่ premult ไม่ grade
เช็กก่อนส่งช็อต
- ลำดับ Merge เรียงจากไกลไปใกล้ตรงกับฉาก
- wipe เทียบกับ plate รอบเสา ไม่มีหุ่นยนต์โผล่ทับเสา
- gain ขึ้นแล้วไม่เห็นขอบหุ่นยนต์บาง ๆ รอบเสา
- matte ของเสาตามเสาได้ตลอดทั้งช็อต
- ทุก layer ที่ใช้ต่อถูก holdout เหมือนกัน
5 เช็กตัวเอง
หุ่นยนต์ลอยทับเสาใน plate ที่อยู่ใกล้กล้องกว่า ควรแก้อย่างไร
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. เรียงเลเยอร์จากล่างขึ้นบน (B → A) แบบไหนจึงได้หุ่นยนต์อยู่หลังเสา โดยไม่ใช้ stencil
2. ควันที่มี motion blur ซ้อนกับหุ่นยนต์ไปมา ควรทำ holdout ด้วยอะไร
ตัวเลขมาจากไหน: ภาพทั้งหมด render ด้วย Blender 5.2 Cycles จากฉากทะเลทรายและหุ่นยนต์ของเราเอง (tools/assets/passes_cg.py) แล้วคำนวณในเบราว์เซอร์ render: plate ที่เราเพิ่มเสาสีส้มเอง, matte ของเสา, หุ่นที่ใช้เสาเป็น 3D holdout และภาพอ้างอิงที่ render ทั้งฉากพร้อมกัน เงาของหุ่นมาจาก shadow catcher ค่าที่ต่างวัดเฉพาะบริเวณที่เสาซ้อนกับหุ่น และเป้าวัดสดตอนโหลดภาพ