على جهاز التجارب في عرب رووت شاشة LG بدقة 4K تعلن أنها تدعم 60 إطاراً في الثانية، وعندما قرأنا الوضع الذي تعمل به فعلاً وجدنا سطراً لا ينتبه إليه أحد: الشاشة تعمل بتردد 30 Hz تقريباً، أي نصف ما تستطيع، والسبب لم يكن في الشاشة نفسها، وإنما في أنها موصلة بمنفذ HDMI لا يستطيع أن يحمل 4K بسرعة 60 Hz. وهذا النوع من المشاكل، ومعه أسئلة مثل لماذا تظهر العربية بحواف ملونة تحت العدسة، ولماذا تحترق شاشات OLED، ولماذا تتمزق الصورة في الألعاب، كلها تفهمها إذا عرفت ما الذي يحدث للصورة من لحظة أن ترسمها بطاقة الرسومات إلى أن تصل إلى عينك.
وهذا المقال من مرحلة العتاد Hardware في خارطة عرب رووت، وقد رأينا في مقال كيف يعمل المعالج من الداخل أن بطاقة الرسومات ووحدة العرض موجودتان داخل شريحة المعالج نفسها في كثير من الأجهزة، ورأينا في مقال Hello World من الداخل كيف تتحول البايتات إلى أشكال حروف تكتب في ذاكرة الإطار Frame Buffer، وهنا نكمل من تلك النقطة. وسوف نناقش في هذا المقال ما يلي:
- البكسل Pixel والبكسلات الفرعية Subpixels، والدقة Resolution وكثافة البكسل PPI، بصور حقيقية لشاشات تحت العدسة.
- مسار الإطار الواحد: من بطاقة الرسومات إلى ذاكرة الإطار ووحدة العرض والكابل ومتحكم التوقيت في الشاشة ثم البكسلات.
- كم يحتاج الكابل من سعة: حساب 4K بسرعة 60 Hz بعمق 8 بت و10 بت ومقارنته بحدود HDMI وDisplayPort، مع قراءة معلومات الشاشات من Windows.
- شاشة LCD مفككة طبقة طبقة، والفرق بين IPS وVA وTN.
- شاشة OLED، ولماذا يكون الأسود فيها أسود فعلاً، وما هو الاحتراق Burn-in.
- معدل التحديث Refresh Rate ومعدل الإطارات Frame Rate، والتمزق Tearing وV-Sync والتحديث المتغير VRR.
- عمق الألوان Colour Depth وأساسيات HDR.
- لماذا تظهر حواف النص ملونة تحت العدسة، وما الذي يحدث للعربية قبل أن ترسم.
البكسل والبكسلات الفرعية
الصورة على أي شاشة حديثة شبكة من نقاط صغيرة تسمى البكسلات Pixels، وكل بكسل ليس ضوءاً واحداً وإنما ثلاثة أضواء صغيرة متجاورة: أحمر وأخضر وأزرق، تسمى البكسلات الفرعية Subpixels، وكل واحد منها لا يغير لونه أبداً، وإنما يغير شدة إضاءته فقط، والعين من بعيد تخلط الثلاثة فترى لوناً واحداً. فإذا أردت بكسلاً برتقالياً أضاء الأحمر بأقصى شدته 255، والأخضر بشدة 140، وأطفئ الأزرق، وهذه الأرقام الثلاثة هي ما يحفظه البرنامج لكل بكسل، كل رقم في بايت واحد كما شرحنا في مقال الأنظمة العددية. والصورة التالية تبين ذلك بالرسم أولاً ثم بصورتين حقيقيتين لشاشتين تحت العدسة:

في الصورة أعلاه لاحظ التالي:
- شاشة بدقة 1920 × 1080 فيها نحو مليوني بكسل، أي أكثر من ستة ملايين بكسل فرعي، وشاشة 4K بدقة 3840 × 2160 فيها نحو 8.3 مليون بكسل، أي نحو 25 مليون بكسل فرعي، وكل واحد منها يجب أن تحدد شدته عشرات المرات في الثانية.
- بثمانية بتات لكل لون يكون لكل بكسل فرعي 256 مستوى، والمجموع 256 × 256 × 256، أي نحو 16.7 مليون لون.
- في صورة IPS LCD تجد البكسلات الفرعية في خطوط منتظمة، لأن الضوء يأتي من خلفها ويمر عبر مرشح ألوان، أما في صورة OLED فالترتيب مختلف، لأن كل بكسل فرعي يصنع ضوءه بنفسه كما سوف نرى في جزء OLED.
الدقة وكثافة البكسل PPI
الدقة Resolution هي عدد البكسلات في العرض والارتفاع، ولكنها وحدها لا تخبرك كم ستكون الصورة حادة، لأن نفس العدد على شاشة أكبر يعني بكسلات أكبر. والرقم الذي يربط الاثنين هو كثافة البكسل PPI، اختصاراً لـ Pixels Per Inch، أي عدد البكسلات في كل بوصة، وتحسبها بقسمة عدد البكسلات على القطر على طول القطر بالبوصة. والصورة التالية تبين ثلاث شاشات بنفس الحجم 27 بوصة وبدقات مختلفة:

