1 อธิบาย
ทุกพิกเซลมีตัวเลขสามตัว r, g, b จึงวางเป็นจุดในลูกบาศก์ได้ มุมหนึ่งคือดำ (0,0,0) มุมตรงข้ามคือขาว (1,1,1) เส้นทแยงที่เชื่อมสองมุมนี้คือแกนเทา ทุกจุดบนเส้นมี r = g = b
ภาพทั้งภาพจึงกลายเป็นกลุ่มจุด (point cloud) gain ยืดกลุ่มจุดออกจากมุมดำ lift ขยับปลายมืด saturation ดึงจุดเข้าหรือออกจากแกนเทา หมุนดูว่า plate ทะเลทรายของเราเกาะอยู่แถวไหน
grade: lift + (gain − lift)·x, then x^(1/gamma) · saturation: L + s·(x − L)2 ลงมือลอง
โจทย์: ใช้ lift และ gain จัดกลุ่มจุดของ plate ให้เต็มลูกบาศก์พอดีโดยไม่หลุดออก
plate เริ่มแค่ราว 0.05 ถึง 0.83 ยังไม่ถึงทั้งมุมดำและมุมขาว gain มากกว่า 1 ยืดปลายสว่างขึ้นไปใกล้เพดาน lift ติดลบเล็กน้อยดึงปลายมืดลงไปที่มุมดำ ดูตัวเลขต่ำสุด สูงสุด และจุดที่หลุด
3 เจาะลึก
อ่านลูกบาศก์ให้เป็น
ตำแหน่งตามแนวแกนเทา (ค่าเฉลี่ยของ R, G, B) คือความสว่างแบบคร่าว ๆ ส่วน Rec.709 luma เป็นอีกค่าหนึ่งที่ถ่วงน้ำหนักแต่ละช่อง ระยะห่างจากแกนเทาคือความอิ่มสี ส่วนทิศที่จุดเบนออกจากแกนคือเฉดสี plate ที่ดูเป็นกลางจะเกาะเป็นแท่งผอม ๆ ตามแกน ภาพสีจัดจะพองออกไปหาผนัง
plate ทะเลทรายของเราเป็นแท่งผอมเกือบตลอด มีแค่ท้องฟ้าที่เอียงไปทางน้ำเงินกับทรายที่เอียงไปทางส้มนิดหน่อย การหมุนลูกบาศก์ช่วยให้เห็นว่าเอียงไปทางไหน ซึ่งดูจากภาพ 2D ยาก
| สิ่งที่เห็นในลูกบาศก์ | ความหมายในภาพ |
|---|---|
| แท่งผอมตามแกนเทา | ภาพเกือบไม่มีสี |
| กลุ่มจุดเอียงเข้าหาผนังด้านหนึ่ง | ภาพติดสี (cast) |
| จุดกองแบนบนผนัง | ช่องสีถูกตัด (clip) ที่ 0 หรือ 1 |
| กลุ่มจุดสั้น ไม่ถึงมุมดำหรือมุมขาว | คอนทราสต์ต่ำ ดำลอย ขาวหม่น |
แต่ละ knob ขยับกลุ่มจุดยังไง
gain คูณทุกช่อง กลุ่มจุดจึงยืดออกจากมุมดำตามแนวเดิม lift ยกปลายมืดโดยปลายที่ 1 อยู่กับที่ (Grade ของ Nuke หมุนรอบ 1) gamma ดัดค่ากลางโดยไม่ขยับ 0 กับ 1 ส่วน saturation ดึงจุดเข้าหาหรือผลักออกจากจุดบนแกนเทาที่มี Rec.709 luma เท่ากัน ความสว่างตาม luma จึงไม่เปลี่ยน
- 1gain: ยืดจากมุมดำ
- 2lift: ขยับปลายมืด
- 3gamma: ดัดตรงกลาง
- 4saturation: เข้า/ออกจากแกน
lift ติดลบที่ทำให้ค่าดำติดลบ คือพิกเซลที่หลุดออกนอกลูกบาศก์ด้านล่าง (ใน Nuke ค่าเหล่านี้จะถูกตัดเป็น 0 เพราะ black clamp ของ Grade เปิดอยู่เป็นค่าเริ่มต้น รูปนี้ปิด clamp ไว้ให้เห็น)
ทำไมแกนของรูปนี้เป็นค่า sRGB
Grade คำนวณใน linear แบบ Nuke แต่ถ้าวาดลูกบาศก์ด้วยค่า linear plate ส่วนใหญ่จะกองอยู่ที่มุมดำจนมองไม่ออก รูปนี้จึงวาดด้วยค่าที่ส่งไปจอ (sRGB) ให้ทั้งกลุ่มจุดมองเห็นได้ บทถัดไป (CS2) จะสลับให้ดูว่าต่างกันแค่ไหน
"เต็มลูกบาศก์" ไม่ได้แปลว่าดี
โจทย์นี้จัด plate ให้เต็ม 0–1 พอดีเพื่อฝึกมือ แต่ใน comp จริงเราไม่ได้ทำให้ทุกช็อตเต็มช่วงเสมอ หน้าที่ของเราคือให้ CG เข้ากับ plate ถ้า plate ตั้งใจให้ดำลอยและหม่น CG ก็ต้องลอยและหม่นแบบเดียวกัน
กลุ่มจุดของ CG ควรซ้อนทับกลุ่มจุดของ plate ที่อยู่ใกล้กัน
4 ในงานจริง
ทำใน Nuke
- PositionToPoints อ่านค่า rgb ของแต่ละพิกเซลเป็นตำแหน่ง xyz ภาพจึงกลายเป็นกลุ่มจุดใน 3D Viewer
- CMSTestPattern สร้างภาพที่เป็นตารางสีของลูกบาศก์ เอาไปผ่าน grade แล้วดูด้วย PositionToPoints เพื่อเห็นว่า grade บิดลูกบาศก์ยังไง
- Grade: blackpoint/whitepoint, lift, gain, multiply, offset, gamma (รูปนี้ใช้แค่ lift, gain, gamma)
- Saturation: ใช้ Rec.709 luma เป็นค่าเริ่มต้น ค่า 0 ยุบทุกพิกเซลลงแกนเทา
- ถ้าจะวางกลุ่มจุดเป็นค่า display ให้ใส่ Colorspace (linear → sRGB) ในสาขาที่ใช้ดูเท่านั้น ไม่ต่อกลับเข้า comp
พลาดบ่อย → แก้ยังไง
- ✗ ดึงดำด้วย lift ติดลบจนพิกเซลมืดติดลบ✓ ดูจุดที่หลุดใต้ลูกบาศก์ ใช้ blackpoint หรือหยุดก่อนค่าติดลบ ใน Nuke ปุ่ม black clamp ของ Grade เปิดอยู่เป็นค่าเริ่มต้น ค่าติดลบจึงถูกตัดเป็น 0 (เว้นแต่จะปิด clamp) และเห็นเป็นจุดกองแบนที่ผนังแทน ส่วนรูปนี้ปิด clamp ไว้ให้เห็นจุดที่หลุด
- ✗ ใช้ saturation สูงเพื่อ "เติมชีวิต" ทั้งภาพ✓ สีจัดดันจุดชนผนังและติดลบได้ เพิ่มทีละน้อยและเช็กช่องที่ต่ำที่สุด
- ✗ ตัดสิน grade จากภาพบนจออย่างเดียว✓ ดูตัวเลขหรือกลุ่มจุดด้วย จะเห็นการ clip หรือสีติดที่ตามองไม่ออก
เช็กก่อนส่งช็อต
- ไม่มีพิกเซลติดลบที่เกิดจาก grade
- กลุ่มจุดของ CG ซ้อนกับของ plate บริเวณเดียวกัน
- ไม่มีจุดกองแบนบนผนัง ยกเว้นที่ตั้งใจ
- grade ทำใน linear การแปลงเป็น display อยู่แค่สาขาที่ใช้ดู
5 เช็กตัวเอง
ตั้ง saturation เป็น 0 กลุ่มจุดในลูกบาศก์จะเป็นยังไง
🔒 ตอบคำถามด้านบนก่อน แล้วการ์ดนี้จะเปิด
1. กลุ่มจุดเอียงไปทางมุมน้ำเงินทั้งก้อน แปลว่าอะไร
2. เพิ่ม gain จาก 1 เป็น 2 กลุ่มจุดใน linear จะเป็นยังไง
ตัวเลขมาจากไหน: สูตรสีมาจาก src/figures/colormath.ts (sRGB IEC 61966-2-1, ARRI LogC3 EI 800, primaries ของ sRGB/P3/Rec.2020/ACES AP1 และ Bradford ซึ่งตรวจกับตัวเลขอ้างอิงแล้ว) Grade (lift, gain, gamma) และ Saturation (Rec.709 luma) ใช้สูตรเดียวกับ engine ที่ตรวจกับ Nuke 17.0v2 แล้ว แกนลูกบาศก์เป็นค่า sRGB ที่ส่งไปจอ จุดคือทุกพิกเซลที่ 3 ทั้งแนวนอนและแนวตั้ง (25,680 จุด) และเป้าหมายวัดจากจุดชุดนี้ (plate เริ่มที่ 0.05 ถึง 0.83 ไม่หลุดเลย ส่วน lift −0.005, gain 1.51 ได้ 0.01 ถึง 1.00 ไม่หลุดเลย)