1 อธิบาย
สามเหลี่ยมบนแผนภาพ xy บอกเฉดและความอิ่ม แต่ไม่บอกความสว่าง ถ้ายก luminance Y ขึ้นเป็นความสูง ลูกบาศก์ RGB ของแต่ละพื้นที่สีจะกลายเป็นรูปทรงคล้ายเต็นท์ ยอดคือขาวของพื้นที่นั้น หลังคาลาดลงจากขาวไปหา primary สีที่อิ่มจัดจึงสว่างเท่าขาวไม่ได้ (น้ำเงินกับแดงอยู่ต่ำสุด)
การ์ดนีออนนี้สร้างใน ACEScg จุดขาวคือสีที่อยู่ใน ACEScg แต่หลุดปริมาตร sRGB จุดแดงคือสีที่หลุด ACEScg ไปด้วย (มีค่าติดลบ) ส่วน plate ทะเลทรายของเราอยู่ใน sRGB สบาย ๆ
x = X / (X + Y + Z), y = Y / (X + Y + Z), height = Y2 ลงมือลอง
โจทย์: ดัน saturation ให้การ์ดนีออนหลุด sRGB อย่างน้อย 15% โดยหลุด ACEScg ไม่เกิน 0.5%
ช่องที่ผ่านแคบ ขยับทีละ 0.01 และดูจุดแดง
3 เจาะลึก
จากลูกบาศก์ RGB สู่รูปเต็นท์ใน xyY
ทุกพื้นที่สี RGB คือลูกบาศก์ของตัวเอง แปลงผ่าน XYZ แล้ววาดเป็น x, y บนพื้นกับ Y เป็นความสูง ขอบสามเส้นจากมุมดำกลายเป็นเสาตั้งตรงที่ primary ทั้งสาม ผนังที่มีช่องหนึ่งเป็น 0 ยืนบนขอบสามเหลี่ยม ส่วนสามหน้าที่มีช่องหนึ่งเป็น 1 กลายเป็นหลังคาที่ไปบรรจบที่ขาว
สามเหลี่ยมที่เห็นกันบ่อย ๆ จึงเป็นแค่เงาของรูปทรงนี้บนพื้น
| ความสูงของ primary (Y) | |
|---|---|
| sRGB R / G / B | 0.213 / 0.715 / 0.072 |
| ACEScg R / G / B | 0.272 / 0.674 / 0.054 |
ค่าติดลบคือสีที่อยู่นอกรูปทรง
เขียวล้วนของ ACEScg (0, 1, 0) แปลงเป็น sRGB ได้ราว (−0.62, 1.14, −0.13) ค่าติดลบบอกว่าสีนี้อยู่นอกปริมาตรของ sRGB จอ sRGB แสดงไม่ได้ ต้องตัดหรือบีบเข้ามา
กลับกัน แดงล้วนของ sRGB เป็น ACEScg ได้ราว (0.61, 0.07, 0.02) ไม่มีค่าติดลบ เพราะ sRGB อยู่ข้างใน ACEScg ทั้งหมด ตัวเลขในส่วนนี้มาจากการแปลงจริงที่มีขั้น adapt white point (ดู CS5) ส่วนจุดขาวกับจุดแดงในรูปข้ามขั้นนี้เพื่อให้เทียบกับรูปทรงได้ตรง ๆ
ค่าติดลบใน working space (พื้นที่สีที่ใช้คำนวณ เช่น ACEScg ดู CS4) ไม่ใช่บั๊กเสมอไป บางทีคือสีที่กว้างกว่าพื้นที่สีนั้น
ใครบ้างที่หลุด
plate ทะเลทรายของเราแทบไม่หลุด sRGB แม้ดัน saturation ถึง 2 (ราว 0.01% ของจุด) สิ่งที่มักหลุดคือแสงที่สีบริสุทธิ์มาก เช่นไฟนีออน เลเซอร์ LED สีจัด และ CG ที่ตั้งค่าสีสุดขั้ว เวลาเจอสีพวกนี้ให้ดูว่ามีค่าติดลบตรงไหน ก่อนจะ grade ต่อ
- 1หาสีจัดในช็อต
- 2เช็กค่าติดลบ
- 3ตัดสินใจ: ตัด/บีบ/ปล่อย
บีบสีเข้าหาขอบอย่างนุ่มนวล
การตัดค่าติดลบทิ้งตรง ๆ ทำให้เกิดขอบแข็งและเฉดสีเพี้ยน ACES 1.3 จึงมี Reference Gamut Compression ที่ดึงสีที่หลุดกลับเข้ามาอย่างนุ่มนวล ส่วน output transform (ตัวแปลงสีตอนดูหรือส่งงาน ดู CS4) ของ ACES 2.0 มีการจัดการ gamut ในตัว ควรตกลงกับทีมว่าโชว์ใช้แบบไหน
4 ในงานจริง
ทำใน Nuke
- Colorspace หรือ OCIOColorSpace: แปลง ACEScg → sRGB linear แล้ว sample หาค่าติดลบ
- Expression: ทำ mask ของพิกเซลที่ min(r, g, b) < 0 เพื่อให้เห็นตำแหน่งสีที่หลุด
- Saturation หรือ ColorCorrect: ลดความอิ่มเฉพาะที่หลุด โดยใช้ mask ข้างบน
- PositionToPoints: วางค่า XYZ หรือ xyY ของภาพเป็นกลุ่มจุดเพื่อเทียบกับ gamut
พลาดบ่อย → แก้ยังไง
- ✗ Clamp ค่าติดลบทิ้งทั้งภาพเพื่อ "ทำความสะอาด"✓ หาก่อนว่าค่าติดลบมาจาก gamut หรือจาก filter แล้วจัดการเฉพาะจุด
- ✗ ดูแค่สามเหลี่ยม xy แล้วสรุปว่าสีอยู่ใน gamut✓ สีต้องอยู่ในปริมาตร ไม่ใช่แค่ในสามเหลี่ยม ที่เฉดเดียวกันสีอาจสว่างเกินช่วง 0–1 ของจอนั้นได้ แต่ใน working space แบบ scene-linear อย่าง ACEScg ค่าเกิน 1 ไม่ผิด ค่าติดลบต่างหากที่บอกว่าหลุด gamut
- ✗ ดัน saturation ใน ACEScg แล้วดูแค่บนจอ sRGB✓ สีที่หลุด sRGB จะถูกตัดบนจอ ค่าที่ต่างกันจึงอาจดูเหมือนกัน ให้เช็กตัวเลขหรือลด saturation ดูว่าต่างกันจริงไหม
เช็กก่อนส่งช็อต
- รู้ว่าสีจัดในช็อตอยู่ใน working space หรือไม่
- ค่าติดลบที่เหลือมีเหตุผลและตั้งใจ
- ทีมตกลงเรื่อง gamut compression ตรงกัน
5 เช็กตัวเอง
ทำไมสีที่อิ่มจัดถึงสูงเท่าขาวในรูปทรงไม่ได้
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. ACEScg (0, 1, 0) แปลงเป็น sRGB ได้ค่าแดงติดลบ แปลว่าอะไร
2. ทำไมสีเหลืองสด ๆ อยู่สูงกว่าสีน้ำเงินสดในรูปทรง
ตัวเลขมาจากไหน: สูตรสีมาจาก src/figures/colormath.ts (sRGB IEC 61966-2-1, ARRI LogC3 EI 800, primaries ของ sRGB/P3/Rec.2020/ACES AP1 และ Bradford ซึ่งตรวจกับตัวเลขอ้างอิงแล้ว) xyY ใช้สูตร CIE มาตรฐาน เส้นเกือกม้าคือ CIE 1931 2° แบบสุ่มจุด การ์ดนีออนเป็นภาพที่เราสร้างเอง (HSV ใน ACEScg) saturation ในรูปนี้หมุนรอบ luminance ของ AP1 (0.272/0.674/0.054) ไม่ใช่ Rec.709 การตัดสินว่า "นอก sRGB" ใช้สีจริงแบบไม่ adapt white point เพื่อให้เทียบกับรูปทรงที่วาดได้ตรง ๆ แต่การแปลง ACEScg → sRGB จริงต้อง adapt white ด้วย (ดู CS5) จุดที่อยู่ก้ำกึ่งบางจุดจึงอาจตัดสินต่างจากใน Nuke วัดแล้ว: ผ่านช่วงราว 1.06–1.15 (ถึง 15% ที่ราว 1.06 และหลุด ACEScg เกิน 0.5% ตั้งแต่ราว 1.16)