فشاشة 27 بوصة بدقة 1920 × 1080 كثافتها 81.6 فقط، فترى الحواف المسننة للحروف من مسافة المكتب العادية، ونفس الحجم بدقة 4K كثافته 163.2، أي أن البكسل أصغر بمرتين في كل اتجاه. والشاشة في جهاز التجارب تخبر Windows أن مقاسها 70 × 40 سم كما سوف ترى في التجربة، أي قطر نحو 31.7 بوصة، فكثافتها بدقة 4K نحو 139. وهذا هو السبب في أن Windows يكبر الواجهة على الشاشات عالية الكثافة بنسبة مثل 150%، فالبرنامج يرسم بنفس الحجم الظاهري ولكن بعدد بكسلات أكبر، فيكون النص أنعم وليس أصغر.
من بطاقة الرسومات إلى عينك
عندما يتغير شيء على الشاشة، سواء حرف كتبته أو إطار في فيديو، فهو يمر بنفس الطريق في كل مرة، والصورة التالية تبين هذا الطريق في سبع خطوات:

- الرسم: بطاقة الرسومات GPU ترسم الإطار الكامل، أي تحسب لون كل بكسل، وتكتبه في ذاكرة الإطار Frame Buffer. وحجم هذه الذاكرة لشاشة 4K بأربعة بايتات لكل بكسل نحو 33 مليون بايت للإطار الواحد، والبطاقة المنفصلة تحفظها في ذاكرتها الخاصة VRAM، أما البطاقة المدمجة في المعالج مثل التي في جهاز التجارب فتستخدم جزءاً من RAM.
- القراءة: وحدة العرض Display Engine تقرأ ذاكرة الإطار سطراً بعد سطر بنفس سرعة الشاشة، فلشاشة 4K بسرعة 60 Hz تقرأ نحو ملياري بايت في الثانية حتى لو لم يتغير شيء في الصورة، وتضيف بين الأسطر والإطارات فترات فارغة تسمى فترات الإطفاء Blanking، وهي من أيام شاشات CRT وما زالت جزءاً من التوقيت ويستخدمها الكابل لنقل الصوت وغيره.
- الترميز: منفذ HDMI أو DisplayPort يحول البتات إلى إشارات على أسلاك الكابل بطريقة ترميز تضيف بتات إضافية للتحكم ولحماية الإشارة.
- الكابل: وهنا الحد الذي يتجاهله كثيرون، فلكل منفذ وكابل سعة قصوى بالجيجابت في الثانية، وإذا كان ما تطلبه الصورة أكبر منها فلن تحصل عليه، وهو موضوع الجزء التالي.
- الاستقبال والتحجيم: الشاشة تستقبل الإشارة، وإذا كانت الدقة المرسلة أقل من دقة اللوحة كبرتها وحدة التحجيم Scaler، وهي التي ترسم أيضاً قائمة إعدادات الشاشة.
- متحكم التوقيت TCON: اختصاراً لـ Timing Controller، وهو يوزع قيم كل سطر على مشغلات الأعمدة Column Drivers، ويفتح الصفوف واحداً بعد الآخر عبر مشغلات الصفوف Row Drivers.
- البكسلات: في كل بكسل فرعي ترانزستور صغير يأخذ قيمته ويحتفظ بها حتى الإطار التالي، فتظهر الصورة.
كم يحتاج 4K من الكابل؟
لنحسب بأنفسنا ما تحتاجه شاشة 4K بسرعة 60 Hz. والحل البسيط أن تضرب عدد البكسلات في عدد الإطارات في عدد البتات: 3840 × 2160 × 60 × 24 بت، أي نحو 11.94 جيجابت في الثانية، ولكن هذا الرقم ناقص لأنه يتجاهل فترات الإطفاء التي رأيناها في الخطوة الثانية. والرقم الصحيح يأتي من ساعة البكسل Pixel Clock التي تعلنها الشاشة نفسها لهذا الوضع، وهي 594 MHz لشاشة جهاز التجارب كما سوف ترى في التجربة، أي 9.9 مليون نقطة لكل إطار بدل 8.29 مليون بكسل ظاهر. والكود التالي يحسب الحالتين بعمق 8 بت و10 بت لكل لون، ويقارنهما بسعة كل منفذ بعد طرح تكلفة الترميز:
// bandwidth.mjs: how many Gbps does 3840x2160 at 60 Hz need, and which cable can carry it?
const w = 3840, h = 2160, hz = 60;
const pixelClock = 594e6; // from the monitor's own mode list (includes the blanking)
const links = [ // payload after 8b/10b line coding (80%), in Gbps
['HDMI 1.4 (10.2 Gbps, TMDS 8b/10b)', 10.2 * 0.8],
['HDMI 2.0 (18 Gbps, TMDS 8b/10b)', 18 * 0.8],
['DP 1.4 (32.4 Gbps, 8b/10b)', 32.4 * 0.8],
['HDMI 2.1 (48 Gbps, raw, FRL) ', 48], // raw link rate: its own line coding is not subtracted here
];
console.log(`active pixels per frame: ${(w * h).toLocaleString('en')}`);
console.log(`pixels per frame with blanking: ${(pixelClock / hz).toLocaleString('en')}`);
for (const bpc of [8, 10]) {
const bpp = bpc * 3; // RGB 4:4:4, no compression
const active = w * h * hz * bpp / 1e9;
const withBlank = pixelClock * bpp / 1e9;
console.log(`\n${bpc}-bit per colour (${bpp} bits per pixel)`);
console.log(` pixels only: ${active.toFixed(2)} Gbps`);
console.log(` with blanking: ${withBlank.toFixed(2)} Gbps`);
for (const [name, payload] of links)
console.log(` ${name}: payload ${payload.toFixed(2).padStart(5)} Gbps -> ${withBlank <= payload ? 'fits' : 'does NOT fit'}`);
}node bandwidth.mjsوالمخرج سوف يكون كما يلي:
active pixels per frame: 8,294,400
pixels per frame with blanking: 9,900,000
8-bit per colour (24 bits per pixel)
pixels only: 11.94 Gbps
with blanking: 14.26 Gbps
HDMI 1.4 (10.2 Gbps, TMDS 8b/10b): payload 8.16 Gbps -> does NOT fit
HDMI 2.0 (18 Gbps, TMDS 8b/10b): payload 14.40 Gbps -> fits
DP 1.4 (32.4 Gbps, 8b/10b): payload 25.92 Gbps -> fits
HDMI 2.1 (48 Gbps, raw, FRL) : payload 48.00 Gbps -> fits
10-bit per colour (30 bits per pixel)
pixels only: 14.93 Gbps
with blanking: 17.82 Gbps
HDMI 1.4 (10.2 Gbps, TMDS 8b/10b): payload 8.16 Gbps -> does NOT fit
HDMI 2.0 (18 Gbps, TMDS 8b/10b): payload 14.40 Gbps -> does NOT fit
DP 1.4 (32.4 Gbps, 8b/10b): payload 25.92 Gbps -> fits
HDMI 2.1 (48 Gbps, raw, FRL) : payload 48.00 Gbps -> fitsوالصورة التالية ترسم نفس الأرقام:

