1 อธิบาย
ไฟไม่ได้บังอะไร มันปล่อยแสงออกมา บน plate จึงต้องบวกเข้าไปด้วย Merge แบบ plus และ alpha ของไฟเป็น 0 หรือเกือบ 0 ซึ่ง over ที่ alpha เป็น 0 ก็คือ plus พอดี กองไฟของเราเป็น float แกนไฟสูงราว 25.0 (4.6 stops เหนือ 1) ส่วนไฟล์ display-referred คือไฟเดียวกันที่แปลงเป็น sRGB 8-bit แล้ว 77% ของพิกเซลไฟถูกตัดแบนที่ 1
ลองสลับไฟล์ element เปลี่ยนโหมด merge ดึง black point และลด exposure ดูกราฟเส้นใต้ภาพเทียบกับเส้น 1.0 และดูค่าที่ element เพิ่มเข้ามาตรงที่ควรว่าง ไฟล์ทั้งสองวางอยู่บนดำที่ยกไว้ราว 0.0091 เท่ากัน
plus: A + B · 1 stop = ×22 ลงมือลอง
โจทย์: ทำให้ไฟนั่งอยู่ใน plate จริง ๆ ใช้แสงจริง (ไฟล์ float) รวมลงแบบแสง และพื้นที่ว่างของ element ต้องไม่เพิ่มอะไรเข้ามา
ดูค่าที่ element เพิ่มในพื้นดำรอบไฟ (ลอง gain ×8 ที่ Viewer) แล้วลด exposure ดูว่าไฟล์ไหนแกนยังมีรูปทรง ทดลองเสร็จแล้วให้ exposure อยู่ในช่วง ±1 stop จากจุดเริ่ม
3 เจาะลึก
แสงบวก วัตถุบัง
element ที่ปล่อยแสง เช่นไฟหรือประกายไฟ ไม่ได้บังพื้นหลัง มันแค่เพิ่มแสง จึงรวมด้วย plus ส่วนสิ่งที่เป็นวัตถุ เช่นควันหรือฝุ่น บังแสงได้จริง จึงใช้ over กับ alpha ของมันเอง
over คือ A + B·(1 − a) ถ้า alpha ของไฟเป็น 0 สูตรจะเหลือ A + B ซึ่งก็คือ plus ไฟที่ alpha เกือบ 0 จึงได้ผลแทบเท่ากันไม่ว่าจะใช้โหมดไหนในสองโหมดนี้
| element | Merge | alpha |
|---|---|---|
| ไฟ ประกายไฟ | plus | 0 หรือเกือบ 0 |
| ควัน ฝุ่น | over | alpha จริงของมัน |
ทำไม screen ใช้กับไฟ HDR ไม่ได้
บท C6 และ CF4 อธิบายไว้แล้วว่าเมื่อค่าเกิน 1 screen ของ Nuke คืน max(A, B) แสงของไฟจึงไม่ได้ถูกบวกลงบน plate
แกนไฟส่วนใหญ่อยู่เหนือ 1 ซึ่งเป็นช่วงที่ screen ทิ้งแสงไปพอดี ถ้าไฟจ้าเกิน ให้ลด exposure ของ element ไม่ใช่เปลี่ยนโหมด merge
ไฟจ้าเกินแก้ที่ exposure ไม่ใช่ที่ screen
แกนไฟเหนือ 1 คือข้อมูล
ในไฟล์ float แกนไฟขึ้นไปถึงราว 25.0 หรือราว 4.6 stop เหนือ 1 และพิกเซลไฟราว 77% อยู่เหนือ 1 ไฟล์ display-referred แบนส่วนนี้ทั้งหมดไว้ที่ 1
exposure นับเป็น stop หนึ่ง stop คือแสงเพิ่มเป็นสองเท่าหรือลดลงครึ่งหนึ่ง พอลด exposure ไฟล์ float ยังเห็นรูปทรงในแกน แต่ไฟล์ที่ clip แล้วกลายเป็นแผ่นส้มแบน ๆ glow ที่สร้างจากแกนแบนก็จะแบนตามไปด้วย ถ้ามีแค่ไฟที่ clip แล้ว ขั้นด้านล่างช่วยเติม texture กลับเข้าไปในแกนได้บ้าง
- 1Luma key ส่วนที่ clip
- 2ไฟเดียวกัน กลับด้าน + เลื่อนเวลา
- 3Multiply เข้าไป
- 4Plus เฉพาะใน key
- 5ลด exposure
ดำของ element ต้องเป็น 0
plus บวกทุกพิกเซล รวมถึงพื้นดำรอบไฟ ในบทนี้ไฟล์ทั้งสองวางอยู่บนดำที่ยกไว้ราว 0.0091 แบบ linear (ไฟล์ float ด้วย เราตั้งใจใส่) พอ plus ลงไป ทั้งการ์ดของ element จะกลายเป็นม่านเทาบน plate
แก้โดย sample ค่าดำในพื้นที่ว่างแล้วลบออก element แบบ log ที่ premultiply แล้วก็มีปัญหาคล้ายกัน คือพื้นที่ alpha 0 อ่านได้ค่าเล็ก ๆ ที่ไม่ใช่ 0 แล้วเลื่อนทั้งเฟรม แก้ด้วย rgb − k·(1 − a) โดย sample k ทีละช็อต
ยก gain ของ viewer แล้ว sample พื้นที่ว่างก่อน plus ทุกครั้ง
grade และดูไฟให้ถูกที่
element ที่ค่าสูงมากควร grade ใน log หรือดูผ่าน view แบบ filmic หรือ ACES ใน view sRGB ธรรมดา ไฟสีส้มจะ clip เป็นสีขาวพร้อมรอยต่อแข็ง ๆ
ไฟจริงไล่จากแกนขาว → เหลือง → ส้ม → แดงเข้ม ลด saturation เฉพาะส่วนที่ร้อนที่สุด อย่าทาส้มจัดทั้งก้อน
- 1แกนขาว
- 2เหลือง
- 3ส้ม
- 4แดงเข้ม
4 ในงานจริง
ทำใน Nuke
- Read ไฟล์ EXR แบบ scene-linear ถ้ามีแค่ไฟล์ display-referred ให้แปลงเป็น linear ด้วย Colorspace ก่อน (แต่ส่วนที่ clip ไปแล้วเอาคืนไม่ได้)
- sample ดำในพื้นที่ว่าง แล้วลบออกด้วย Grade (blackpoint) หรือ Expression rgb − k·(1 − a)
- ถ้าการลบดำทำให้มีค่าติดลบ ใช้ Clamp เฉพาะด้านล่าง ห้าม clamp ด้านบน
- Exposure (ตั้ง Adjust in เป็น Stops เพราะค่าเริ่มต้นคือ Densities) ปรับความแรงของไฟเป็น stop
- Merge (plus) ไฟลงบน plate
- ลด gain ของ viewer และดูผ่าน view แบบ filmic หรือ ACES เพื่อเช็กว่าแกนยังมีรูปทรง
พลาดบ่อย → แก้ยังไง
- ✗ ใช้ screen "จะได้ไม่จ้าเกิน"✓ เหนือ 1 screen คืน max(A, B) ใช้ plus แล้วคุมความแรงด้วย Exposure
- ✗ grade ไฟเป็นสีส้มจัดทั้งก้อน✓ ให้แกนร้อนและจางสี แล้วไล่ไปเหลือง ส้ม แดงเข้ม
- ✗ ใช้ไฟ 8-bit แบบ display-referred เป็นแสงหลักของช็อต✓ แกนถูก clip ไปแล้ว ใช้ไฟล์ float หรือเติมรายละเอียดในส่วนที่ clip ก่อน
- ✗ plus element ที่ดำถูกยกไว้✓ sample ดำในพื้นที่ว่างแล้วลบให้เป็น 0 ก่อน merge
- ✗ ตัดสินไฟใน view sRGB ธรรมดาอย่างเดียว✓ ดูผ่าน view แบบ filmic หรือ ACES หรือ grade ใน log
เช็กก่อนส่งช็อต
- ไฟเป็นไฟล์ float แบบ scene-linear
- รวมลง plate ด้วย plus ไม่ใช่ screen
- ยก gain แล้ว พื้นที่ว่างของ element ไม่เพิ่มอะไรเลย ไม่มีการ์ดเทา
- ลด gain ของ viewer แล้ว แกนไฟยังมีรูปทรง ไม่ใช่แผ่นแบน
- แกนร้อนจางสี ไล่ไปเหลือง ส้ม แดงเข้ม
- ดูผ่าน view แบบ filmic หรือ ACES แล้วไม่มีรอยต่อแข็ง
5 เช็กตัวเอง
plus ไฟลง plate แล้วเห็นสี่เหลี่ยมเทาจาง ๆ รอบไฟทั้งการ์ด สาเหตุคืออะไร
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. ลด exposure ของไฟลง แล้วไฟล์ display-referred กลายเป็นแผ่นส้มแบน ทำไม
2. ลด exposure ไฟลง 2 stops ค่าที่แกน 16 จะเหลือเท่าไร
ตัวเลขมาจากไหน: ภาพคำนวณในเบราว์เซอร์ กองไฟเป็น gas sim เรนเดอร์เป็น EXR แบบ scene-linear ส่วนไฟล์ display-referred คือเรนเดอร์เดียวกันที่เราแปลงเป็น sRGB 8-bit และยกดำไว้ เพื่อแทน element สำเร็จรูปทั่วไป และเราใส่ดำระดับเดียวกันใต้ไฟล์ float ด้วย (แบบสอนหลักการ) กองไฟเป็น sim ขนาดเล็ก ดูใกล้ ๆ จะเห็นเป็นก้อนเหลี่ยม plate ทะเลทรายและหุ่นยนต์เป็นเรนเดอร์ Blender ของเราเอง คณิตของ Merge ตรงกับ Nuke 17 element ทุกชิ้นเป็นของเราเอง: จำลองด้วย Mantaflow ใน Blender 5.2 แล้วเรนเดอร์ Cycles ด้วยกล้องเดียวกับ plate (EmberGen สั่ง export แบบไม่เปิดหน้าจอไม่ได้บนเครื่องนี้) ไม่ใช้ stock element