1 อธิบาย
บนฟิล์ม แสงที่จ้ามากทะลุชั้นรับแสงลงไปสะท้อนจากฐานฟิล์มแล้วย้อนกลับขึ้นมา เกิดเป็นขอบเรืองแดงส้มรอบไฮไลต์ที่ล้น โดยเฉพาะตรงที่สว่างจัดชนกับมืด ห้องนี้กระจายช่องแดงกว้างสุด เขียวรองลงมา น้ำเงินแคบสุด สีส้มแดงจึงเกิดเองจากขนาดที่ต่างกัน
มีกับดักสามข้อ: บวกภาพฟุ้งทั้งก้อน แกนไฟสว่างซ้ำ ลบต้นฉบับแต่ไม่ clamp แกนไฟเป็นรูมืด และไฟที่แดงอยู่แล้วจะแดงซ้อน ดูตัวเลขที่แกนกระจกหน้าหุ่นและที่ไฟแดง แล้วเปิด "เฉพาะที่บวก ×3" เพื่อดูสิ่งที่เพิ่มเข้าไป (ขยาย 3 เท่า ค่าติดลบก็แสดงเป็นสว่างด้วย)
out = img + amount · max(0, spread(key·img) − key·img)2 ลงมือลอง
โจทย์: ให้ halation บวกเฉพาะแสงที่ฟุ้งออก แกนกระจกไม่เปลี่ยน และไฟแดงไม่แดงซ้อน
ต้องใช้ครบสามอย่าง: minus, clamp และ roto
3 เจาะลึก
halation เกิดที่ไหน และไม่ใช่ glow ธรรมดา
halation ไม่ได้เกิดในเลนส์ มันเกิดในฟิล์ม แสงที่จ้ามากทะลุชั้นรับแสงลงไปถึงฐานฟิล์มแล้วสะท้อนกลับ ชั้นที่โดนก่อนคือชั้นรับแดง ขอบเรืองจึงออกแดงส้ม และเกิดชัดตรงที่ไฮไลต์ล้นชนกับพื้นที่มืด ฟิล์มรุ่นใหม่มีชั้นกัน halation จึงเห็นน้อยกว่าฟิล์มเก่า
bloom ของกล้องดิจิทัลออกขาว ไม่แดง ถ้าโปรเจกต์ถ่ายดิจิทัล halation คือ look ที่ตั้งใจเลือก ต้องดู reference ก่อนว่าต้องการไหม
| Halation | Bloom / glow | |
|---|---|---|
| เกิดที่ | ฟิล์ม (สะท้อนจากฐาน) | เลนส์/เซนเซอร์ |
| สี | แดงส้ม แดงกว้างสุด | ตามสีไฟ ค่อนข้างขาว |
| อยู่ตรงไหน | ขอบไฮไลต์ล้นที่ชนมืด | รอบไฮไลต์ทุกทิศ |
คณิตที่ทำให้แกนไฟไม่เพี้ยน
ภาพที่ฟุ้งมีพลังงานเท่าเดิมแต่กระจายออก ที่แกนไฟค่าจึงต่ำกว่าต้นฉบับ รอบ ๆ สูงกว่า สิ่งที่เราอยากบวกคือ "ส่วนที่ล้นออกไป" อย่างเดียว คือ ฟุ้ง − ต้นฉบับ แล้วตัดส่วนติดลบทิ้ง ผลในห้องแล็บ: ไม่ลบต้นฉบับ แกนกระจกสว่างขึ้น +12.0% ลบแต่ไม่ clamp แกนดับลง −52% ลบและ clamp แกนไม่เปลี่ยนเลย
ตัวเลือกขั้นสูง: ถ้าฟุ้งด้วย kernel ที่วัดจากเลนส์จริง (PSF) แล้วใส่จุดกลางเพิ่มนิดหนึ่ง (kernel = PSF + จุดเดียว) ภาพคมส่วนหนึ่งจะผ่านไปตรง ๆ แกนไฟคมขึ้นเมื่อเทียบกับขอบเรือง
- 1Key ไฮไลต์ที่ล้น
- 2ฟุ้ง (แดงกว้างสุด)
- 3ลบต้นฉบับ
- 4Clamp ≥ 0
- 5Merge plus
ไฟที่แดงอยู่แล้ว และเวลาที่ไม่ควรใส่
ไฟท้ายรถ ไฟเตือนสีแดง หรือไฟที่แดงจัดอยู่แล้ว ถ้าปล่อยเข้า key จะได้แดงซ้อนแดงจนเกินจริง roto ออกจาก key ก่อนฟุ้ง ในห้องแล็บไฟแดงได้แดงเพิ่ม +33% จนกว่าจะ roto ออก
halation มีเฉพาะที่ไฮไลต์ล้นจริง ไม่ใช่ทุกช็อต ทุกไฟ ดู reference ของกล้องหรือฟิล์มที่ใช้ก่อน แล้วใส่น้อยที่สุดที่ยังเห็น
ทั้งสูตรในบรรทัดเดียว: key ไฮไลต์ที่ล้น เอาไฟแดงออกจาก key ฟุ้ง ลบต้นฉบับออก เก็บแค่ส่วนที่เกิน 0 แล้วบวกทับ แกนไฟจึงไม่เปลี่ยน
4 ในงานจริง
ทำใน Nuke
- Keyer (luminance) เลือกเฉพาะไฮไลต์ที่ล้น ช่วงค่าต้องดันเกิน 1 ได้ แล้ว Premult
- Blur แยกช่อง (แดงใหญ่สุด เขียวกลาง น้ำเงินเล็ก) หรือ Convolve กับ kernel ของเลนส์
- Merge operation minus = A − B (ตรวจใน Nuke 17 แล้ว): ต่อภาพที่ฟุ้งเข้า A ต้นฉบับที่ key เข้า B
- Clamp ขั้นต่ำ 0 (ตั้งขั้นสูงเผื่อไว้ เช่น 10 กันค่าพุ่ง) แล้ว Merge plus ทับ comp
- Roto ไฟที่แดงอยู่แล้วออกจาก key และวาง halation ไว้หลัง CA (chromatic aberration) ก่อน grain (ลำดับ stack ทั้งหมดดู LA7)
พลาดบ่อย → แก้ยังไง
- ✗ บวกภาพที่ฟุ้งทั้งก้อน✓ บวกเฉพาะ max(0, ฟุ้ง − ต้นฉบับ) แกนไฟจึงไม่สว่างซ้ำ
- ✗ ลบต้นฉบับแล้วลืม clamp✓ ค่าติดลบกินแกนเป็นรูมืดและขอบสีแปลก Clamp ขั้นต่ำ 0 เสมอ
- ✗ ใส่ halation กับไฟแดง✓ roto ออกจาก key ไม่งั้นแดงซ้อน
- ✗ ใส่ทุกช็อตเป็น look ประจำ✓ ใส่เมื่อไฮไลต์ล้นจริงและ reference มี
เช็กก่อนส่งช็อต
- แกนไฟเท่าเดิมเมื่อเทียบก่อน/หลัง (sample ค่าดู)
- ขอบเรืองออกแดงส้ม แดงกว้างที่สุด
- ไม่มีค่าติดลบหลัง merge (sample ค่าดู)
- ไฟที่แดงอยู่แล้วถูก roto ออก
- อยู่หลัง CA ก่อน grain
5 เช็กตัวเอง
ทำไมต้อง clamp ที่ 0 หลัง Merge ลบต้นฉบับออก
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. หลังใส่ halation แกนกระจกหน้าหุ่นจาก 1.82 กลายเป็น 2.04 แปลว่าอะไร
2. ทำไมใช้ขนาดฟุ้งช่องแดงใหญ่กว่าเขียวและน้ำเงิน
ตัวเลขมาจากไหน: วิธีบวกเฉพาะส่วนที่ฟุ้ง (ลบต้นฉบับ แล้ว clamp ขั้นต่ำ 0) และการ roto ไฟแดงออก มาจาก KB 159 และ 153 (กราฟ node อ่านใน Nuke 17) สัดส่วนการกระจาย 1 : 0.45 : 0.2 และสี tint เป็นค่าสอนของเรา ไม่ใช่ค่าของ gizmo ใด Blur ใช้ box 3 รอบ (ใกล้ Gaussian) ที่ครึ่งความละเอียด key ใช้ luma Rec.709 ช่วง 1–2 ไฟแดงสร้างด้วยโค้ด