في الكود والمخرج والصورة أعلاه لاحظ التالي:
- سعة كل منفذ: تذكر HDMI Licensing Administrator أن كابلات Premium High Speed اختبرت لسعة 18 Gbps التي تحتاجها منتجات 4K بسرعة 60 Hz في HDMI 2.0، وأن كابل Ultra High Speed جاء مع HDMI 2.1 لسعة تصل إلى 48 Gbps، وأن HDMI 2.2 الجديدة ترفعها إلى 96 Gbps. أما DisplayPort فتذكر VESA سعة 32.4 Gbps لمنفذ DisplayPort 1.4، وتذكر في أسئلتها الشائعة أن DisplayPort 2.1 تصل إلى 80 Gbps بسرعة UHBR20.
- تكلفة الترميز: HDMI حتى الإصدار 2.0 يستخدم ترميز TMDS، وفيه ترسل كل نبضة من ساعة البكسل عشر بتات على كل خط لكل ثماني بتات من البيانات، كما تبين ورقة بيانات دارة TMDS181 من Texas Instruments التي تعمل حتى 6 Gbps لكل خط في HDMI 2.0 و340 MHz لساعة HDMI 1.4، لذلك يكون المفيد 80% من السعة، ونفس النسبة في DisplayPort 1.4 كما تذكر VESA أن ترميز 8b/10b تكلفته 20%، بينما ترميز 128b/132b في DisplayPort 2.1 تكلفته نحو 3%. أما HDMI 2.1 فله ترميز مختلف لم نطرحه في الحساب.
- النتيجة: 4K بسرعة 60 Hz بعمق 8 بت تحتاج 14.26 Gbps، فتدخل في HDMI 2.0 بالكاد، أما بعمق 10 بت الذي يحتاجه HDR فتحتاج 17.82 Gbps، فلا تدخل في HDMI 2.0 إلا بتقليل عينات الألوان Chroma Subsampling مثل 4:2:2، ولكنها تدخل بسهولة في DisplayPort 1.4 وHDMI 2.1.
التجربة: لماذا كانت شاشتنا تعمل بتردد 30 Hz؟
الآن لنرجع إلى المشكلة التي بدأنا بها. في Windows تقرأ معلومات بطاقة الرسومات من الصنف Win32_VideoController، ومعلومات كل شاشة من أصناف WMI التي تقرأ ما تعلنه الشاشة عن نفسها في بيانات EDID: الاسم من WmiMonitorID، ونوع التوصيل من WmiMonitorConnectionParams وقيمه في تعداد D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY حيث 5 تعني HDMI و10 تعني DisplayPort، والأوضاع التي تدعمها مع ساعة البكسل من WmiMonitorListedSupportedSourceModes، أما الوضع الذي تعمل به الشاشة الآن فنقرؤه بالدالة EnumDisplaySettings. والسكربت التالي يجمع كل ذلك:
# display-info.ps1: the graphics card, the monitors, how each one is connected, and the mode it runs now
Get-CimInstance Win32_VideoController | Select-Object Name, DriverVersion, AdapterRAM | Format-List
$tech = @{ 0 = 'VGA'; 4 = 'DVI'; 5 = 'HDMI'; 10 = 'DisplayPort'; 11 = 'DisplayPort (embedded)' }
$conn = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorConnectionParams
$size = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorBasicDisplayParams
$modes = Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorListedSupportedSourceModes
Get-CimInstance -Namespace root\wmi -ClassName WmiMonitorID | ForEach-Object {
$id = $_.InstanceName
$best = ($modes | Where-Object InstanceName -eq $id).MonitorSourceModes |
Sort-Object { $_.HorizontalActivePixels * $_.VerticalActivePixels }, { $_.VerticalRefreshRateNumerator / $_.VerticalRefreshRateDenominator } | Select-Object -Last 1
[pscustomobject]@{
Monitor = (($_.ManufacturerName -ne 0 | ForEach-Object { [char]$_ }) -join '') + ' ' + (($_.UserFriendlyName -ne 0 | ForEach-Object { [char]$_ }) -join '')
Connected = $tech[[int]($conn | Where-Object InstanceName -eq $id).VideoOutputTechnology]
SizeCm = '{0} x {1}' -f ($size | Where-Object InstanceName -eq $id).MaxHorizontalImageSize, ($size | Where-Object InstanceName -eq $id).MaxVerticalImageSize
BestMode = '{0}x{1} @ {2:N2} Hz, pixel clock {3} MHz' -f $best.HorizontalActivePixels, $best.VerticalActivePixels, ($best.VerticalRefreshRateNumerator / $best.VerticalRefreshRateDenominator), ($best.PixelClockRate / 1e6)
}
} | Format-List
# the mode each screen runs right now (EnumDisplaySettings from user32.dll)
Add-Type -TypeDefinition @'
using System; using System.Runtime.InteropServices;
public static class Screens {
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
struct DEVMODE { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Name; public short a, b, Size, Extra; public int Fields, X, Y, Orient, Fixed;
public short c1, c2, c3, c4, c5; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string Form; public short LogPixels;
public int Bits, Width, Height, Flags, Hz, i1, i2, i3, i4, r1, r2, p1, p2; }
[DllImport("user32.dll", CharSet = CharSet.Unicode)] static extern bool EnumDisplaySettings(string dev, int mode, ref DEVMODE dm);
public static string Now(string dev) { var m = new DEVMODE(); m.Size = (short)Marshal.SizeOf(typeof(DEVMODE));
EnumDisplaySettings(dev, -1, ref m); return dev + ": " + m.Width + "x" + m.Height + " @ " + m.Hz + " Hz, " + m.Bits + " bits per pixel"; }
}
'@
'\\.\DISPLAY1', '\\.\DISPLAY2' | ForEach-Object { [Screens]::Now($_) }powershell -NoProfile -ExecutionPolicy Bypass -File display-info.ps1والمخرج سوف يكون كما يلي، بعد حذف الأسطر الفارغة:
Name : Intel(R) HD Graphics 630
DriverVersion : 31.0.101.2140
AdapterRAM : 1073741824
Monitor : HJW VGA TO HDMI
Connected : DisplayPort
SizeCm : 51 x 29
BestMode : 1920x1080 @ 60.00 Hz, pixel clock 148.5 MHz
Monitor : GSM LG HDR 4K
Connected : HDMI
SizeCm : 70 x 40
BestMode : 3840x2160 @ 60.00 Hz, pixel clock 594 MHz
\\.\DISPLAY1: 1920x1080 @ 60 Hz, 32 bits per pixel
\\.\DISPLAY2: 3840x2160 @ 29 Hz, 32 bits per pixelفي المخرج أعلاه لاحظ التالي:
- بطاقة الرسومات هي Intel HD Graphics 630 المدمجة في معالج Core i7-7700K، وهي نفس الشريحة التي فتحناها في مقال المعالج، والرقم
AdapterRAMجزء من RAM مخصص لها وليس ذاكرة منفصلة. - الشاشة الأولى اسمها في بيانات EDID هو
VGA TO HDMI، أي أن ما يرد على الحاسب هو محول بين المنفذ والشاشة وليس الشاشة نفسها، وهذا يحدث كثيراً مع المحولات، فلا تثق باسم الشاشة في هذه الحالة. - الشاشة الثانية هي LG بدقة 4K، وأفضل وضع تعلنه هو 3840 × 2160 بسرعة 60 Hz بساعة بكسل 594 MHz، وهو الرقم الذي استخدمناه في الحساب، ومقاسها 70 × 40 سم.
- ولكنها تعمل الآن بسرعة
29 Hz، أي 29.97 Hz مقربة إلى رقم صحيح، والسبب في السطرConnected : HDMI: فهذه البطاقة تذكر صفحتها عند Intel أن أقصى ما تخرجه من HDMI هو 4096 × 2304 بسرعة 24 Hz، بينما تخرج من DisplayPort نفس الدقة بسرعة 60 Hz، ومنفذ HDMI فيها من مستوى HDMI 1.4 الذي تذكر صفحة مواصفاته أن 3840 × 2160 فيه بسرعة 24 و25 و30 Hz فقط، وهذا يطابق حسابنا: 8.16 Gbps لا تكفي ل 14.26 Gbps. - والحل لم يكن كابلاً أغلى، فكابل HDMI أفضل لن يغير شيئاً لأن المنفذ نفسه هو الحد، وإنما توصيل الشاشة بمنفذ DisplayPort، أو استخدام بطاقة رسومات منفذها HDMI 2.0 أو أحدث.
شاشة LCD من الداخل
أغلب شاشات الحاسب والسيرفرات من نوع LCD، اختصاراً لـ Liquid Crystal Display، وفكرتها التي قد تبدو غريبة أول مرة أن الضوء فيها يعمل دائماً، وأن البكسل لا يصنع ضوءاً وإنما يقرر كم يمرر من الضوء الذي خلفه. والصورة التالية تبين الشاشة مفككة من الخلف إلى الأمام:

