หน้าแรก · Lab · Transform & Filtering

T2 Transform ซ้อนแล้วภาพนุ่มลง

resample ทุกครั้ง เสียความคมทุกครั้ง

Transform & Filtering · ~5 นาที · ฟรี

1 อธิบาย

ทุกครั้งที่ภาพถูกย้ายไม่ลงพิกเซลพอดีหรือหมุน ต้อง resample ซึ่งเฉลี่ยพิกเซลข้าง ๆ ภาพจึงนุ่มลง ทำซ้อนหลายครั้งยิ่งนุ่ม ห้องนี้หมุน +10° แล้ว −10° ภาพกลับที่เดิมแต่เบลอกว่าต้นฉบับ

ใน Nuke Transform ที่ต่อกันติด ๆ จะรวมเป็นการคำนวณครั้งเดียว (concatenate) ถ้ามี node อื่นคั่น เช่น Grade การรวมจะขาด เอนจินในห้องนี้ไม่ concatenate เพื่อให้เห็นผลเสีย

2 ลงมือใน mini compositor

SkyVFX mini compositor · T2640×360 · float · 1001

3 เจาะลึก

ทำไมเลื่อนครึ่งพิกเซลแล้วภาพนุ่ม

เฟรมมีแค่พิกเซลเต็ม ๆ เมื่อเลื่อนภาพไม่ลงพิกเซลพอดีหรือหมุน พิกเซลใหม่แต่ละตัวต้องเฉลี่ยจากพิกเซลเดิมรอบ ๆ เรียกว่า resample

ตัวอย่าง: เส้นขาวกว้าง 1 px ค่า 1.0 บนพื้นดำ เลื่อน 0.5 px ด้วยการเฉลี่ยแบบ bilinear (แบบที่ห้องทดลองนี้ใช้) จะกลายเป็นเส้นกว้าง 2 px ค่า 0.5 ทั้งคู่ แสงยังเท่าเดิม แต่ความคมหายไปแล้ว

  1. 1เส้น 1 px = 1.0
  2. 2เลื่อน 0.5 px
  3. 3เส้น 2 px = 0.5, 0.5

Concatenation: ให้ Nuke resample ครั้งเดียว

ใน Nuke เมื่อ Transform, CornerPin2D หรือ Reformat ต่อกันติด ๆ Nuke จะรวมการเคลื่อนทั้งหมดเป็นการคำนวณเดียว กรองภาพครั้งเดียว และคิด motion blur จากการเคลื่อนรวม Dot ที่คั่นไม่ทำให้ขาด

ถ้ามี node ที่แก้พิกเซลคั่นกลาง เช่น Grade การรวมจะขาด ภาพจะถูก resample แยกทีละช่วง ตัวอย่างสุดขั้วคือย่อ 0.1 แล้วคั่นด้วย Grade แล้วขยาย 10 ภาพจะเละ ถ้าไม่มีอะไรคั่นจะแทบไม่เสียอะไรเลย

  1. 1Transform
  2. 2Transform
  3. 3Grade (ทำให้ขาด)
  4. 4Transform

grade ก่อนหรือหลังสาย Transform ทั้งชุด อย่าวางไว้ตรงกลาง

เลือก filter

knob filter บอกว่าจะเฉลี่ยพิกเซลแบบไหน ไม่มีตัวที่ดีที่สุดทุกงาน แต่ละตัวแลกความคมกับปัญหาคนละแบบ

filterผลใช้เมื่อ
impulseไม่กรองเลย หยิบพิกเซลใกล้สุด ขอบหยักถ้าหมุนหรือย่อเลื่อนเป็นพิกเซลเต็มเท่านั้น
cubicค่า default นุ่มนิดหน่อยงานทั่วไป
Lanczos / sincคมกว่า แต่อาจเกิดวงมืดหรือค่าติดลบรอบขอบสว่างต้องรักษารายละเอียด และตรวจขอบแล้ว

ห้องทดลองนี้ตั้งใจไม่ concatenate

เอนจินในห้องนี้ resample ทุก Transform แยกกันด้วย bilinear หมุน +10° แล้ว −10° ภาพจึงกลับที่เดิมแต่นุ่มกว่า checker ต้นฉบับ ใน Nuke สองตัวนี้ที่ต่อกันติดจะหักล้างกันเป็นการเคลื่อนศูนย์ ภาพไม่เสียความคม

ห้องนี้จึงแสดงสิ่งที่จะเกิดใน Nuke เมื่อสายถูกตัดขาด เช่นมี Grade หรือ precomp คั่นระหว่างการย้ายสองครั้ง ต่างจาก Nuke ตรงที่ห้องนี้ตัดข้อมูลนอกเฟรมทิ้งด้วย มุมภาพจึงกลับมาเป็นสีดำ ส่วนใน Nuke bbox ยังเก็บข้อมูลส่วนนั้นไว้ ให้ดูความนุ่มที่กลางภาพ

4 ในงานจริง

ทำใน Nuke

  1. ต่อ Transform, CornerPin2D และ Reformat ติดกัน คั่นได้แค่ Dot
  2. วาง Grade และ node สีอื่นก่อนหรือหลังสาย transform ทั้งชุด
  3. filter: ใช้ cubic เป็นค่าตั้งต้น ใช้ impulse เมื่อเลื่อนเป็นพิกเซลเต็มเท่านั้น
  4. Reformat ที่ concatenate จะไม่ crop ข้อมูลนอกเฟรมยังอยู่ ใส่ Crop ต่อท้ายถ้าต้องการขอบเฟรมแข็ง
  5. ตรวจ: Merge (difference) ระหว่างต้นฉบับกับผลที่ย้ายไปแล้วย้ายกลับ ดูว่าขอบเหลือมากแค่ไหน

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

  • ✗ ใส่ Grade ระหว่าง Transform สองตัว✓ การรวมขาด ภาพถูก resample สองครั้ง ย้าย Grade ไปก่อนหรือหลังสาย
  • ✗ ใส่ Sharpen หลังทุก Transform เพื่อชดเชย✓ ได้ halo แต่รายละเอียดที่หายไม่กลับมา แก้ที่ต้นเหตุ ลดจำนวนการ resample
  • ✗ ใช้ impulse กับการหมุน✓ impulse ไม่กรองเลย ขอบจะหยักเป็นขั้นบันได ใช้กับการเลื่อนเป็นพิกเซลเต็มเท่านั้น
  • ✗ ใช้ filter ที่คมมากแล้วไม่ตรวจขอบสว่าง✓ Lanczos หรือ sinc อาจเกิดวงมืดและค่าติดลบ ยก gain ใน Viewer แล้วดูรอบไฮไลต์

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

  • transform ทุกตัวของ element เดียวกันต่อติดกัน
  • ไม่มี Grade หรือ node สีคั่นกลางสาย transform
  • filter เลือกอย่างตั้งใจ
  • ขอบสว่างไม่มีวงมืดหรือค่าติดลบ

5 เช็กตัวเอง

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

จะรักษาความคมเมื่อมีหลาย Transform ใน Nuke ทำยังไง

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

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

คำถามเพิ่ม

1. เส้นขาว 1 px ค่า 1.0 เลื่อน 0.5 px ด้วย bilinear ได้อะไร

2. ข้อไหนทำให้ concatenation ใน Nuke ขาด

ตัวเลขมาจากไหน: ภาพคำนวณในเบราว์เซอร์ 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 ใช้ในเรนเดอร์เท่านั้น)