OKLCH คืออะไร
(jakub.kr)- OKLCH คือ โมเดลสีสมัยใหม่ที่ออกแบบให้สอดคล้องกับการรับรู้ทางสายตาของมนุษย์ โดยมีคุณสมบัติที่ทำให้ การเปลี่ยนแปลงของความสว่าง ความอิ่มสี และเฉดสีระหว่างสีต่าง ๆ รู้สึกสม่ำเสมอ จึงเป็น โมเดลสีแบบสม่ำเสมอเชิงการรับรู้
- โครงสร้างประกอบด้วย Lightness(ความสว่าง), Chroma(ความอิ่มสี), Hue(เฉดสี) และเมื่อเทียบกับโมเดลเดิมจะช่วยให้ สร้างชุดสีที่มีความสม่ำเสมอ ได้
- สามารถสร้างพาเลตสีที่สม่ำเสมอได้แม้จะ เปลี่ยนเฉพาะ Hue โดยคงความสว่างและความอิ่มสีเท่าเดิม จึงเหมาะกับงานออกแบบ UI
- เมื่อเทียบกับ sRGB/HSL จะให้ การเปลี่ยนระดับแสงเงาที่คาดเดาได้และไล่สีที่สม่ำเสมอ แต่ในบางกรณีอาจเกิดสีที่ไม่ได้ตั้งใจได้
- บน จอแสดงผลสมัยใหม่อย่าง Display-P3 สามารถแสดงสีได้กว้างขึ้น และเบราว์เซอร์สมัยใหม่ก็รองรับผ่าน CSS Color 4 พร้อมทั้งมี การทำ sRGB fallback ทำให้กำลังกลายเป็นมาตรฐานเว็บมากขึ้นเรื่อย ๆ
แนะนำโมเดลสี OKLCH
- OKLCH เป็นโมเดลสีสมัยใหม่ที่พัฒนาขึ้นโดยมีเป้าหมายเรื่อง ความสม่ำเสมอเชิงการรับรู้ (perceptually uniform)
- โมเดลนี้ทำงานใกล้เคียงกับ วิธีที่มนุษย์รับรู้สีจริง ๆ มากกว่า จึงทำให้ การจัดการสีสะดวกขึ้นมาก ในงานออกแบบดิจิทัลและการพัฒนาฟรอนต์เอนด์
แนวคิดพื้นฐานของโมเดลสี
- โมเดลสี คือ ระบบ ที่ใช้นิยามและแสดงสีในเชิงคณิตศาสตร์
- ตัวอย่างโมเดลที่ใช้กันบ่อย: RGB, HSL, LCH, OKLCH, LAB, XYZ
- แต่ละโมเดลจะกำหนด ความสะดวกในการแสดงผลและการจัดการสี
ตัวอย่างวิธีเขียนค่าสี
- oklch(0.55 0.18 260)
- hsl(220 100% 50%)
- rgb(0, 128, 255)
- lch(60% 60 260)
- lab(50 -10 -50)
- color(xyz 0.18 0.19 0.6)
- #1E90FF
Gamut(ขอบเขตของปริภูมิสี)
- Gamut หมายถึง ช่วงสีทั้งหมด ที่โมเดลสีนั้นสามารถแสดงได้
- gamut ที่เป็นตัวแทนได้แก่ sRGB(ค่ามาตรฐานบนเว็บ), Display-P3(รองรับบนอุปกรณ์สมัยใหม่)
- ปริภูมิสีมีคุณสมบัติหลายอย่างนอกเหนือจาก ขอบเขต gamut เช่น white point, transfer function
โครงสร้างของ OKLCH
ทั้ง OKLCH และ LCH ต่างก็ประกอบด้วยสามค่า คือ Lightness, Chroma, Hue
OKLCH อ้างอิงจากปริภูมิสี OKLab
- Lightness(ความสว่าง/ความสว่างสัมพัทธ์) : แสดงเป็น 0~1 หรือ 0%~100% และช่วยให้ การเปลี่ยนแปลงความสว่างมีความสม่ำเสมอ
- Chroma(ความอิ่มสี) : ความเข้มของสี คล้ายกับ Saturation(ความอิ่มสี) ใน HSL
- Hue(เฉดสี) : แสดงสีด้วยมุม 0~360 องศา
ข้อดีและการใช้งานของ OKLCH
-
ความสว่างที่สม่ำเสมอ
- ใน OKLCH หากกำหนดสีด้วย ค่าความสว่างและความอิ่มสีเท่าเดิม แล้วเปลี่ยนเฉพาะ hue จะทำให้ ทุกสีถูกรับรู้ว่ามีความสว่างใกล้เคียงกัน
- ใน sRGB หรือ HSL แบบเดิม ความสว่างหรือความอิ่มสีอาจดูไม่สม่ำเสมอตามแต่ละสี
- ดังนั้น OKLCH จึงเหมาะกับการสร้าง พาเลตสีที่สม่ำเสมอเชิงการรับรู้ ได้ง่าย
-
ระดับความสว่างของสีที่คาดเดาได้
- ใน OKLCH เมื่อ เปลี่ยนค่าความสว่าง ก็สามารถสร้างระดับสีหลายขั้นได้ โดยไม่ทำให้ hue(เฉดสี) หรือ chroma(ความอิ่มสี) เปลี่ยนไป
- ใน HSL เป็นต้น เมื่อความสว่างเปลี่ยน มักเกิดอาการ drift ที่เฉดสีเลื่อนไปด้วย
- OKLCH ทำให้สร้างระดับความสว่างของสีที่สม่ำเสมอได้ด้วยการปรับเพียงความสว่าง
-
วิธีจัดการไล่สี (Gradients)
- ใน sRGB จะเป็นการ interpolate ระหว่างค่าแดง เขียว น้ำเงิน ทำให้จุดกึ่งกลางดูหม่นหรือเกิดการเปลี่ยนความสว่างมากเกินไป
- OKLCH จะ interpolate ตามแกน Lightness, Chroma, Hue จึงสร้างไล่สีที่ดูเป็นธรรมชาติมากกว่าได้
- อย่างไรก็ตาม เนื่องจาก ค่า Hue มีโครงสร้างแบบวงกลม จึงอาจเกิดการเพี้ยนของสีที่ไม่คาดคิดได้
- เพื่อหลีกเลี่ยงปัญหานี้ สามารถทำการ interpolate แบบเส้นตรงใน OKLab เพื่อให้ได้ผลลัพธ์ที่คาดเดาได้มากกว่า
การรองรับปริภูมิสี
- sRGB ไม่สามารถครอบคลุมสีบางส่วนในปริภูมิสีที่กว้างของจอแสดงผลสมัยใหม่ได้
- เมื่อใช้ OKLCH จะสามารถ แสดงสีได้สดขึ้นบนอุปกรณ์ที่รองรับช่วงสีกว้าง เช่น Display-P3
- บนอุปกรณ์ที่รองรับเพียง sRGB สีจะถูก แมปให้ใกล้เคียงที่สุดเท่าที่ทำได้
ค่า Chroma(ความอิ่มสี) สูงสุด
- OKLCH สามารถระบุสีในเชิงคณิตศาสตร์ได้แม้จะอยู่นอกช่วงที่หน้าจอจริงแสดงผลได้
- ตัวอย่างเช่น ค่า chroma ที่สูงเกินไปอย่าง
oklch(0.7 0.4 40)ไม่สามารถแสดงผลจริงได้ จึงถูก clipping เป็นสีใกล้เคียง - จึงสำคัญที่จะต้องเข้าใจ แนวคิดเรื่อง chroma สูงสุด และตั้งค่าให้เหมาะสมตามเฉดสี ความสว่าง และปริภูมิสีที่เลือกใช้ (sRGB, Display-P3)
การรองรับของเบราว์เซอร์และ fallback
- สีแบบ OKLCH ถูกนำมาใช้ใน CSS Color Module Level 4 และ เบราว์เซอร์สมัยใหม่ส่วนใหญ่รองรับแล้ว
- ในเบราว์เซอร์รุ่นเก่าอาจยังไม่รองรับ จึงสามารถตั้งค่า fallback ด้วยคำสั่ง CSS @supports ได้
@layer base { :root { /* sRGB hex */ --color-gray-100: #fcfcfc; --color-gray-200: #fafafa; --color-gray-300: #f4f4f4; @supports (color: oklch(0 0 0)) { /* OKLCH */ --color-gray-100: oklch(0.991 0 0); --color-gray-200: oklch(0.982 0 0); --color-gray-300: oklch(0.955 0 0); } } } - ในเบราว์เซอร์ที่รองรับจะใช้ OKLCH ส่วนเบราว์เซอร์ที่ไม่รองรับจะใช้สี sRGB(hex)
เครื่องมือ oklch.fyi
- oklch.fyi เป็นเครื่องมือบนเว็บที่มีฟังก์ชันเกี่ยวกับ OKLCH เช่น การสร้างพาเลตสี และการแปลงเป็นตัวแปร CSS
- ช่วยให้การนำสีแบบ OKLCH ไปใช้ในระบบดีไซน์หรือการพัฒนาธีมทำได้ง่ายขึ้น
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
เริ่มสงสัยกับฟีเจอร์ “Better Gradients” อยู่บ้าง OKLCH เป็นสเปซแบบพิกัดเชิงขั้ว และในสเปซนี้ Hue ทำหน้าที่เป็นมุม เมื่อทำ interpolation ระหว่างสีสองจุดที่ต่างกัน เส้นทางจะวิ่งไปตามขอบของวงกลม ตัวอย่างเช่น ถ้าใช้โค้ด
linear-gradient(in oklch, #f0f, #0f0)ระหว่างเขียวกับม่วงจะเห็นชัดว่าสีออกนอกขอบเขตสีที่แสดงได้อย่างเด่นชัด ถ้าหมุนวงกลมไปอีกทิศทางหนึ่งก็จะได้แบบlinear-gradient(in oklch longer hue, #f0f, #0f0)ซึ่งจะผ่านโทน teal หรือ aqua ปัญหานี้แสดงให้เห็นว่าการจัดการกับขอบเขตของสเปซสีเชิงการรับรู้ ไม่ว่าจะเป็น sRGB หรือขอบเขตสีที่มนุษย์มองเห็นได้จริง หรือ gamut นั้นค่อนข้างลำบากมาก ในทางปฏิบัติ แค่ค่าต่างกันเพียงเล็กน้อยสีก็หลุดช่วงได้แล้ว มีอัลกอริทึมหลายแบบที่พยายามแก้เรื่องนี้ แต่ต้องแลกกับความสม่ำเสมอเชิงการรับรู้ ตัวอย่างเช่น สีแดงบนกราเดียนต์จะดูมืดผิดปกติ ถ้าต้องการกราเดียนต์ที่ดีกว่าและให้ความสำคัญกับ perceptual uniformity จริง ๆ อันที่จริงควรใช้งานการ interpolate แบบ Oklab เป็นค่าปริยาย Oklab จะ interpolate เป็นเส้นตรงตัดผ่านวงกลม และถ้าจำเป็นก็อาจผ่านสีเทาได้ (linear-gradient(in oklab, #f0f, #0f0)) วิธีนี้ยังช่วยกำจัดอาการมืดลงแบบที่เห็นบ่อยในการ interpolate แบบ sRGB และให้กราเดียนต์จาก magenta ไป lime ที่เป็นธรรมชาติกว่า อ้างอิงเพิ่มเติมคือ Tailwind v4 เคยใช้ Oklch แทน sRGB ในช่วงเบต้า แต่ตอนออกตัวจริงเลือก Oklab เป็นค่าเริ่มต้นที่ปลอดภัยกว่าผมคิดว่าวิธีที่เบราว์เซอร์ interpolate สีใน sRGB นั้นแทบจะเป็นบั๊กด้วยซ้ำ sRGB เป็นการเข้ารหัสแบบสเกลลอการิทึม ดังนั้นตามสเปกเดิมไม่ควร interpolate สีใน sRGB โดยตรง แต่ควรแปลงเป็น linear RGB ก่อนแล้วจึง interpolate
บทความนี้ถูกแก้ไขแล้ว ดังนั้นจะมองข้ามคอมเมนต์ของผมก็ได้ ถึงอย่างนั้นก็ยังเห็นด้วยว่าควรใช้การ interpolate แบบ Oklab เป็นค่าปริยาย ในบทความเองก็เขียนเรื่อง “กราเดียนต์ที่ดีกว่า” ไว้ว่า hue ของ OKLCH เป็นแบบวงกลม จึงอาจพาไปตามเส้นทางที่คาดไม่ถึง เพื่อหลีกเลี่ยงปัญหานี้ เครื่องมือจำนวนมากจึงใช้ OKLAB และ Oklab ให้ผลลัพธ์สม่ำเสมอด้วยเส้นทางแบบเส้นตรง
ที่จริง CIE LAB ก็ทำหน้าที่แบบเดียวกันและเป็นมาตรฐานที่มีอยู่แล้ว (CIE LAB บนวิกิพีเดีย)
เอกสารทบทวนของ W3C
ขอบคุณสำหรับคำอธิบายที่มีประโยชน์มาก ผมเป็นคนเขียนบทความนี้เอง เดี๋ยวจะปรับเนื้อหาเพื่อให้ชัดเจนขึ้น
การทำกราเดียนต์ด้วยสีสองสีที่อยู่คนละฝั่งของสเปกตรัมเป็นกรณีที่ค่อนข้างสุดโต่งอยู่แล้ว ก็ไม่มีคำตอบที่ถูกต้องตายตัวว่าควรออกมาเป็นอย่างไร และในงานออกแบบจริงก็น่าจะไม่ค่อยมีความจำเป็นต้องใช้กราเดียนต์แบบนั้น ปกติเวลาใช้กราเดียนต์ในงานออกแบบก็มักจะเลือกสีตรงกลางเองอยู่แล้ว
สำหรับ OKLCH นั้น oklch.com ช่วยให้สร้างความเข้าใจเชิงสัญชาตญาณได้ดี แต่ต้องระวังว่า hue ไม่เหมือนกับ hue ใน HSL และค่าสูงสุดของ chroma ก็เปลี่ยนไปตาม hue และ lightness ด้วย นี่ไม่ใช่บั๊ก แต่สะท้อนลักษณะการมองเห็นของมนุษย์และข้อจำกัดของจอแสดงผล ต่างจาก HSL ที่ค่าสูงสุดดูเหมือนคงที่เสมอ แต่ความหมายของสีกลับไม่สม่ำเสมอ จุดเด่นของ OKLCH ใน CSS คือสามารถจัดการในรูปแบบสูตรได้ เช่น
oklch(from var(--accent) calc(l + .1) c h)แต่ถ้าจะใช้สูตรเหล่านี้ให้ดีจริง ๆ ก็ต้องมีความรู้เรื่องทฤษฎีสีหรืออย่างน้อยต้องลองทดสอบ เช่น ตอนแรกผมคิดว่าเงาแค่เปลี่ยน lightness ก็พอ แต่จริง ๆ hue ก็ควรเปลี่ยนด้วย ไม่ได้หมายความว่ากราเดียนต์แบบ OKLCH จะดีที่สุดเสมอไป แม้เวลาสีอยู่ในช่วง hue ใกล้กันจะดูสม่ำเสมอดี แต่ถ้าสนใจว่าการผสมแสงจริง ๆ เปลี่ยนไปทางกายภาพอย่างไร ก็ต้องใช้สเปซสี XYZ แทน เรื่องนี้ดูเพิ่มได้จาก เอกสาร color-mix ของ MDN อ้อ แล้วคำว่า ‘ok’ ก็หมายถึง OK ตรง ๆ จริง ๆ ตั้งชื่อตามความหมายว่า LCH แบบเดิมมีปัญหา คือไม่โอเคนักคุณบอกว่าข้อดีคือ CSS OKLCH เขียนสูตรได้ แต่จริง ๆ การจัดการสีแบบ relative color ใช้ได้กับทุก color space ใน CSS เช่น
background-color: rgb(from var(--base-color) calc(r - 76.5) g calc(b + 76.5));OKLCH กับ relative color ช่วยให้ผมลดจำนวนสีที่ต้อง hardcode ไว้ใน stylesheet ได้มาก
ตัวอย่างตัวแปร CSS
มีข้อวิจารณ์บางส่วนที่ถูกพูดถึงไปแล้ว แต่โดยรวมผมคิดว่านี่เป็นบทความแนะนำ OKLCH และวิธีใช้ใน CSS ที่ค่อนข้างดี คำถามต่อยอดคือช่วงหลัง ๆ ผมเริ่มสงสัยกับเทรนด์การไม่ใส่วันที่ในบล็อกโพสต์ โดยเฉพาะประโยคอย่าง “OKLCH เป็นโมเดลสีใหม่” ที่น่าจะดูล้าสมัยเร็วมาก บนเว็บหลักเขียนแค่ “สิงหาคม 2025” เลยรู้สึกเหมือนตั้งใจหลีกเลี่ยงการใส่วันที่เต็ม
เว็บไซต์ที่เกี่ยวข้อง
อธิบายไม่ถูกนัก แต่ผมคิดว่าบทความไม่มีวันที่เป็นปัญหาร้ายแรง ไม่รู้ว่านี่เป็นเทรนด์จริงไหม แต่พอไม่มีวันที่ก็ทำให้เข้าใจผิดว่าเป็นบทความเก่าได้ง่าย บางครั้งผมต้องเดาปีจาก timestamp ของคอมเมนต์ แต่บล็อกหลายแห่งก็ไม่รองรับคอมเมนต์เลย แบบนั้นยิ่งทำให้ไม่อยากกลับไปดูอีก (ในหน้าแรกของ OP เขียนว่า “ไม่หมกมุ่นกับรายละเอียด” แต่กลับดูหมกมุ่นกับความสวยงามของดีไซน์จนละเลยการใช้งานจริง ซึ่งก็น่าขันดี)
ถ้าบทความไม่มีวันที่ ผมมักจะลองดู
Last-Modifiedheader ตอนดึงเอกสาร HTML ผ่าน HTTP แต่บ่อยครั้งคนเขียนก็ไม่ได้ใส่ใจเรื่องวันที่ อย่างที่ชื่อ blog บอกอยู่แล้ว เดิมทีมันคือ [web]-log ซึ่ง timestamp เป็นองค์ประกอบหลัก แต่หลายคนเหมือนไม่เข้าใจเรื่องนี้ อ้างอิงเพิ่มเติมLast-Modifiedคือเวลาที่รีซอร์ส (HTML) นั้นถูกแก้ไขล่าสุด ถ้าเซิร์ฟเวอร์ไม่ได้ตั้งค่าแคชและ render ใหม่จาก backend ทุกครั้ง ค่านี้ก็อาจเปลี่ยนใหม่ตลอดตัวอย่างปัญหานี้
ส่วนใหญ่เป็นกลยุทธ์ SEO เพื่อหลีกเลี่ยงไม่ให้คอนเทนต์เก่าถูกลดอันดับในเสิร์ชเอนจิน เป็นทริกที่น่ารำคาญมาก
เพราะ Google และ SEO นั่นแหละ
บทความบอกว่า OKLCH ให้สีน้ำเงินที่สม่ำเสมอกว่าเมื่อเทียบกับ HSL แต่ในความเป็นจริงการเปลี่ยนระดับความสว่างใน OKLCH กลับเลื่อนไปทางเขียวค่อนข้างมาก การคง perceptual intensity ให้สม่ำเสมอนั้นเป็นข้อดีชัดเจนก็จริง แต่ผมรู้สึกว่าผลลัพธ์ที่อ้างในที่นี้ถูกพูดเกินจริงไปหน่อย
ถ้าดูกราฟ hue ของสีนี้ก็จะเข้าใจเหตุผล
แผนภูมิสี OKLCH
เมื่อเพิ่มความสว่าง ก็จะทะลุขีดจำกัดของแถบ hue ของสีนั้น และเพราะข้อจำกัดของสีน้ำเงินสว่างที่จอแสดงผลสร้างได้ สีจึงเลื่อนไปทาง cyan OKLCH เวลาปรับความสว่างในกราเดียนต์ไม่ได้คง hue ไว้ แต่คง saturation ไว้แทน จะชอบเอฟเฟกต์นี้หรือไม่ก็เป็นเรื่องรสนิยมทางความงาม แต่หลังจากที่เราใช้เว็บคัลเลอร์แบบ hue คงที่และ desaturated มานาน ความรู้สึกที่ว่า “อย่างน้อยเรามีตัวเลือกว่าจะยอมประนีประนอมแบบไหน” ก็ดูสดใหม่ดี
การถกเถียงบน Hacker News ที่เกี่ยวข้อง
ช่วงหลังวงการวิทยาศาสตร์ก็เพิ่งสร้าง LED สีน้ำเงินที่ลึกกว่าเดิมได้ด้วย เลยหวังว่าอีก 10–20 ปีข้างหน้า ถ้ามีเทคโนโลยีมาแทน Display P3 เราอาจแสดงกราเดียนต์สีน้ำเงินได้แม่นยำขึ้นโดยไม่เกิดอาการ cyan shift แบบนี้ ระหว่างนี้ก็คงต้องยึดตามสิ่งที่ดูดีในเชิงดีไซน์ไปก่อน อีกอย่าง ในอนาคตการออกแบบ color space อาจไม่จำเป็นต้องเลือกแบบแบ่งขั้วระหว่าง hue กับ saturation เสมอไป บางทีอาจคง saturation ไว้จนถึงขีดจำกัดของจอ แล้วค่อยเปลี่ยนไปคง hue แบบค่อยเป็นค่อยไปเมื่อถึงจุดนั้น แต่เรื่องนี้ทำได้ยากมากเพราะข้อจำกัดของ color profile (IDCv4) ถึงอย่างนั้นก็น่าจะสนุกดีถ้าได้ลองทำเป็น target เชิงทดลองใน DisplayCAL
บนจอของผม ตัวอย่างนั้นไม่เห็นอาการเลื่อนไปทางเขียวเลย เลยสงสัยว่าหน้าจอของคุณอาจไม่ได้คาลิเบรตหรือเปล่า
เห็นด้วย สีเปลี่ยนจากน้ำเงินไปเป็น cyan เต็ม ๆ เลย ถ้า OKLCH ถูก implement แบบนี้จริง ผมไม่อยากใช้เด็ดขาด ดูเหมือนจะมีปัญหาร้ายแรงบางอย่างในวิธีคำนวณ hue ส่วน HSL/HSV แม้จะมีปัญหาเรื่อง perceptual lightness แต่ hue เองคงที่ตลอด จึงไม่ต้องแก้อะไร
ผมอาจไม่ค่อยรู้เรื่อง color science และนี่อาจเป็นความเห็นเชิงอัตวิสัย แต่ปลายด้านขวาสุดของสี OKLCH อย่างแย่ที่สุดก็ยังให้ความรู้สึกเป็น blue-green หรือแค่ light blue ขณะที่สองสีที่สว่างสุดของ HSL กลับไม่ดูเป็นสีน้ำเงินเลย สีรองจากขวาสุดดูเหมือน light purple มากกว่า และสีขวาสุดแทบจะเป็นสีเทา ในคำบรรยายบอกว่าด้านมืดของ HSL ออก grayish แต่สำหรับผมจริง ๆ แล้วซ้ายสุดที่มืดที่สุดทั้ง OKLCH และ HSL ก็ยังให้ความรู้สึกเป็นน้ำเงินเหมือนกัน ถ้าใช้ macOS Digital Color Meter วัด จะเห็นว่าค่า green ของสีขวาสุดใน OKLCH และ HSL แทบเท่ากัน (226 กับ 227 หรือใน sRGB คือ 228 กับ 227)
ขอแนะนำบทความที่ดีกว่าเกี่ยวกับหัวข้อนี้
OKLCH in CSS: Why quit RGB, HSL ของ Evil Martians
เครื่องมือแปลง OKLCH ที่ลองใช้ได้
การถกเถียงบน Hacker News ก่อนหน้านี้ (6 เดือนก่อน, 30 คอมเมนต์)
OKLCH สร้างบนพื้นฐานของ OKLab (สเปซสีแบบ perceptual uniform) และเป็นโมเดลที่ใช้ปรับ Lightness (ความสว่าง), Chroma (ความอิ่มสี), และ Hue (เฉดสี) โดยคำว่า ‘OK’ มาจากการที่ผู้สร้างตอบว่ามัน “ใช้งานได้โอเคประมาณหนึ่ง”
ตอนทำงานกับสี รวมถึงข้อความและโลโก้ ผมคิดว่าควรคำนึงถึงคอนทราสต์และความอ่านง่ายด้วยเสมอ
APCA Contrast
เช็กคอนทราสต์ (WCAG 2)
และยังมีเครื่องมืออื่นอีกหลากหลาย
ในหัวผม ชื่อ OKLCH ถูกตีความเป็น "Oklachroma" ไปเองโดยธรรมชาติ
มีบล็อกโพสต์ต้นฉบับที่แนะนำ color space แบบ OKLab ซึ่งน่าสนใจในเชิงประวัติศาสตร์
โพสต์ต้นฉบับของ OKLab
ผมสงสัยว่าทำไมสูตรแปลงไปเป็น color space แบบ OKLCH ถึงไม่ค่อยถูกทำเอกสารไว้เลย ลองค้นใน Google ก็เจอแค่ Gist เดียว[0] ส่วน Oklab มีในวิกิพีเดีย[1]
ตัวอย่างสูตรแปลงใน Gist
Oklab บนวิกิพีเดีย
หัวใจของการแปลงอยู่ที่เมทริกซ์ระหว่าง Oklab กับ sRGB ส่วนการแปลง OKLab-OKLCH เองเป็นแค่การแปลงพิกัด ซึ่งมีอยู่ในวิกิพีเดียแล้ว
OKLCH และ OKLab เป็น color space เดียวกัน ต่างกันแค่วิธีแสดงผลแบบพิกัดฉาก (OKLab) กับพิกัดเชิงขั้ว (OKLCH)