- الإضاءة الخلفية Backlight: مصابيح LED بيضاء ولوح ينشر ضوءها بالتساوي خلف الشاشة كلها، وهي تعمل طالما الشاشة تعمل.
- المرشح المستقطب الخلفي Polarizer: لا يمرر من الضوء إلا ما يهتز في اتجاه واحد.
- زجاج الترانزستورات TFT: اختصاراً لـ Thin-Film Transistor، وعليه ترانزستور لكل بكسل فرعي يضع عليه جهداً كهربائياً بحسب القيمة التي وصلت من متحكم التوقيت.
- البلور السائل Liquid Crystal: جزيئات طويلة تدير اتجاه اهتزاز الضوء الذي يمر بها، ومقدار الإدارة يتغير بحسب الجهد.
- مرشح الألوان Colour Filter: مربع أحمر أو أخضر أو أزرق فوق كل بكسل فرعي، وهو الذي يجعل البكسل الفرعي أحمر أو أخضر أو أزرق.
- المرشح المستقطب الأمامي: اتجاهه عمودي على الخلفي، فلا يمرر إلا الضوء الذي أداره البلور السائل، وبمقدار الإدارة تتحدد شدة البكسل الفرعي.
ومن هذا الترتيب تفهم أهم نقطة ضعف في LCD: الأسود ليس انطفاء، وإنما محاولة لحجب ضوء يعمل خلفه، والحجب لا يكون كاملاً أبداً، لذلك يظهر الأسود في غرفة مظلمة رمادياً داكناً.
IPS وVA وTN: ثلاث طرق لترتيب البلور السائل
الفرق بين أنواع لوحات LCD هو كيف ترتب جزيئات البلور السائل وكيف تتحرك عندما يوضع عليها الجهد، كما يشرح مقال HDMI Licensing Administrator عن أنواع اللوحات، والصورة التالية تبين الثلاثة من الجانب:

