1 อธิบาย
ใน comp ค่าพิกเซลคือ "ปริมาณแสง" (scene-linear) แสงสองเท่า = ตัวเลขสองเท่า แต่ตาคนไม่ได้เห็นแสงแบบเส้นตรง จอจึงต้องมีเส้นโค้ง sRGB แปลงตัวเลขก่อนแสดง
เทากลาง 18% (ค่า linear 0.18) ขึ้นจอที่ราว 0.46 เพราะเส้นโค้งดันโทนมืดขึ้น เลื่อนดูว่าตัวเลขกับสิ่งที่เห็นต่างกันแค่ไหน
sRGB = 12.92·x (x ≤ 0.0031308), 1.055·x^(1/2.4) − 0.0552 ลงมือลอง
ค่าที่ดูเป็น "ครึ่งหนึ่ง" บนจอ ไม่ใช่ 0.5 ใน linear
3 เจาะลึก
ตัวเลขสองแบบ: scene-linear กับ display-referred
Scene-linear คือตัวเลขที่ตามแสงในฉาก เทากลาง 18% อยู่ที่ 0.18 ดวงไฟหรือแดดสะท้อนเกิน 1 ได้สบาย ๆ ไม่มีเพดาน
Display-referred คือตัวเลขที่ถูกปรุงมาให้จอแล้ว เช่น JPEG, PNG หรือ MOV ที่ grade แล้ว ค่า 1 คือสว่างสุดที่จอแสดงได้ ไม่ใช่ปริมาณแสงจริง
| scene-linear | display-referred | |
|---|---|---|
| ตัวเลขหมายถึง | ปริมาณแสง | ความสว่างบนจอ |
| ช่วงค่า | 0 ถึงเกิน 1 มาก ๆ (float) | 0–1 (มักถูกตัด) |
| ตัวอย่างไฟล์ | EXR จาก CG, plate ที่แปลงแล้ว | JPEG, PNG, MOV รีวิว |
| ทำคณิตแสงได้ไหม | ได้ | ไม่ได้ ต้องแปลงก่อน |
ทำไมคณิตของ comp ต้องอยู่ใน linear
Merge, blur, defocus และ motion blur คือการรวมและเฉลี่ยแสง ผลจะถูกก็ต่อเมื่อตัวเลขเป็นปริมาณแสงจริง
ตัวอย่าง: สมมติมีรถจอดอยู่ใน plate ทะเลทราย แดดสะท้อนบนกระจกรถมีค่าราว 20 ข้างทรายที่ราว 0.12 ถ้า defocus ใน linear จะได้วงโบเก้สว่างชัด แต่ถ้าทำกับค่าที่ผ่านเส้นโค้งจอแล้ว แดดถูกตันไว้ที่ 1 วงโบเก้จะออกมาเป็นวงเทาทึบ
- 1Read: แปลงเข้า linear
- 2คณิต comp (merge, blur)
- 3Viewer: เส้นโค้งจอ
- 4Write: แปลงออกตามสเปก
อ่านตัวเลขที่ sample ให้เป็น
ภาพใน Viewer ผ่านเส้นโค้งจอแล้ว แต่ค่าที่ sample ได้เป็นค่า linear จุดที่ตาเห็นเป็น “เทาครึ่งหนึ่ง” บนจอ sRGB จะ sample ได้ราว 0.214 ไม่ใช่ 0.5
| ค่า linear | บนจอ (sRGB) | เทียบกับเทากลาง |
|---|---|---|
| 0.045 | 0.235 | −2 stop |
| 0.09 | 0.332 | −1 stop |
| 0.18 | 0.461 | เทากลาง |
| 0.36 | 0.634 | +1 stop |
| 0.72 | 0.865 | +2 stop |
จำคู่เดียวพอ: linear 0.18 ขึ้นจอที่ 0.46
การแปลงเกิดแค่ที่ขอบของ script
ฟุตเทจควรถูกแปลงแค่ครั้งเดียวขาเข้า (Read) และครั้งเดียวขาออกต่อหนึ่งไฟล์ส่ง (Write) ทุกอย่างตรงกลางอยู่ใน linear การดูผลเป็นหน้าที่ของ Viewer ไม่ใช่ node ใน graph
Nuke ทำงานภายในเป็น 32-bit float เสมอ ไม่ว่าไฟล์ต้นทางจะเป็น 8-bit หรือ 16-bit ค่าเกิน 1 จึงไม่หายระหว่างทาง เว้นแต่มี node ไป clamp
4 ในงานจริง
ทำใน Nuke
- Read: ตั้ง colorspace ให้ตรงกับที่ไฟล์เป็นจริง เช่น sRGB สำหรับ JPEG, linear สำหรับ EXR จาก CG ถ้าใช้ OCIO, Read จะแปลงไฟล์เข้า working space รวมถึง primaries ถ้า config กำหนดไว้ (เช่น config ACES) ถ้าใช้ color management แบบ Nuke จะแปลงแค่เส้นโค้งให้เป็น linear ไม่แปลง primaries (ดู C5)
- Project Settings > Color: เลือก color management (Nuke หรือ OCIO) และ working space ซึ่งเป็นตัวกำหนดว่า “linear” ของทั้ง script คืออะไร
- Viewer: เมนู display/view เปลี่ยนแค่สิ่งที่เห็น ค่าที่ sample ได้ยังเป็น linear เหมือนเดิม
- Write: ตั้ง colorspace ตามสเปกงานส่ง ถ้า Read กับ Write ตั้งเหมือนกัน ไฟล์จะวนกลับมาได้ค่าเดิม
พลาดบ่อย → แก้ยังไง
- ✗ ใส่ Colorspace linear→sRGB กลาง graph เพื่อ “ให้ดูง่าย” แล้ว merge ต่อจากนั้น✓ ปล่อยให้ Viewer แสดงผล ค่าในสาย comp ต้องเป็น linear ตลอด
- ✗ เห็นค่า 0.18 แล้วคิดว่า CG มืดเกินไป✓ 0.18 คือเทากลาง บนจอจะเห็นราว 0.46 ตัดสินด้วยตาผ่าน Viewer และเทียบกับ plate
- ✗ Clamp ทุกอย่างที่ 1 เพราะคิดว่า 1 คือขาวสุด✓ ค่าเกิน 1 คือแสงจริงที่ glow, defocus และ motion blur ต้องใช้ clamp เฉพาะเมื่อมีเหตุผลชัด เช่นก่อนทำ mask
- ✗ อ่าน EXR จาก CG เป็น sRGB✓ EXR จาก render มักเป็น linear อยู่แล้ว การถอดเส้นโค้งซ้ำทำให้ภาพมืดและคอนทราสต์จัดผิดปกติ (ส่วนการใส่เส้นโค้งจอซ้ำจะได้ผลตรงข้าม คือภาพซีดและลอย ดู C6) ตั้งตามที่ pipeline กำหนด
เช็กก่อนส่งช็อต
- ทุก Read ตั้ง colorspace ถูกต้องและตั้งใจเลือก ไม่ใช่ค่า default
- ไม่มีการแปลงเพื่อดูผลค้างอยู่กลาง graph
- ถ้ามีการ์ดเทาที่ถ่ายพอดีแสง ค่า sample ควรใกล้ 0.18 ห่างมากแปลว่า colorspace หรือ exposure ผิด
- ค่าเกิน 1 ยังอยู่ครบจนถึง Write
- Write colorspace ตรงกับสเปกงานส่ง
5 เช็กตัวเอง
ถ้าอยากให้แสงสว่างขึ้นสองเท่าใน comp ต้องทำอะไรกับค่า linear
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. คุณ sample พิกเซลได้ 0.214 แต่บนจอดูเป็นเทาครึ่งหนึ่งพอดี ข้อไหนถูก
2. Defocus แดดสะท้อนใน plate ทะเลทรายแล้วได้วงเทาทึบ แทนที่จะเป็นวงสว่าง สาเหตุน่าจะเป็นอะไร
ตัวเลขมาจากไหน: เส้นโค้งและเมทริกซ์คำนวณจากนิยามที่เผยแพร่ (sRGB IEC 61966-2-1, ARRI LogC3 EI 800, primaries ของ Rec.709/P3/Rec.2020/ACES AP1) ตรวจกับตัวเลขอ้างอิงที่เผยแพร่แล้ว ส่วน tone curve เป็นสูตรตัวอย่าง ไม่ใช่ ACES/AgX/Filmic