ข้ามไปยังเนื้อหา

เกี่ยวกับ Grabient

Grabient สร้างไล่เฉดสีจากคีย์เฟรม: สี 2 ถึง 8 สีที่เชื่อมกันด้วยเส้นโค้งเรียบ

1 · คีย์เฟรม

คีย์เฟรมคือสีที่คุณเลือก เช่นเดียวกับในงานแอนิเมชัน คุณตั้งไว้ไม่กี่อัน แล้วสีระหว่างคีย์เฟรมจะถูกเติมให้ พาเลตต์หนึ่งมีคีย์เฟรม 2 ถึง 8 อัน วางห่างเท่า ๆ กันตามแนวไล่เฉดสี และไล่เฉดสีผ่านคีย์เฟรมทุกอัน:


ความสว่างเริ่มต้น
ความสว่างสิ้นสุด
10

โครมา
0.300

เฉดสี
ระยะทาง
90°-90°

จุดคือคีย์เฟรม กราฟแสดงความสว่าง โครมา และเฉดสีตามแนวไล่เฉดสี ลากจุดเพื่อเปลี่ยนคีย์เฟรม

คีย์เฟรมแต่ละอันคือตัวเลขสามตัวใน OKLCH ความสว่าง L มีค่าตั้งแต่ 0 (ดำ) ถึง 1 (ขาว) โครมา C คือความสดของสี: 0 คือสีเทา และสีที่สดที่สุดบนหน้าจออยู่ที่ประมาณ 0.3 เฉดสี H คือมุมบนวงล้อสี มีหน่วยเป็นองศา

2 · สูตรคำนวณ

ความสว่าง โครมา และเฉดสีต่างมีเส้นโค้งของตัวเอง ซึ่งวาดไว้ในกราฟด้านบน เส้นโค้งแต่ละเส้นผ่านคีย์เฟรมและโค้งอย่างนุ่มนวลระหว่างคีย์เฟรม สี ณ จุดใดก็ตามคือค่าที่อ่านได้จากเส้นโค้งทั้งสามที่จุดนั้น

ไล่เฉดสีของ CSS และ Figma เชื่อมจุดสีด้วยเส้นตรง จึงอาจเห็นขอบจาง ๆ ตรงที่การไล่สีเปลี่ยนจังหวะ

ในสูตร t มีค่าตั้งแต่ 0 ที่จุดเริ่มต้นของไล่เฉดสีไปจนถึง 1 ที่ปลาย เมื่อมีคีย์เฟรม K อัน คีย์เฟรม i จะอยู่ที่ t = i / (K − 1) โดยนับจาก 0 เส้นโค้งแต่ละเส้นเป็นสไปลน์ Catmull–Rom และ gamut() ปรับสีให้พอดีกับหน้าจอ (หัวข้อที่ 6):

color(t) = gamut( L(t), C(t), H(t) )

// one axis: a Catmull–Rom spline through K evenly spaced valuesconst { min, max, floor } = Math;function spline(v, t) {  const K = v.length, x = min(max(t, 0), 1) * (K - 1);  const i = min(K - 2, floor(x)), u = x - i;  const p0 = v[max(i - 1, 0)], p1 = v[i];  const p2 = v[i + 1], p3 = v[min(i + 2, K - 1)];  return p1 + 0.5 * u * (p2 - p0    + u * (2*p0 - 5*p1 + 4*p2 - p3    + u * (3*(p1 - p2) + p3 - p0)));}// the color at t from the keyframes' L, C and H. A spline can overshoot// between keyframes, so L is kept in 0..1 and C at 0 or more. The// browser fits an oklch() color to the screen (section 6).function color(L, C, H, t) {  const l = min(max(spline(L, t), 0), 1), c = max(spline(C, t), 0);  return `oklch(${l} ${c} ${spline(H, t)})`;}

3 · จำนวนสี

ในการวาดภาพไล่เฉดสี Grabient จะดึงสีจากจุดที่ห่างเท่า ๆ กัน สีแรกและสีสุดท้ายคือคีย์เฟรมแรกและคีย์เฟรมสุดท้าย สไตล์ไล่เฉดสีใช้สีเหล่านี้เป็นจุดสี สไตล์แถบสีแสดงแต่ละสีเป็นแถบสีทึบ จำนวนสีไม่น้อยกว่าจำนวนคีย์เฟรมเสมอ:

พาเลตต์เดียวกันแบบ 7 สี จุดแสดงตำแหน่งคีย์เฟรม
จำนวนสี

4 · ทำไมต้อง OKLCH

RGB และ HSL อธิบายว่าหน้าจอผสมแสงอย่างไร และตัวเลขของทั้งสองมักไม่ตรงกับสิ่งที่เราเห็น สีเหลืองล้วนและสีน้ำเงินล้วนมีความสว่างใน HSL เท่ากันที่ 50% แต่สีเหลืองดูสว่างกว่ามาก OKLCH ให้ค่า 0.97 และ 0.45 ปริภูมินี้คือ OKLab ของ Björn Ottosson ในรูปพิกัดเชิงขั้ว ซึ่งสร้างขึ้นให้การเปลี่ยนตัวเลขที่เท่ากันดูเท่ากัน สองสีที่ผสมด้วยทั้งสองวิธี:

