1 อธิบาย
"ขาว" ไม่ได้มีแบบเดียว แสงกลางวัน (D65) อมฟ้ากว่าหลอด tungsten 3200K มาก พื้นที่สี sRGB ใช้ขาว D65 ส่วน ACES ใช้ขาวใกล้ D60 ซึ่งอุ่นกว่าเล็กน้อย
chromatic adaptation คือการย้ายสีทั้งชุดจากขาวหนึ่งไปอีกขาวหนึ่ง คล้ายตาเราปรับตัวกับแสง Bradford เป็นวิธีมาตรฐานที่ใช้กันแพร่หลาย ในแผนภาพ แต่ละเส้นลากจากวงโปร่ง (ใต้แสง) ไปจุดทึบ (หลัง Bradford) บอกว่าแต่ละสีถูกย้ายไปที่ไหน
XYZ′ = M⁻¹ · diag(LMS_to / LMS_from) · M · XYZ (M = Bradford)2 ลงมือลอง
โจทย์: ใต้ไฟ 3200K ปรับ "white balance จาก" ให้การ์ดเทาเป็นกลาง
ดูวงฟ้าบนแผนภาพ ให้ทับจุดขาวของแสง
3 เจาะลึก
ขาวแต่ละแบบอยู่ตรงไหน
บนแผนภาพ xy ขาวของแสงจากของร้อน (หลอดไส้ ดวงอาทิตย์โดยประมาณ) เรียงอยู่บนเส้นโค้งที่เรียกว่า Planckian locus อุณหภูมิต่ำอยู่ทางส้ม อุณหภูมิสูงอยู่ทางฟ้า D65 กับขาวของ ACES เป็นขาวมาตรฐานที่อยู่ใกล้เส้นนี้ แต่ไม่ได้อยู่บนเส้นพอดี
| ขาว | x | y |
|---|---|---|
| D65 (sRGB, Rec.709, P3-D65, Rec.2020) | 0.3127 | 0.3290 |
| ACES (~D60) | 0.32168 | 0.33767 |
| tungsten 3200K (Planckian, ประมาณ) | 0.4232 | 0.3991 |
Bradford ทำอะไร
Bradford แปลง XYZ ไปเป็นสามช่องที่คล้ายการตอบสนองของเซลล์รับแสงในตา (แบบปรับให้คมขึ้น) คูณแต่ละช่องด้วยอัตราส่วนขาวปลายทางต่อขาวต้นทาง แล้วแปลงกลับ ผลคือสีทั้งชุดถูกย้ายไปพร้อมกัน ขาวต้นทางกลายเป็นขาวปลายทางพอดี
- 1XYZ
- 2Bradford → LMS
- 3คูณด้วยอัตราส่วนขาว
- 4กลับเป็น XYZ
ACEScg ↔ sRGB ต้อง adapt
ขาวของ ACEScg (1,1,1) ถ้าแปลงเป็น sRGB โดยไม่ adapt จะได้ราว (1.05, 1.00, 0.92) ติดเหลืองอุ่น ถ้า adapt ด้วย Bradford จะได้ (1, 1, 1) พอดี config ของ ACES ใส่ขั้นนี้ไว้ให้แล้ว (Bradford หรือ CAT02 แล้วแต่ config) จึงควรแปลงผ่าน config ไม่ใช่เมทริกซ์ที่พิมพ์เอง การแปลง primaries sRGB → AP1 ใน CS4 ก็มีขั้นนี้รวมอยู่แล้ว
ขาวติดสีหลังแปลงพื้นที่สี = สงสัยขั้น adaptation หายไป
white balance ในงาน comp
ใน comp เรามักไม่ adapt ทั้ง plate เพราะสีของแสงใน plate คือบรรยากาศที่ตั้งใจไว้ แต่เวลาเอา element ที่ถ่ายใต้แสงอื่นมาใส่ เช่นควันที่ถ่ายใต้ไฟ tungsten ลงในฉากกลางวัน ต้องย้ายขาวของมันให้ตรงกับแสงของ plate แล้วค่อยแมทช์ black และ white point ต่อ
4 ในงานจริง
ทำใน Nuke
- Grade: sample การ์ดเทาหรือของที่ควรเป็นกลางใส่ whitepoint แล้วตั้ง gain เป็นค่าเทาที่การ์ดควรอ่านได้ (เช่นค่าเฉลี่ยของสามช่อง) เป็นการคูณต่อช่องใน linear ที่ทำให้เป็นกลางโดยความสว่างไม่กระโดด ถ้าปล่อย gain ไว้ที่ 1 การ์ดจะถูกดันขึ้นเป็น 1.0
- OCIOColorSpace: แปลง ACEScg ↔ sRGB ผ่าน config ซึ่งมีขั้น adaptation อยู่แล้ว
- Colorspace: แปลงทั้งเส้นโค้ง white point (illuminant) และ primaries ได้แยกกัน
- ColorMatrix: ใส่เมทริกซ์ 3×3 เองได้ แต่ควรใช้เมื่อรู้ที่มาของตัวเลขแน่นอน
พลาดบ่อย → แก้ยังไง
- ✗ แก้สีอมส้มด้วยการลด saturation✓ ภาพจะซีดแต่ยังอมส้ม ต้องย้ายขาว (คูณต่อช่อง หรือ adaptation)
- ✗ แปลงพื้นที่สีด้วยเมทริกซ์ที่ไม่มีขั้น adaptation✓ ขาวจะติดสี ใช้ config หรือเมทริกซ์ที่รวม Bradford/CAT02 แล้ว
- ✗ ทำให้ทุกช็อตเป็นกลางเหมือนกันหมด✓ สีของแสงคืออารมณ์ของช็อต แมทช์ element ให้เข้ากับแสงของ plate ไม่ใช่ล้างสี plate
เช็กก่อนส่งช็อต
- element ที่ถ่ายใต้แสงอื่นถูกย้ายขาวให้ตรง plate แล้ว
- การแปลงพื้นที่สีทุกตัวผ่าน config หรือมี adaptation
- ของที่ควรเป็นกลางใน plate กับใน CG อ่านค่าใกล้กัน
5 เช็กตัวเอง
แปลง ACEScg เป็น sRGB แต่ข้าม chromatic adaptation สีขาว (1,1,1) จะเป็นยังไง
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. การ์ดเทาใต้ไฟ 3200K โดยไม่ปรับ white balance ขึ้นจอ D65 เป็นสีอะไร
2. ทำไมขาวของ ACES ไม่ใช่ D65
ตัวเลขมาจากไหน: สูตรสีมาจาก src/figures/colormath.ts (sRGB IEC 61966-2-1, ARRI LogC3 EI 800, primaries ของ sRGB/P3/Rec.2020/ACES AP1 และ Bradford ซึ่งตรวจกับตัวเลขอ้างอิงแล้ว) tungsten 3200K ใช้สูตรประมาณ Planckian locus ของ Kim et al. (2002) การจำลองว่า plate ถูกแสงอื่นส่องใช้ Bradford ซึ่งเป็นการประมาณแบบสอน (แสงจริงเปลี่ยนวัสดุแต่ละชนิดไม่เท่ากัน) เป้าหมายยอมให้ช่องสีต่างกันไม่เกิน 1.5%