หน้าแรก · Lab · Keying Lab

K5 Gamma ที่ alpha แก้ขอบ

ขั้นแรกของการแก้ขอบหลัง despill

Keying Lab · ~5 นาที · ฟรี

1 อธิบาย

ก่อน erode ลองปรับ gamma ของ alpha ก่อน Merge (Grade ที่ channels = alpha) ค่าน้อยกว่า 1 ทำให้ขอบบางลง เห็นพื้นหลังมากขึ้น ค่ามากกว่า 1 ทำให้ขอบหนาขึ้น วิธีนี้เก็บรายละเอียดได้มากกว่า erode มาก

ในห้องนี้ Grade อยู่ก่อน Premult ขอบจึงเลื่อนเข้าหาสีพื้นหลัง: พื้นหลังสว่างกว่า ขอบสว่างขึ้น พื้นหลังมืดกว่า ขอบมืดลง ถ้าย้าย Grade ไปไว้หลัง Premult ตรงก่อน Over การลด alpha จะทำให้ขอบสว่างขึ้นหรือเท่าเดิมเท่านั้น ลองดูที่ขอบแขนหุ่น

2 ลงมือใน mini compositor

SkyVFX mini compositor · K5640×360 · float · 1001

3 เจาะลึก

gamma แตะเฉพาะขอบ

ผล = pow(a, 1/g) ค่า 0 กับ 1 อยู่ที่เดิมเสมอ เนื้อทึบด้านในและพื้นหลังที่ว่างจึงไม่เปลี่ยน มีแค่ค่าระหว่างกลางซึ่งก็คือขอบ ผม และเส้นบาง ๆ ที่ขยับ g น้อยกว่า 1 ลดค่าขอบลง g มากกว่า 1 เพิ่มขึ้น

alphag = 0.5g = 0.8g = 1g = 1.25g = 2
0.10.010.0560.10.1580.316
0.40.160.3180.40.480.632
0.50.250.420.50.5740.707
0.90.810.8770.90.9190.949

ขยับทีละน้อย 0.8–1.25 ก็เห็นผลแล้ว

เทียบกับ erode บนเสาอากาศ

ลวดเสาอากาศของหุ่นบนกรีนสกรีนบางจนกินพื้นที่แค่บางส่วนของพิกเซล สมมติว่าพิกเซลบนเส้นอ่านได้ alpha ราว 0.4 erode −1 ลบมันเป็น 0 ทั้งเส้น แต่ gamma 0.8 ลดเหลือ 0.318 เส้นบางลงแต่ยังอยู่ครบ

นี่คือเหตุผลที่ alpha gamma มาก่อน erode เสมอ มันแก้ความหนักเบาของขอบโดยไม่เปลี่ยนรูปทรง

วางไว้ตรงไหนให้ผลต่างกัน

ก่อน Premult (แบบในห้องทดลอง): สีของขอบถูกคูณด้วย alpha ใหม่ ขอบจึงเลื่อนเข้าหาสีพื้นหลัง พื้นหลังสว่างกว่าก็สว่างขึ้น มืดกว่าก็มืดลง

หลัง Premult ตรงก่อน Over: สี RGB ของขอบคงเดิม Over = A + B × (1 − a) เมื่อ a ลดลง พื้นหลังถูกบวกเข้ามามากขึ้นอย่างเดียว ขอบจึงสว่างขึ้นหรือเท่าเดิมเสมอ ใช้แก้ขอบดำรอบหุ่นหน้าท้องฟ้าสว่างได้เร็ว ส่วน gamma ที่ฝั่ง B ไม่มีผลกับขอบนี้

ตำแหน่งg < 1 ทำให้ขอบ
ก่อน Premultเข้าหาสีพื้นหลัง
หลัง Premult ก่อน Overสว่างขึ้นหรือเท่าเดิม

ลำดับแก้ halo ในช็อตจริง

ขอบเทาหรือดำส่วนมากมาจากสีของขอบ ไม่ใช่จาก alpha จึงเริ่มที่ despill ก่อน แล้วค่อย alpha gamma ที่จำกัดด้วย roto เฉพาะจุดที่มีปัญหา ถ้ายังไม่พอค่อย edge extend และ erode เป็นขั้นสุดท้าย

ระวังส่วนที่ motion blur และผม gamma ต่ำทำให้มันจางลงเร็วกว่าขอบปกติ ดูทั้งช็อตไม่ใช่เฟรมเดียว

  1. 1Despill
  2. 2Alpha gamma (มี roto)
  3. 3Edge extend
  4. 4Erode

4 ในงานจริง

ทำใน Nuke

  1. Grade: channels = alpha ปรับ gamma วางก่อน Merge (over)
  2. ต่อ Roto เข้า mask input ของ Grade ให้โดนเฉพาะขอบที่มีปัญหา
  3. ดูผลด้วย Viewer gain และ gamma ทั้งขึ้นและลง และดูช่อง a ประกอบ
  4. ถ้ายังไม่พอ: EdgeExtend แล้วค่อย FilterErode เป็นขั้นท้าย

พลาดบ่อย → แก้ยังไง

  • ✗ ใส่ gamma ที่ alpha ของพื้นหลัง (B) เพื่อแก้ขอบ✓ gamma ต้องอยู่ที่ alpha ของ A ซึ่งเป็นตัวกำหนดว่าพื้นหลังโผล่มาแค่ไหน
  • ✗ ใช้ gamma ทั้งตัวหุ่นจนผมและ motion blur จาง✓ จำกัดด้วย roto และเช็กทั้งช็อต
  • ✗ erode ก่อนลอง alpha gamma✓ despill → alpha gamma → edge extend → erode
  • ✗ ไม่รู้ว่า Grade อยู่ก่อนหรือหลัง Premult แล้วงงว่าทำไมขอบไม่เป็นอย่างที่คิด✓ ก่อน Premult ขอบเข้าหาสีพื้นหลัง หลัง Premult (g < 1) ขอบสว่างขึ้นหรือเท่าเดิมเท่านั้น เลือกให้ตรงกับปัญหา

เช็กก่อนส่งช็อต

  • ขอบไม่มีเส้นเทาหรือดำเมื่อเปิด Viewer gain ขึ้น
  • เส้นบาง (เสาอากาศ ผม) ยังอยู่หลังปรับ gamma
  • Grade ของ alpha ถูกจำกัดด้วย roto ถ้าปัญหาอยู่เฉพาะจุด
  • motion blur ไม่จางผิดปกติตลอดช็อต
  • ลำดับ: despill → alpha gamma → edge extend → erode

5 เช็กตัวเอง

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

gamma ของ alpha น้อยกว่า 1 ทำอะไรกับขอบ

สิ่งที่ได้เรียน

🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด

คำถามเพิ่ม

1. alpha ของเสาอากาศคือ 0.5 ตั้ง gamma 0.5 ได้ค่าเท่าไร

2. gamma 0.8 ที่ alpha ของหุ่นหลัง Premult ตรงก่อน 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 ใช้ในเรนเดอร์เท่านั้น)