| النوع | ترتيب الجزيئات | نقاط القوة | نقاط الضعف |
|---|---|---|---|
| TN (Twisted Nematic) | ملتوية، وتقف مع الجهد | الأرخص في التصنيع والأسرع استجابة | زاوية رؤية ضيقة تتغير فيها الألوان، وتباين محدود |
| IPS (In-Plane Switching) | موازية للزجاج، وتدور في نفس المستوى | أفضل دقة ألوان وأوسع زاوية رؤية | توهج الإضاءة الخلفية عند النظر من الجانب IPS Glow، وتباين أقل من VA |
| VA (Vertical Alignment) | عمودية على الزجاج، وتميل مع الجهد | أعلى تباين وأسود أعمق | استجابة أبطأ تظهر كضبابية وظلال في الحركة السريعة |
والخلاصة العملية: لشاشة عمل تقرأ فيها الكود وتعدل الصور اختر IPS، ولمشاهدة الأفلام في غرفة مظلمة يتفوق VA بتباينه، وTN يناسب الميزانية المحدودة أو من يريد أسرع استجابة.
شاشة OLED: كل بكسل فرعي مصباح
في شاشة OLED، اختصاراً لـ Organic Light-Emitting Diode، لا توجد إضاءة خلفية، وإنما كل بكسل فرعي مادة عضوية تصدر الضوء بنفسها عندما يمر فيها التيار، والترانزستور تحتها يحدد كم يمر من التيار. والصورة التالية تقارن الطريقتين وتبين المشكلة الخاصة بال OLED:

