หน้าแรก · Lab · ระบบสีแบบ 3D

CS3 Gamut เป็นปริมาตร ไม่ใช่สามเหลี่ยม

sRGB, P3, Rec.2020, ACEScg ในพื้นที่ xyY

ระบบสีแบบ 3D · ~8 นาที · ฟรี

1 อธิบาย

สามเหลี่ยมบนแผนภาพ xy บอกเฉดและความอิ่ม แต่ไม่บอกความสว่าง ถ้ายก luminance Y ขึ้นเป็นความสูง ลูกบาศก์ RGB ของแต่ละพื้นที่สีจะกลายเป็นรูปทรงคล้ายเต็นท์ ยอดคือขาวของพื้นที่นั้น หลังคาลาดลงจากขาวไปหา primary สีที่อิ่มจัดจึงสว่างเท่าขาวไม่ได้ (น้ำเงินกับแดงอยู่ต่ำสุด)

การ์ดนีออนนี้สร้างใน ACEScg จุดขาวคือสีที่อยู่ใน ACEScg แต่หลุดปริมาตร sRGB จุดแดงคือสีที่หลุด ACEScg ไปด้วย (มีค่าติดลบ) ส่วน plate ทะเลทรายของเราอยู่ใน sRGB สบาย ๆ

x = X / (X + Y + Z), y = Y / (X + Y + Z), height = Y

2 ลงมือลอง

โจทย์: ดัน saturation ให้การ์ดนีออนหลุด sRGB อย่างน้อย 15% โดยหลุด ACEScg ไม่เกิน 0.5%

ช่องที่ผ่านแคบ ขยับทีละ 0.01 และดูจุดแดง

SkyVFX Lab · CS3interactive · 1001

3 เจาะลึก

จากลูกบาศก์ RGB สู่รูปเต็นท์ใน xyY

ทุกพื้นที่สี RGB คือลูกบาศก์ของตัวเอง แปลงผ่าน XYZ แล้ววาดเป็น x, y บนพื้นกับ Y เป็นความสูง ขอบสามเส้นจากมุมดำกลายเป็นเสาตั้งตรงที่ primary ทั้งสาม ผนังที่มีช่องหนึ่งเป็น 0 ยืนบนขอบสามเหลี่ยม ส่วนสามหน้าที่มีช่องหนึ่งเป็น 1 กลายเป็นหลังคาที่ไปบรรจบที่ขาว

สามเหลี่ยมที่เห็นกันบ่อย ๆ จึงเป็นแค่เงาของรูปทรงนี้บนพื้น

ความสูงของ primary (Y)
sRGB R / G / B0.213 / 0.715 / 0.072
ACEScg R / G / B0.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. 1หาสีจัดในช็อต
  2. 2เช็กค่าติดลบ
  3. 3ตัดสินใจ: ตัด/บีบ/ปล่อย

บีบสีเข้าหาขอบอย่างนุ่มนวล

การตัดค่าติดลบทิ้งตรง ๆ ทำให้เกิดขอบแข็งและเฉดสีเพี้ยน ACES 1.3 จึงมี Reference Gamut Compression ที่ดึงสีที่หลุดกลับเข้ามาอย่างนุ่มนวล ส่วน output transform (ตัวแปลงสีตอนดูหรือส่งงาน ดู CS4) ของ ACES 2.0 มีการจัดการ gamut ในตัว ควรตกลงกับทีมว่าโชว์ใช้แบบไหน

4 ในงานจริง

ทำใน Nuke

  1. Colorspace หรือ OCIOColorSpace: แปลง ACEScg → sRGB linear แล้ว sample หาค่าติดลบ
  2. Expression: ทำ mask ของพิกเซลที่ min(r, g, b) < 0 เพื่อให้เห็นตำแหน่งสีที่หลุด
  3. Saturation หรือ ColorCorrect: ลดความอิ่มเฉพาะที่หลุด โดยใช้ mask ข้างบน
  4. 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 ข้อ

ทำไมสีที่อิ่มจัดถึงสูงเท่าขาวในรูปทรงไม่ได้

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

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

คำถามเพิ่ม

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)