1 อธิบาย
ทุกพิกเซลเก็บตัวเลข 4 ตัว: r, g, b และ a (alpha) alpha บอกว่าพิกเซลนั้นมีวัตถุอยู่กี่ส่วน 1 = เต็ม 0 = ว่าง ตัวเลขระหว่างนั้นคือขอบ ผม หรือ motion blur
หุ่น CG นี้เรนเดอร์จาก Blender พร้อมเงาบนพื้น ลองกดปุ่ม a ที่ Viewer แล้วชี้เมาส์อ่านค่า เงาก็อยู่ใน alpha ด้วย โดยที่สีของเงาเป็น 0
2 ลงมือใน mini compositor
โจทย์: ใช้ Shuffle ส่ง alpha เข้าไปที่ r, g และ b เพื่อให้เห็น matte เป็นภาพขาวดำ
กดที่ node Shuffle แล้วเปลี่ยน out r, g, b เป็น a
3 เจาะลึก
สี่ตัวเลข ค่าอะไรก็ได้
ใน Nuke ทุกช่องเก็บเป็นเลขทศนิยม (float) ไม่ได้ถูกจำกัดที่ 0 ถึง 1 แสงจ้าอย่างแกนประกายไฟอาจสูงหลายสิบ และบางขั้นตอนก็ทำให้ค่าติดลบได้
alpha ต่างจากสามช่องแรก ปกติควรอยู่ระหว่าง 0 ถึง 1 เพราะมันคือสัดส่วนว่าพิกเซลถูกวัตถุบังไปเท่าไร
| ตรงไหนในภาพ | rgb | alpha | ความหมาย |
|---|---|---|---|
| กลางตัวหุ่น | สีเต็ม | 1 | บังพื้นหลังหมด |
| ขอบหุ่น | สีบางส่วน | 0.5 | บังครึ่งเดียว |
| เงาบนพื้น | 0 | ระหว่าง 0–1 | ทำให้ plate มืดลงอย่างเดียว |
| แกนประกายไฟ | เกิน 1 ไปมาก | 0 | แสงล้วน ไม่บังอะไร |
| พื้นที่ว่าง | 0 | 0 | ไม่มีอะไรเลย |
alpha คือการบัง ไม่ใช่ความสว่าง
เงาของหุ่นมีสี 0 แต่ alpha มากกว่า 0 พอเข้า Merge over ผลคือ 0 + B·(1−a) plate จึงมืดลงตาม alpha โดยไม่มีสีอะไรถูกเติม
ตัวอย่าง: เงา alpha 0.4 บนพื้นค่า 0.5 ได้ 0.5 × 0.6 = 0.3 พื้นยังเหลือ 60% ของแสงเดิม
อยากรู้ว่า element ไหนบังอะไร ให้ดูช่อง a ก่อนดูสี
มีมากกว่า rgba: layer
ไฟล์ EXR หนึ่งไฟล์เก็บได้หลาย layer เช่น depth, normal, motion vector หรือแสงแยกดวง layer คือกลุ่มของ channel ที่มีชื่อ เช่น rgba.red
Shuffle ย้าย channel ไปมา Copy เหมาะกับการยก channel เดียว เช่น alpha จากอีก input ส่วน Remove ใช้ทิ้ง layer ที่ไม่ใช้แล้ว ให้สคริปต์เบาขึ้น
- 1Read EXR
- 2Shuffle เลือก layer
- 3ใช้งาน
- 4Remove (keep rgba)
อ่าน channel ให้เป็น
กด R, G, B, A ที่ Viewer เพื่อดูทีละช่อง matte ที่ดูดีตอนค่าปกติอาจมีรูเล็ก ๆ ที่เห็นต่อเมื่อดัน gain ขึ้น
อีกวิธีที่เร็ว: วาง element over บน Constant สีขาว รูใน alpha และขอบสกปรกจะโผล่ทันที
4 ในงานจริง
ทำใน Nuke
- Read (EXR) → Viewer: กด A ดู alpha, กด R/G/B ดูทีละสี
- Shuffle: ต่อ a เข้า output r, g และ b เพื่อดู matte เป็นภาพขาวดำ
- Copy: ยก alpha จาก Roto หรือ key อีกสายเข้ามาใส่ element
- Remove (operation keep, rgba) หลังใช้ layer พิเศษเสร็จ
- Merge over บน Constant ขาว เพื่อเช็กรูใน alpha
พลาดบ่อย → แก้ยังไง
- ✗ ทาเงาเป็นสีดำใน rgb แต่ alpha เป็น 0✓ over กับ alpha 0 แค่บวก 0 เข้าไป ไม่มีอะไรเปลี่ยน เงาต้องอยู่ใน alpha
- ✗ Shuffle layer แสงแยกดวงเข้า rgba แล้ว alpha หาย✓ layer แบบนี้มักไม่มี alpha ของตัวเอง ให้ส่ง alpha จาก rgba เดิมมาด้วย
- ✗ รวม matte สองอันด้วย plus จน alpha เกิน 1✓ ใช้ max หรือ screen ในการรวม matte ค่าจะไม่เกิน 1
- ✗ ปล่อยให้ทุก layer ไหลไปตลอดสคริปต์✓ ใส่ Remove (keep) หลังใช้เสร็จ สคริปต์จะเร็วและอ่านง่ายขึ้น
เช็กก่อนส่งช็อต
- ดู alpha ด้วยปุ่ม A และดัน gain ขึ้นแล้ว
- over บนสีขาวแล้วไม่มีรูหรือขอบสกปรก
- alpha อยู่ในช่วง 0–1
- รู้ว่า element นี้ premult มาแล้วหรือยัง
- layer ที่ไม่ใช้ถูก Remove ออกแล้ว
5 เช็กตัวเอง
พิกเซลบนขอบหุ่นมี alpha = 0.5 ในภาพที่ premult แล้ว สีของพิกเซลนี้จะเป็นอย่างไร
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. เงาของหุ่นมี rgb 0 และ alpha 0.4 วาง over บนพื้นที่มีค่า 0.5 ผลลัพธ์คือเท่าไร
2. ถ้า alpha ของ element เป็น 1.3 แล้ว Merge over จะเกิดอะไรกับพื้นหลังตรงนั้น
ตัวเลขมาจากไหน: สูตร 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 ใช้ในเรนเดอร์เท่านั้น ไม่มีไฟล์ต้นฉบับแจก)