في الصورة أعلاه لاحظ التالي:
- الأسود الحقيقي: البكسل الأسود في OLED مطفأ تماماً، فلا يصدر ضوءاً، ولذلك يكون التباين كبيراً جداً، وتبدو الصورة في الغرفة المظلمة أعمق بكثير من LCD.
- الاحتراق Burn-in: المادة العضوية تتآكل كلما أضاءت، فإذا عرضت نفس العنصر الساطع في نفس المكان مدة طويلة، مثل شريط المهام أو شعار قناة، تآكلت بكسلاته أكثر من غيرها، فيظهر أثره خفيفاً فوق أي صورة أخرى. وتفرق صفحة دعم Apple عن شاشات OLED بين بقايا الصورة Image Persistence، وهي مؤقتة تختفي بعد دقائق من الاستخدام العادي، والاحتراق الذي يحدث في الحالات الشديدة عندما تعرض نفس الصورة عالية التباين بسطوع عال لفترات طويلة.
وقد يتساءل البعض: هل يعني هذا أن OLED لا تناسب شاشة سيرفر أو لوحة مراقبة؟ والإجابة أن هذا بالضبط الاستخدام الأسوأ لها، فلوحة Grafana أو شاشة الأمن التي تعرض نفس الإطارات والعناوين أربعاً وعشرين ساعة هي الحالة التي تصفها Apple، فاستخدم لها LCD، واترك OLED للاستخدام الذي تتغير فيه الصورة.
معدل التحديث ومعدل الإطارات
معدل التحديث Refresh Rate هو عدد المرات التي ترسم فيها الشاشة الصورة في الثانية، وهو صفة في الشاشة وتوقيتها، فشاشة 60 Hz ترسم إطاراً كل 16.7 ملي ثانية. أما معدل الإطارات Frame Rate فهو عدد الإطارات الجديدة التي تنتهي بطاقة الرسومات من رسمها في الثانية، وهو يتغير بحسب ثقل ما ترسمه. والمشكلة أن الاثنين لا يتفقان دائماً، والصورة التالية تبين ثلاث طرق للتعامل مع ذلك:

- بدون مزامنة: التمزق Tearing. إذا استبدلت البطاقة الإطار في ذاكرة الإطار بينما وحدة العرض في منتصف قراءته، فإن الجزء الأعلى من الشاشة يكون من الإطار الجديد والأسفل من القديم، فترى خطاً أفقياً يقطع الصورة في الحركة السريعة.
- V-Sync: البطاقة تنتظر حتى تنتهي الشاشة من رسم الإطار الحالي ثم تبدل، فيختفي التمزق، ولكن الإطار الذي يتأخر قليلاً عن موعده ينتظر التحديث التالي كاملاً، فيعرض الإطار السابق مرتين ويشعر المستخدم بتقطيع Stutter، والانتظار نفسه يزيد التأخير بين حركة يدك وما تراه.
- التحديث المتغير VRR: اختصاراً لـ Variable Refresh Rate، وفيه تنتظر الشاشة الإطار بدل أن تنتظره البطاقة، فتبدأ التحديث لحظة جاهزية الإطار ضمن مدى تدعمه الشاشة. وتشرح صفحة HDMI VRR الفكرة بأن المصدر يرسل الإطارات بأسرع ما يستطيع بدل أن يكرر الإطار أو يرسل إطاراً نصف مرسوم. ولها عدة أسماء: VESA Adaptive-Sync على DisplayPort، وHDMI VRR، وAMD FreeSync، وNVIDIA G-SYNC الذي تذكر NVIDIA أن بعض شاشاته فيها معالج خاص منها، وأن شاشات G-SYNC Compatible لا تستخدم معالجاتها وإنما تختبرها NVIDIA.
ولاحظ أن كل هذا يهمك في الألعاب والفيديو أكثر من العمل على السيرفر، أما في العمل اليومي على الكود فالذي يهمك هو ألا تعمل الشاشة بتردد أقل مما تستطيع كما رأينا في التجربة، لأن 30 Hz تعني أن الشاشة ترسم حركة المؤشر والتمرير نصف عدد المرات التي ترسمها شاشة 60 Hz.
عمق الألوان وأساسيات HDR
عمق الألوان Colour Depth هو عدد البتات لكل لون في البكسل، فثمانية بتات تعني 256 مستوى لكل لون، وعشرة بتات تعني 1024 مستوى. وإذا كانت المستويات قليلة ظهرت في التدرجات الناعمة، مثل السماء أو الظل، خطوط وحدود بين المستويات تسمى التدرج المتقطع Banding، كما في الصورة التالية:

