หน้าแรก · Lab · FX elements: ไฟ ควัน ระเบิด

FE7 QC ของ element

ดัน viewer ดู alpha ดู grain แล้วแก้ให้ถูกจุด

FX elements: ไฟ ควัน ระเบิด · ~7 นาที · ฟรี

1 อธิบาย

element ที่ได้รับมาอาจดูเรียบร้อยใน comp แต่ยังซ่อนปัญหาที่เห็นเฉพาะตอนดัน viewer ได้ เช่น alpha แข็ง grain ซ้อนสองชั้น และค่าติดลบเล็ก ๆ ในพื้นที่ว่าง QC ของ element คือการไล่หาเรื่องเหล่านี้ก่อนเอา element ไปใช้

ใช้มุมมองสลับดู gain ×8, alpha และ grain ×20 (high-pass) เพื่อหาจุดผิด แล้วลองแก้ทีละจุด ดู readout สามแถว คือความกว้างขอบกับควันบางที่เหลือ อัตราส่วน grain และค่าตรงที่ alpha = 0 กับที่ขอบนุ่ม

fix: rgb − k·(1 − a), k = the value sampled where alpha = 0

2 ลงมือลอง

โจทย์: ทำให้ element ผ่าน QC คือขอบควันนุ่ม grain เท่ากับ plate และไม่มีอะไรถูกเพิ่มนอกตัว element

การแก้บางแบบแก้ readout ได้ค่าหนึ่งแต่ทำอย่างอื่นเสีย ทุกครั้งที่เปลี่ยน ให้ดูทั้งมุมมองและ readout แล้วถามตัวเองว่าการแก้นั้นเอาปัญหาออกจริง หรือแค่ซ่อนไว้

SkyVFX Lab · FE7interactive · 1001

3 เจาะลึก

ตรวจ element ก่อนเอาเข้า comp

ที่ exposure ปกติ alpha แข็ง offset เล็ก ๆ และขอบเพี้ยนแทบมองไม่เห็น ให้ดัน gain ของ viewer ขึ้นอย่างน้อย ×4 แล้วดูทั้ง rgb และ alpha บางครั้งจะเจอของที่ไม่ควรอยู่ใน alpha เช่นเงาที่ติดมาด้วย

ทำเป็นรอบเดียวกันทุกครั้ง แต่ละ view หาปัญหาคนละแบบ

  1. 1Comp ปกติ
  2. 2Gain ×8
  3. 3ดู alpha
  4. 4Grain high-pass
  5. 5วัดค่า

alpha แข็ง: ขอ alpha จริง อย่า blur

ควันที่ alpha ถูกตัดเป็น 0 กับ 1 จะเสียขอบฟุ้งที่โปร่งแสง ดูเหมือนกระดาษตัดแปะ ใน view alpha จะเห็นขอบเป็นเส้นคม และความกว้างขอบ (ช่วง alpha 10–90%) แทบเป็นศูนย์

blur alpha แข็งทำให้ขอบนุ่มก็จริง แต่ไส้ของควันที่หายไปแล้วไม่กลับมา ขอบนุ่มไม่เท่ากับรายละเอียด ทางแก้ที่ถูกคือเอา alpha นุ่มตัวจริงจากต้นทาง

เจอ alpha แข็ง ให้ขอตัวต้นฉบับก่อนคิดจะซ่อมเอง

grain ใส่ครั้งเดียว ตอนท้าย

ใส่ grain เป็นขั้นท้าย ๆ ของ comp และอย่า grade ทับหลังจากนั้น ถ้า element มี grain ติดมาแล้วยังใส่ grain node ทับอีก จะได้ grain สองชั้น ในงานจริงเคยเจอ element ที่ grain สูงราว 3 เท่าของ plate ด้วยเหตุนี้

วิธีแก้คือ denoise element แล้วใช้ตัวที่สะอาดตลอดทั้ง comp จากนั้นใส่ grain ครั้งเดียวตอนท้ายจาก reference เดียว การใส่ grain เพิ่มเพื่อกลบไม่ช่วยอะไร

  1. 1Denoise element
  2. 2Comp ตัวสะอาด
  3. 3Grain ครั้งเดียว
  4. 4Crop

พื้นที่ว่างต้องเป็น 0 พอดี

element ที่ premultiply แล้ว encode เป็น log เมื่อแปลงกลับเป็น linear อาจมีค่าติดลบเล็ก ๆ ตรงที่ alpha = 0 ในงานจริงวัดได้ราว −0.009 ถึง −0.014 over คือ A + B·(1 − a) ตรงที่ a = 0 ค่า A จึงถูกบวกเข้า plate ตรง ๆ ทั้งเฟรมเลยมืดลงนิดหนึ่ง offset ที่ฝังไว้ในรูปนี้อยู่ในช่วงนั้น

rgb − k·(1 − a) โดย sample k จากพื้นที่ว่างของแต่ละช็อต จะเอา offset ออกทั้งในพื้นที่ว่างและบนขอบนุ่ม ต่างจากการตั้ง 0 เฉพาะที่ a == 0 หรือการ clamp