สีเขียวผสมกับสีบานเย็นใน RGB (บน) และ OKLCH (ล่าง) การผสมแบบ RGB จะออกสีเทาตรงกลาง

เนื่องจากความสว่าง โครมา และเฉดสีแยกจากกัน การเปลี่ยนเฉดสีของคีย์เฟรมจึงคงความสว่างไว้

5 · เฉดสีที่เกิน 360°

ระหว่างเฉดสีสองค่า ไล่เฉดสีไปได้ทั้งสองทางรอบวงล้อสี และเครื่องมือส่วนใหญ่เลือกทางที่สั้นกว่า Grabient ให้เฉดสีนับเกิน 360° ได้: 690° คือสีเดียวกับ 330° หลังวนไปอีกหนึ่งรอบ ไล่เฉดสีจะไปจนครบทั้งระยะ:

แถบทั้งสองจบที่สีเดียวกัน บน: เฉดสี 210° ถึง 330° ล่าง: 210° ถึง 690° วนเพิ่มอีกหนึ่งรอบ

ระยะทางของพาเลตต์คือเฉดสีสุดท้ายลบเฉดสีแรก นับรวมรอบที่วน สายรุ้งเต็มวงจึงมีระยะทาง 360° คีย์เฟรมที่อยู่ติดกันห่างกันได้สูงสุด 540°

6 · สีที่หน้าจอแสดงไม่ได้

OKLCH สามารถระบุสีที่สดเกินกว่าที่หน้าจอจะแสดงได้ สำหรับสีเหล่านั้น Grabient จะคงความสว่างและเฉดสีไว้ แล้วลดโครมาลงจนสีพอดีกับหน้าจอ: sRGB บนหน้าจอทั่วไป และ Display P3 บนหน้าจอที่มีขอบเขตสีกว้าง CSS Color 4 ก็ทำแบบเดียวกันกับสี oklch():

โครมา
0.350
เส้นประ: โครมาที่กำหนด เส้นทึบ: โครมาที่หน้าจอแสดงได้ ลากเส้นเพื่อเพิ่มหรือลดโครมาที่กำหนด

7 · สูตรพาเลตต์

พาเลตต์บางอันกับเส้นโค้งที่สร้างพาเลตต์เหล่านั้น:

พระอาทิตย์ตก: ความสว่างลดลงจาก 0.86 เหลือ 0.32 โครมาขึ้นสูงสุดที่ 0.19 และเฉดสีเปลี่ยนจากเหลืองไปเป็นแดงเลือดนกแก้ไข
สเปกตรัม: คีย์เฟรมสองอันที่มีความสว่างและโครมาเท่ากัน และเฉดสีที่มีระยะทาง 360°แก้ไข
ดูโอโทน: คีย์เฟรมสองอันที่ความสว่างห่างกันมาก (0.92 และ 0.22) และเฉดสีห่างกัน 130°แก้ไข
พาสเทล: ความสว่างสูง (ตั้งแต่ 0.87 ขึ้นไป) และโครมาต่ำ (ไม่เกิน 0.06)แก้ไข
โทนเทา: โครมา 0 ที่ทุกคีย์เฟรมแก้ไข

“กลับลำดับ” เรียงคีย์เฟรมในลำดับย้อนกลับ ส่วน “กลับสี” สร้างภาพเนกาทีฟ: ความสว่าง L แต่ละค่ากลายเป็น 1 − L และเฉดสีแต่ละค่าหมุนไป 180°

8 · รหัสพาเลตต์

ที่อยู่ของพาเลตต์แต่ละอันมีรหัสพาเลตต์อยู่ด้วย ซึ่งเป็นรหัสสั้น ๆ ของคีย์เฟรม รหัสของรูปแรกคือ kW6iw33i87sY6O2wq7rmZ07I

รหัสพาเลตต์คือ k ตามด้วยคีย์เฟรมที่อัดเป็นบิต: ความสว่าง 8 บิต โครมา 8 บิต เฉดสีแรก 9 บิต จากนั้นเฉดสีถัดไปอันละ 10 บิต โดยเก็บเป็นค่าที่เปลี่ยนไปจากอันก่อนหน้า:

คีย์เฟรมสองอันได้รหัสพาเลตต์ยาว 11 ตัวอักษร และแปดอันได้รหัสยาว 37 ตัวอักษร พาเลตต์แต่ละอันมีรหัสเพียงหนึ่งเดียว

คีย์เฟรมที่ตั้งจากสี hex จะเก็บสีนั้นไว้ตรงตามเดิมใน 24 บิต รหัสพาเลตต์แบบนี้ยาว 9 ถึง 50 ตัวอักษร