أما HDR، اختصاراً لـ High Dynamic Range، فهو توسيع المدى بين أغمق الأسود وأسطع الأبيض الذي تعرضه الشاشة ويحمله الفيديو، والتوصية ITU-R BT.2100 التي يقوم عليها فيديو HDR تستخدم 10 أو 12 بت لكل لون، والسبب أنك عندما توزع المستويات على مدى سطوع أكبر بكثير تحتاج مستويات أكثر حتى لا يظهر التدرج المتقطع من جديد، ولهذا السبب رأيت في جزء الكابلات أن 10 بت هي التي لا تدخل في HDMI 2.0. ولكن البتات وحدها لا تصنع HDR، فالشاشة يجب أن تستطيع فعلاً أن تضيء بقوة وأن تحافظ على الأسود، ولذلك وضعت VESA شهادة DisplayHDR بفئات تحدد أدنى سطوع أقصى وأدنى تباين، فمثلاً DisplayHDR 400 تعني سطوعاً أقصى لا يقل عن 400 cd/m² وتباين 1,300 إلى 1، بينما DisplayHDR 1000 تعني 1000 cd/m² وتباين 30,000 إلى 1، وتحذر VESA في نفس الصفحة من التسميات المشابهة مثل «HDR-400» التي لا تعني أن الشاشة اجتازت الشهادة.
لماذا تظهر حواف النص ملونة؟ والعربية قبل الرسم
الحرف على الشاشة شكل منحن يرسم على شبكة من المربعات، والحل البسيط أن تضيء البكسل كله أو تطفئه، فتظهر الحواف مسننة، والحل الأفضل هو التنعيم الرمادي Greyscale Antialiasing، أي أن تعطي البكسلات على الحافة درجة رمادية بحسب كم يغطيها الحرف، فتصبح الحواف ناعمة ولكنها تبدو باهتة قليلاً. ثم جاءت فكرة ثالثة تستغل أن البكسل في LCD ثلاثة بكسلات فرعية متجاورة أفقياً، فتعامل كل بكسل فرعي كأنه ثلث بكسل، وتشرح Microsoft في صفحة ClearType أن ClearType يعرف أن البكسل في شاشة LCD ثلاثة بكسلات فرعية ملونة فيختار شدة كل واحد منها على حدة، فتصبح الحروف ناعمة وحادة في نفس الوقت. والصورة التالية تبين الطرق الثلاث على شاشة حقيقية تحت العدسة:

