หน้าแรก · Lab · Case Files: แก้ปัญหา comp จากงานจริง

CF7 เคส 7: grain ซ้อน grain

regrain เฉพาะส่วนที่เปลี่ยน แต่ mask กลับด้าน

Case Files: แก้ปัญหา comp จากงานจริง · ~6 นาที · ฟรี

1 อธิบาย

อาการ: พื้นทรายดู noise หนากว่า plate ดิบ แต่หุ่นกลับเนียนกริบเหมือนพลาสติก ในเคสนี้ plate มี grain ของกล้องอยู่แล้ว (node "Camera grain" แทน grain นั้น) ส่วน CG ไม่มี grain เลย ต้อง regrain เฉพาะพิกเซลที่ถูกแทนที่ด้วย CG

Keymix ใส่ grain ตาม mask แต่มีคน Invert mask ไว้ grain ใหม่จึงลงบน plate (grain สองชั้นที่ขนาดเท่ากันแรงขึ้นราว 1.41 เท่า) และไม่ลงบนหุ่นเลย ดู r, g, b ทีละช่องที่พื้นทรายเทียบ "Merge over" กับ "Keymix (regrain)"

two equal, independent grains: √2 ≈ 1.41× stronger

2 ลงมือใน mini compositor

โจทย์: ให้ grain ใหม่ลงเฉพาะหุ่น (และเงาของมัน) ไม่ลงซ้ำบน plate

SkyVFX mini compositor · CF7640×360 · float · 1001

3 เจาะลึก

regrain เฉพาะส่วนที่เปลี่ยน

ถ้า plate ยังมี grain ของกล้องอยู่ (ไม่ได้ denoise) พิกเซล plate ที่ไม่ถูกแตะมี grain ถูกต้องแล้ว ส่วนที่ต้องใส่ grain คือพิกเซลที่ถูกแทนด้วยของใหม่: CG, ส่วนที่ paint, หรือส่วนที่ถูกเบลอจน grain หาย

อีกแนวทางที่ใช้กันมาก: denoise plate ก่อน comp ทั้งหมดบนภาพสะอาด แล้ว regrain ครั้งเดียวทั้งเฟรมตอนท้าย ทั้งสองแนวทางถูก แต่ห้ามผสมกันจน plate ได้ grain สองชั้น

แนวทางplateregrain
เก็บ grain เดิมไม่ denoiseเฉพาะพิกเซลใหม่ ผ่าน mask
denoise ก่อนdenoise แล้วทั้งเฟรม ครั้งเดียว ตอนท้าย

grain ซ้อนแรงขึ้นเท่าไหร่

noise สองชั้นที่เป็นอิสระต่อกันรวมกันแบบ √(a² + b²) ไม่ใช่ a + b grain สองชั้นที่แรงเท่ากันจึงแรงขึ้นราว 1.41 เท่า ในบทนี้วัดค่าเบี่ยงเบนของช่องน้ำเงินบนพื้นทรายได้ 0.027 (plate) เทียบ 0.038 (หลัง regrain ผิดที่) ราว 1.38 เท่า ใกล้ 1.41

ในงานจริงเคยเจอ element ที่มี grain มากกว่า plate ถึงราว 3 เท่า เพราะมี grain อยู่ในตัว element แล้วยังใส่ Grain ทับอีก วิธีวัดคือเทียบค่าเบี่ยงเบนบนพื้นที่เรียบทีละช่องสี เป้าหมาย comp ÷ plate ราว 0.9–1.1

mask ที่กลับด้าน

mask กลับด้านเป็นความผิดพลาดที่เงียบที่สุดอย่างหนึ่ง ภาพไม่พัง แค่ผลไปลงผิดที่ ทุกครั้งที่ต่อ mask ให้กดดู mask นั้นเอง แล้วถามว่า "สีขาวคือที่ที่อยากให้มีผลใช่ไหม" และเช็กช่อง invert ของ node ที่รับ mask ด้วย

grain: ท้ายสุด ครั้งเดียว ต่อช่องสี และเฉพาะที่เปลี่ยน

4 ในงานจริง

ทำใน Nuke

  1. Keymix: B = comp, A = comp ที่ใส่ Grain แล้ว, mask = alpha ของส่วนที่เปลี่ยน (CG, paint)
  2. เช็กช่อง invert ของ mask ใน Keymix และ Merge ทุกครั้ง
  3. DasGrain (gizmo ฟรีจากชุมชน) ทำแบบเดียวกัน: เอา grain จาก plate แล้วใส่เฉพาะที่ comp ต่างจาก plate
  4. Grain2: intensity ต่อช่องสีไม่เท่ากัน ปกติช่องน้ำเงินแรงสุด; ระวัง maskgrain ที่เปิดอยู่ตั้งแต่ต้นจะไม่ใส่ grain ตรงที่ alpha ของ input เป็น 0 (ใส่ grain ให้ element ก่อน merge จึงไม่ไปโดนส่วนที่ว่างของมัน และถ้าใส่กับภาพทั้งเฟรม ให้เช็ก alpha ของภาพนั้นก่อน) Grain ในห้องนี้เป็นแบบสอน ใส่ทุกพิกเซลไม่สน alpha

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

  • ✗ ใส่ Grain ทั้งเฟรมทั้งที่ plate ยังมี grain✓ regrain ผ่าน mask เฉพาะส่วนที่เปลี่ยน หรือ denoise plate ก่อน
  • ✗ ลด amount เพื่อแก้ grain หนา✓ ถ้าต้นเหตุคือ grain ซ้อน ลด amount แล้ว CG ก็ยังเนียนผิดอยู่ แก้ที่ mask
  • ✗ blur หรือ defocus หลังใส่ grain✓ grain อยู่หลัง blur/defocus เสมอ
  • ✗ วัด grain บนพื้นที่ที่มีรายละเอียดหรือมีของขยับ✓ วัดบนพื้นที่เรียบที่นิ่ง ทีละช่องสี

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

  • plate ไม่มี grain สองชั้น
  • CG และส่วนที่ paint มี grain เท่า plate (ต่อช่องสี)
  • mask ของ regrain ไม่กลับด้าน
  • grain เป็นขั้นท้ายสุด ไม่มี blur หลังมัน

5 เช็กตัวเอง

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

พื้นหลัง grain หนาขึ้น แต่ CG เนียน ต้นเหตุคืออะไร

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

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

คำถามเพิ่ม

1. grain สองชั้นที่แรงเท่ากันและเป็นอิสระต่อกัน รวมแล้วแรงขึ้นราวกี่เท่า

2. plate ไม่ได้ denoise จะใส่ grain ให้ CG อย่างไร

ตัวเลขมาจากไหน: Grain และ Keymix: Keymix ตรงกับ Nuke 17.0v2 ส่วน Grain เป็นแบบสอน (noise ต่อช่องสีที่บวกเข้าทุกพิกเซล ต่างจาก Grain2 ของ Nuke ที่ค่า default ไม่ใส่ grain ตรงที่ alpha เป็น 0) grain สองชั้นที่เป็นอิสระต่อกันรวมกันแบบ √(a² + b²) จึงแรงขึ้น √2 เท่าเมื่อเท่ากัน นี่คือคณิตของ noise ทั่วไป