วิธีตรงที่ alpha = 0บนขอบนุ่ม
ใช้ตามที่ได้มาoffset ยังอยู่offset ยังอยู่
clamp rgb ≥ 0ค่าติดลบกลายเป็น 0offset ที่ซ่อนในค่าบวกยังอยู่
a == 0 ? 0 : rgbเป็น 0offset ยังอยู่
rgb − k·(1 − a)เป็น 0ถูกเอาออกตามสัดส่วน alpha

วัด grain ให้ถูกที่

วัด grain บนพื้นที่เรียบเท่านั้น แยกทีละ channel และวัดใน float ถ้าวางกล่องวัดบนหินหรือบนรายละเอียดของควัน texture จะถูกนับเป็น grain ด้วย ตัวเลขก็จะสูงเกินจริง

grain ของแต่ละ channel ไม่เท่ากัน บ่อยครั้ง blue ต้องแรงกว่า จึงต้อง match ทีละ channel ไม่ใช่ดูรวม

วางกล่องวัดบนท้องฟ้าเรียบ ห่างจากเนินเขา หิน และตัวควัน

4 ในงานจริง

ทำใน Nuke

  1. Viewer: ดัน gain ขึ้นอย่างน้อย ×4 แล้วกด A เพื่อดู alpha ของ element ก่อนใช้งาน
  2. Expression บน element ที่ premultiply: ช่อง red พิมพ์ r-k*(1-a) (green และ blue แบบเดียวกัน) ใช้เครื่องหมายลบแบบ ASCII และพิมพ์ค่าที่ sample จากพื้นที่ว่างของช็อตนั้นแทน k
  3. Denoise บน element ที่มี grain ติดมา แล้วใช้ตัวที่สะอาดนี้ใน comp
  4. ล้าง alpha ของ plate ให้เป็น 0 ด้วย Shuffle ก่อน Merge แรก เพื่อให้ alpha ที่ไหลอยู่ใน tree มาจาก element ที่เราใส่เท่านั้น
  5. Grain2 เป็น node สุดท้ายก่อน crop ใส่ครั้งเดียว และ match ทีละ channel
  6. ถ้าจำกัด regrain ด้วย mask ให้ feather mask ด้วย FilterErode

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

  • ✗ blur alpha แข็งแทนการหา alpha จริง✓ ขอ alpha นุ่มตัวต้นฉบับ เพราะ blur ทำได้แค่ขอบนุ่ม รายละเอียดของควันไม่กลับมา
  • ✗ แก้ grain ซ้อนด้วยการใส่ grain เพิ่ม✓ denoise element แล้ว regrain ครั้งเดียวตอนท้าย
  • ✗ clamp ค่าติดลบเป็น 0 ตรงที่ alpha = 0 แต่ปล่อย offset บนขอบนุ่ม✓ ใช้ rgb − k·(1 − a) โดย sample k ทีละช็อต
  • ✗ ตรวจ element ที่ exposure ปกติอย่างเดียว✓ ดัน gain ขึ้นและดู alpha ทุกครั้งก่อนใช้
  • ✗ วัด grain บนบริเวณที่มี texture✓ วัดบนพื้นที่เรียบ ทีละ channel ใน float

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

  • alpha ของ element ดูที่ gain ×4 ขึ้นไปแล้ว ไม่มีขอบแข็งหรือเงาติดมา
  • ขอบควันนุ่มและยังมีรายละเอียด ไม่ใช่แค่ถูก blur
  • grain ของ element กับ plate เท่ากันบนพื้นที่เรียบ ทุก channel
  • มี grain node เดียว อยู่ท้ายสุด ไม่มี grade ตามหลัง
  • ค่าในพื้นที่ว่างของ element เป็น 0 รวมถึงบนขอบนุ่ม

5 เช็กตัวเอง

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

บนท้องฟ้าเรียบ grain ของ element สูงกว่า plate มาก และ element ก็มี grain ติดมาอยู่แล้ว ควรแก้อย่างไร

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

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

คำถามเพิ่ม

1. ทำไมใช้ rgb − k·(1 − a) แทนการตั้ง rgb เป็น 0 ตรงที่ a == 0

2. ควันมา alpha แข็ง เป็นแค่ 0 กับ 1 วิธีไหนแก้ได้ถูกต้อง

ตัวเลขมาจากไหน: จุดผิดทั้งสามเราฝังเองบนเรนเดอร์ควันของเรา ได้แก่ alpha ที่ถูก threshold, grain ที่ติดมากับ element และ offset สีดำที่จางลงตาม alpha แบบ element ที่ encode เป็น log (แบบสอนหลักการ) grain ของ plate เป็น Gaussian grain สังเคราะห์ที่ใส่ในเบราว์เซอร์ ส่วนเกณฑ์ขอบ 2 px, grain 0.85–1.2 และพื้นที่ว่าง 0.001 เป็นเกณฑ์สำหรับการสอนของเรา element ทุกชิ้นเป็นของเราเอง: จำลองด้วย Mantaflow ใน Blender 5.2 แล้วเรนเดอร์ Cycles ด้วยกล้องเดียวกับ plate (EmberGen สั่ง export แบบไม่เปิดหน้าจอไม่ได้บนเครื่องนี้) ไม่ใช้ stock element