ولهذا السبب ترى حواف ملونة إذا صورت الشاشة عن قرب أو أخذت لقطة شاشة وكبرتها، فهذا ليس عيباً، وإنما هو التنعيم نفسه. ولكن لاحظ أن هذه الطريقة تفترض ترتيباً معيناً للبكسلات الفرعية، أحمر ثم أخضر ثم أزرق في خط أفقي، فإذا كانت الشاشة بترتيب مختلف مثل كثير من شاشات OLED كما رأيت في صورة OLED، أو كانت الشاشة مقلوبة عمودياً، فقد تظهر الحواف الملونة للعين، وعندها يكون التنعيم الرمادي هو الأنسب.
أما العربية فلها خطوة قبل كل هذا، وهي التشكيل Shaping: الحرف الواحد له أشكال مختلفة بحسب موقعه، فالعين في أول الكلمة غيرها في وسطها وآخرها، ويختار الشكل المناسب محرك تشكيل مثل HarfBuzz الذي تستخدمه متصفحات وأنظمة كثيرة، ثم يرتب الحروف من اليمين إلى اليسار بحسب خوارزمية Unicode للاتجاه، وبعد ذلك فقط يرسم الشكل بالبكسلات أو البكسلات الفرعية. لذلك إذا رأيت العربية مقطعة أو معكوسة فالمشكلة في التشكيل أو الاتجاه في البرنامج الذي يرسم، وليس في الشاشة، كما شرحنا في مقال Hello World عن الطرفيات.
أخطاء شائعة وأفكار غير صحيحة
- «الكابل الأغلى سوف يعطيني 60 Hz»: في حالتنا كان المنفذ هو الحد، والكابل لا يرفع سعة منفذ HDMI 1.4، فاقرأ إصدار المنفذين قبل شراء الكابل.
- عدم التأكد من التردد الفعلي بعد التوصيل: Windows لا يحذرك عندما تعمل الشاشة بتردد أقل مما تستطيع، فراجع إعدادات العرض أو شغل السكربت أعلاه.
- الحكم على الحدة بالدقة وحدها: 1920 × 1080 على 24 بوصة غيرها على 32 بوصة، والرقم الذي يهمك هو PPI ومسافة جلوسك.
- «HDR-400 يعني DisplayHDR 400»: تحذر VESA من هذه التسميات، فابحث عن الشهادة نفسها في قائمة المنتجات المعتمدة.
- شاشة OLED للوحة مراقبة ثابتة تعمل طوال اليوم: هذه حالة الاحتراق النموذجية، فاستخدم LCD.
- «معدل الإطارات العالي يكفي»: 200 إطار في الثانية على شاشة 60 Hz لا تعرض إلا 60، فمعدل التحديث هو الحد الأعلى لما تراه.
- اعتبار الحواف الملونة في لقطة الشاشة عيباً: هي تنعيم البكسلات الفرعية، وإذا ظهرت لعينك مباشرة على شاشة OLED فاستخدم التنعيم الرمادي.
تدريب عملي
- شغل
display-info.ps1على جهازك، وقارن بين أفضل وضع تعلنه كل شاشة والوضع الذي تعمل به الآن، وإذا اختلفا فابحث عن السبب في المنفذ والكابل. - غير في
bandwidth.mjsالدقة والتردد وساعة البكسل لشاشتك، مثل 2560 × 1440 بسرعة 144 Hz، واستخرج ساعة البكسل من مخرج السكربت السابق، ثم احسب هل يكفي منفذك. - احسب كثافة البكسل لشاشتك من المقاس الذي أعلنته في
SizeCm.
الخلاصة
وصلنا لنهاية الموضوع، وأهم ما فيه:
- الصورة شبكة من البكسلات، وكل بكسل ثلاثة بكسلات فرعية تغير شدتها فقط، و8 بت لكل لون تعطي نحو 16.7 مليون لون، والحدة تحددها كثافة البكسل PPI وليس الدقة وحدها.
- الإطار يرسم في ذاكرة الإطار، وتقرؤه وحدة العرض سطراً سطراً مع فترات الإطفاء، ثم يرمز ويمر بالكابل إلى متحكم التوقيت في الشاشة ثم إلى ترانزستور كل بكسل فرعي.
- 4K بسرعة 60 Hz تحتاج 14.26 Gbps بعمق 8 بت و17.82 Gbps بعمق 10 بت، فلا يكفيها HDMI 1.4، ويكفي HDMI 2.0 لعمق 8 بت فقط، ويكفي DisplayPort 1.4 وHDMI 2.1 للاثنين، وهذا ما جعل شاشتنا تعمل بتردد 30 Hz على HDMI.
- LCD يحجب ضوءاً خلفياً يعمل دائماً، وترتيب البلور السائل يحدد النوع: TN الأرخص والأسرع، وIPS الأفضل ألواناً وزوايا، وVA الأعلى تبايناً.
- OLED يطفئ البكسل نفسه فيكون الأسود حقيقياً، ولكن البكسلات تتآكل بقدر استخدامها، فالصورة الثابتة الساطعة الطويلة تسبب الاحتراق.
- التمزق يأتي من تبديل الإطار أثناء الرسم، وV-Sync يمنعه بالانتظار، وVRR يجعل الشاشة تنتظر الإطار.
- HDR سطوع وتباين و10 بت معاً، وتنعيم البكسلات الفرعية سبب الحواف الملونة، والعربية تشكل وترتب قبل أن ترسم.
وفي مرحلة العتاد نفسها نكمل بإذن الله إلى أنواع السيرفرات وما يميزها عن الحاسب العادي:
دليلكيف يعمل المعالج CPU من الداخل ولماذا يهمك ذلكنتابع تعليمة واحدة داخل نواة المعالج، ونرى لماذا يصبح نفس الكود أبطأ بعشر مرات عندما تغير ترتيب المرور على البيانات.
دليلكيف تعمل الذاكرة RAM من الداخل، ولماذا تحتاج التحديث Refreshنفتح وحدة الذاكرة من الشريحة إلى الخلية، لتفهم ما تعنيه الأرقام المكتوبة عليها عندما تشتري جهازاً أو تختار سيرفراً.
دليلماذا يحدث عندما تشغل برنامج Hello World؟نتتبع برنامج C صغيراً من المحرر إلى الشاشة، فترى كل طبقة يمر بها في الجهاز حتى تظهر الجملة أمامك.
دليلالتزامن Concurrency والخيوط: ماذا يعني لسيرفرك وتطبيقاتكلماذا يكون المعالج عند 100% والتطبيق بطيئاً، ولا تسرع الخيوط كود Python، وكيف تضبط عدد العمال وحدود ال Containers.
دليلالذاكرة للمبرمجين: كيف تعمل ال Stack وال Heapلماذا تتغير قائمة لم تطلب تغييرها، وكيف تتسرب الذاكرة في لغة فيها جامع قمامة Garbage Collector، بأمثلة حقيقية من عدة لغات.سجل التحديثات
- أكتوبر 2026: كتابة المقال، وقراءة معلومات بطاقة الرسومات Intel HD Graphics 630 وشاشتين على Windows 11 بسكربت PowerShell، وحساب سعة 4K بسرعة 60 Hz بـ Node.js 22.14.0، مع صور حقيقية للبكسلات من Wikimedia Commons ورسوم من عرب رووت.