ضغط نسيج S3

تُعدّ تقنية ضغط نسيج S3 ( S3TC ) (وتُعرف أحيانًا باسم DXTn أو DXTC أو BCn ) مجموعةً من خوارزميات ضغط النسيج ذات الفقدان ، والتي طوّرها في الأصل إيورتشا وآخرون من شركة S3 Graphics المحدودة [ 1 ] [ 2 ] لاستخدامها في مُسرّع رسومات الحاسوب ثلاثي الأبعاد Savage . وتتشابه طريقة الضغط هذه بشكلٍ ملحوظ مع تقنية ضغط الخلايا اللونية المنشورة سابقًا [ 3 والتي بدورها مُقتبسة من ترميز اقتطاع الكتل المنشور في أواخر سبعينيات القرن الماضي. وعلى عكس بعض خوارزميات ضغط الصور (مثل JPEG )، فإنّ معدل ضغط البيانات الثابت في S3TC، بالإضافة إلى الوصول إلى الذاكرة لمرة واحدة (مقارنةً بتقنية ضغط الخلايا اللونية وبعض المخططات القائمة على VQ )، جعلها مناسبةً تمامًا لضغط النسيج في رسومات الحاسوب ثلاثية الأبعاد المُسرّعة بواسطة الأجهزة . أدى إدراجها لاحقًا في DirectX 6.0 و OpenGL 1.3 من مايكروسوفت (عبر امتداد GL_EXT_texture_compression_s3tc ) إلى انتشار واسع النطاق لهذه التقنية بين مصنعي الأجهزة والبرامج. ورغم أن S3 Graphics لم تعد منافسًا في سوق معالجات الرسومات، فقد استمر فرض رسوم ترخيص واستخدام تقنية S3TC حتى أكتوبر 2017، على سبيل المثال في أجهزة ألعاب الفيديو وبطاقات الرسومات. وقد أدى الاستخدام الواسع لتقنية S3TC إلى اشتراط فعلي لدعمها من قبل برامج تشغيل OpenGL، إلا أن وضع S3TC المقيد ببراءات الاختراع شكّل عائقًا كبيرًا أمام تطبيقات المصادر المفتوحة ، [ 4 ] في حين وُجدت مناهج تنفيذية حاولت تجنب الأجزاء المحمية ببراءات الاختراع. [ 5 ]

براءة اختراع

انتهت صلاحية بعض براءات الاختراع المتعددة المسجلة لدى مكتب براءات الاختراع والعلامات التجارية الأمريكي (USPTO) والمتعلقة بتقنية ضغط نسيج S3 (مثل براءة الاختراع الأمريكية رقم 5956431 A) في 2 أكتوبر 2017. [ 6 ] إلا أن براءة اختراع واحدة على الأقل، وهي براءة الاختراع الأمريكية رقم 6,775,417 ، مُنحت تمديدًا لمدة 165 يومًا. وانتهت صلاحية هذه البراءة في 16 مارس 2018.

برامج الترميز

توجد خمسة أنواع مختلفة من خوارزمية S3TC (تُسمى من DXT1 إلى DXT5 ، نسبةً إلى رمز FourCC الذي خصصته مايكروسوفت لكل تنسيق)، كل منها مصمم لأنواع محددة من بيانات الصور. جميعها تُحوّل كتلة 4×4 بكسل إلى وحدة 64 بت أو 128 بت، مما ينتج عنه نسب ضغط 6:1 مع بيانات إدخال RGB ذات 24 بت أو 4:1 مع بيانات إدخال RGBA ذات 32 بت . S3TC هي خوارزمية ضغط مع فقدان للبيانات، مما يؤدي إلى تدهور جودة الصورة، وهو تأثير يتم تقليله من خلال القدرة على زيادة دقة النسيج مع الحفاظ على متطلبات الذاكرة نفسها. لا تُضغط الصور الكرتونية المرسومة يدويًا بشكل جيد، وكذلك بيانات الخرائط العادية ، وكلاهما يُنتج عادةً تشوهات . خوارزمية ضغط 3Dc من ATI هي تعديل لـ DXT5 مصمم للتغلب على أوجه القصور في S3TC فيما يتعلق بالخرائط العادية. تغلبت شركة id Software على مشاكل ضغط الخرائط العادية في لعبة Doom 3 عن طريق نقل المكون الأحمر إلى قناة ألفا قبل الضغط وإعادته أثناء عملية العرض في برنامج تظليل البكسل . [ 7 ]

على غرار العديد من خوارزميات ضغط الصور الحديثة، لا يحدد معيار S3TC سوى طريقة فك ضغط الصور، مما يسمح للمطورين بتصميم خوارزمية الضغط بما يتناسب مع احتياجاتهم الخاصة، مع العلم أن براءة الاختراع لا تزال تغطي خوارزميات الضغط. كما استخدمت بطاقات Nvidia GeForce من 256 إلى GeForce 4 تقنية الاستيفاء 16 بت لعرض نسيج DXT1، مما أدى إلى ظهور تدرجات لونية غير متجانسة عند فك ضغط النسيج. وقد خلق هذا انطباعًا سلبيًا عن ضغط النسيج ، لا علاقة له بأساسيات برنامج الترميز نفسه.

DXT1

DXT1 (المعروف أيضًا باسم ضغط الكتلة 1 أو BC1) هو أصغر إصدار من S3TC، حيث يخزن 16 بكسل إدخال في 64 بت من الإخراج، ويتكون من قيمتين لونيتين RGB 5:6:5 ذات 16 بتج0{\displaystyle c_{0}}وج1{\displaystyle c_{1}}وجدول بحث ثنائي البتات 4×4.

لوج0>ج1{\displaystyle c_{0}>c_{1}}(قارن هذه الألوان بتفسيرها على أنها عددان غير موقعين من 16 بت)، ثم يتم حساب لونين آخرين، بحيث يكون لكل مكون،ج2=23ج0+13ج1{\textstyle c_{2}={2 \over 3}c_{0}+{1 \over 3}c_{1}}وج3=13ج0+23ج1{\textstyle c_{3}={1 \over 3}c_{0}+{2 \over 3}c_{1}}يعمل هذا الوضع بشكل مشابه للوضع 0xC0 الخاص ببرنامج ترميز الفيديو الأصلي من Apple . [ 8 ]

وإلا، إذاج0ج1{\displaystyle c_{0}\leq c_{1}}، ثمج2=12ج0+12ج1{\textstyle c_{2}={1 \over 2}c_{0}+{1 \over 2}c_{1}}وج3{\displaystyle c_{3}}اللون الأسود الشفاف يتوافق مع تنسيق ألفا مضروب مسبقًا . يتسبب هذا اللون أحيانًا في ظهور حدود سوداء تحيط بالمنطقة الشفافة عند استخدام ترشيح النسيج الخطي واختبار ألفا، وذلك بسبب استيفاء الألوان بين لون البكسل المعتم والبكسل الأسود الشفاف المجاور.

ثم يتم الرجوع إلى جدول البحث لتحديد قيمة اللون لكل بكسل، حيث تتوافق القيمة 0 معج0{\displaystyle c_{0}}وقيمة 3 تقابلج3{\displaystyle c_{3}}.

DXT2 و DXT3

تقوم تقنيتا DXT2 وDXT3 (المعروفتان مجتمعتين باسم ضغط الكتلة 2 أو BC2) بتحويل 16 بكسلًا مُدخلًا (تُقابل كتلة 4x4 بكسل) إلى 128 بتًا من المُخرجات، تتكون من 64 بتًا من بيانات قناة ألفا (4 بتات لكل بكسل) متبوعة بـ 64 بتًا من بيانات اللون، مُشفرة بنفس طريقة DXT1 (باستثناء أنه يتم دائمًا استخدام إصدار الألوان الأربعة من خوارزمية DXT1 بدلًا من تحديد الإصدار المُستخدم بناءً على القيم النسبية لـج0{\displaystyle c_{0}}وج1{\displaystyle c_{1}}).

في DXT2، تُفسَّر بيانات اللون على أنها مضروبة مسبقًا في قيمة ألفا ، بينما في DXT3 تُفسَّر على أنها غير مضروبة مسبقًا في قيمة ألفا. عادةً ما يكون DXT2/3 مناسبًا للصور ذات الانتقالات الحادة في قيمة ألفا، بين المناطق الشفافة والمعتمة.

DXT4 و DXT5

يقوم DXT4 و DXT5 (المعروفان مجتمعين أيضًا باسم Block Compression 3 أو BC3) بتحويل 16 بكسل إدخال إلى 128 بت من الإخراج، ويتكون من 64 بت من بيانات قناة ألفا (قيمتان ألفا 8 بت وجدول بحث 4×4 3 بت) متبوعًا بـ 64 بت من بيانات اللون (مشفرة بنفس طريقة DXT1).

لوα0>α1{\displaystyle \alpha _{0}>\alpha _{1}}ثم يتم حساب ست قيم ألفا أخرى، بحيثα2=6α0+1α17{\textstyle \alpha _{2}={{6\alpha _{0}+1\alpha _{1}} \over 7}}،α3=5α0+2α17{\textstyle \alpha _{3}={{5\alpha _{0}+2\alpha _{1}} \over 7}}،α4=4α0+3α17{\textstyle \alpha _{4}={{4\alpha _{0}+3\alpha _{1}} \over 7}}،α5=3α0+4α17{\textstyle \alpha _{5}={{3\alpha _{0}+4\alpha _{1}} \over 7}}،α6=2α0+5α17{\textstyle \alpha _{6}={{2\alpha _{0}+5\alpha _{1}} \over 7}}، وα7=1α0+6α17{\textstyle \alpha _{7}={{1\alpha _{0}+6\alpha _{1}} \over 7}}.

وإلا، إذاα0α1{\textstyle \alpha _{0}\leq \alpha _{1}}يتم حساب أربع قيم ألفا أخرى بحيثα2=4α0+1α15{\textstyle \alpha _{2}={{4\alpha _{0}+1\alpha _{1}} \over 5}}،α3=3α0+2α15{\textstyle \alpha _{3}={{3\alpha _{0}+2\alpha _{1}} \over 5}}،α4=2α0+3α15{\textstyle \alpha _{4}={{2\alpha _{0}+3\alpha _{1}} \over 5}}، وα5=1α0+4α15{\textstyle \alpha _{5}={{1\alpha _{0}+4\alpha _{1}} \over 5}}معα6=0{\displaystyle \alpha _{6}=0}وα7=255{\displaystyle \alpha _{7}=255}.

ثم يتم الرجوع إلى جدول البحث لتحديد قيمة ألفا لكل بكسل، حيث تتوافق القيمة 0 معα0{\displaystyle \alpha _{0}}وقيمة 7 تقابلα7{\displaystyle \alpha _{7}}تُضرب بيانات الألوان في DXT4 مسبقًا بمعامل ألفا، بينما لا تُضرب في DXT5. ولأن DXT4/5 تستخدم نظام ألفا مُستكمل، فإنها تُنتج عمومًا نتائج أفضل لتدرجات ألفا (الشفافية) من DXT2/3.

متغيرات أخرى

BC4 و BC5

تمت إضافة BC4 وBC5 (ضغط الكتلة 4 و5) في Direct3D 10. وهما يعيدان استخدام ترميز قناة ألفا الموجود في DXT4/5 (BC3). [ 9 ]

  • يخزن BC4 ستة عشر بكسلًا أحادي القناة (مثل تدرج الرمادي) في مخرجات مكونة من 64 بتًا، مشفرة بنفس طريقة ترميز قنوات ألفا في BC3 تقريبًا . توفر لوحة الألوان الموسعة جودة أعلى.
  • يقوم BC5 بتخزين 16 بكسل إدخال مزدوج القناة (مثل خريطة عادية لمساحة المماس) في 128 بت من الإخراج، ويتكون من نصفين يتم ترميز كل منهما مثل BC4.

BC6H و BC7

تمت إضافة BC6H (أحيانًا BC6) و BC7 (ضغط الكتلة 6H و 7) في Direct3D 11. [ 9 ]

  • تقوم خوارزمية BC6H بترميز 16 بكسلًا من نوع RGB HDR (float16) إلى 128 بتًا من المخرجات. وتتعامل هذه الخوارزمية مع float16 كـ 16 قيمة عددية صحيحة (مقدار وإشارة)، ثم تُجري استيفاءً خطيًا لهذه القيم. وتعمل بكفاءة مع الكتل التي لا تتغير إشارتها. يوجد 14 نمطًا مُعرّفًا، مع اختلافات طفيفة بين معظمها، حيث يُستخدم نمطان فقط للتنبؤ. [ 10 ]
  • يقوم BC7 بترميز 16 بكسل من نوع RGB8/RGBA8 المدخلة إلى 128 بت من المخرجات. ويمكن اعتباره نسخة محسّنة بشكل كبير من BC3. [ 10 ]

تتميز خوارزميتا BC6H وBC7 بتعقيد أكبر مع مجموعة مختارة من أنماط التشفير، مما يُحسّن الجودة بشكل ملحوظ. [ 9 ] كما أن هذين النمطين مُحددان بدقة أكبر، مع نطاقات انحراف مقبولة. أما أنماط BCn السابقة، فتختلف طريقة فك تشفيرها قليلاً بين مُصنّعي وحدات معالجة الرسومات. [ 10 ]

مقارنة تنسيق S3TC

فوركاسم DX 10/11وصفهل تم ضرب ألفا مسبقًا؟نسبة الضغطنوع النسيج
DXT1BC1شفافية بت واحد / معتمنعم6:1 (لصورة مصدرية 24 بت)بسيط غير ألفا
DXT2BC2ألفا صريحنعم4:1ألفا حادة
DXT3BC2ألفا صريحلا4:1ألفا حادة
DXT4BC3ألفا المُستكملةنعم4:1تدرج ألفا
DXT5BC3ألفا المُستكملةلا4:1تدرج ألفا
غير متوفرBC4تدرج رمادي مُستكملغير متوفر2:1تدرج
غير متوفرBC5قناة مزدوجة مُستكملةغير متوفر2:1تدرج
غير متوفرBC6Hتقنية HDR المُستكملة (بدون قناة ألفا)غير متوفر6:1تدرج
غير متوفرBC7ألفا المُستكملة؟4:1تدرج

تهيئة البيانات المسبقة

يمكن ضغط نسيج BCn بشكل إضافي لتخزينه وتوزيعه على القرص ( ضغط النسيج الفائق ). يقوم التطبيق بفك ضغط هذه الطبقة الإضافية وإرسال بيانات BCn إلى وحدة معالجة الرسومات كالمعتاد.

يمكن دمج BCn مع Oodle Texture، وهو معالج مسبق مع فقدان للبيانات يُعدّل نسيج الإدخال بحيث يسهل ضغط مخرجات BCn بواسطة ضاغط LZ77 ( تحسين معدل التشوه ). كما يمكن لـ BC7 تحديدًا استخدام "bc7prep"، وهي عملية بدون فقدان للبيانات لإعادة ترميز النسيج بشكل أكثر قابلية للضغط (مما يتطلب عكسه عند فك الضغط). [ 11 ]

برنامج crunch هو أداة أخرى تقوم بتنفيذ RDO ويمكنها أيضًا إعادة الترميز بشكل اختياري. [ 12 ]

في عام 2021، طورت مايكروسوفت خوارزمية ضغط "BCPack" خصيصًا للنسيج المضغوط بتقنية BCn. يدعم جهازا Xbox Series X وS فك ضغط ملفات BCPack. [ 13 ]

انظر أيضاً

مراجع

  1. US 5956431 "ضغط الصور القائم على الكتل بمعدل ثابت مع قيم البكسل المستنتجة" 
  2. US 5956431 ، إيورتشا، كونستانتين آي؛ ناياك، كريشنا إس ؛ وهونغ، تشو، "نظام وطريقة لضغط الصور بمعدل ثابت قائم على الكتل مع قيم البكسل المستنتجة"، نُشر في 21 سبتمبر 1999 
  3. Liou, D.-M.; Huang, Y.; Reynolds, N. (1990). "A new microcomputer based imaging system with C/Sup 3/ Technique". IEEE TENCON'90: 1990 IEEE Region 10 Conference on Computer and Communication Systems. Conference Proceedings. IEEE. pp. 555–559. doi:10.1109/TENCON.1990.152671. ISBN 0-87942-556-3.
  4. "S3TC situation on official DRI information page". Dri.freedesktop.org. Archived from the original on 2012-01-19. Retrieved 2012-01-25.
  5. S2TC: A Possible Workaround For The S3TC Patent SituationArchived 2016-05-13 at the Wayback Machine on phoronix
  6. Yates, Tom (2017-02-15). "This is why I drink: a discussion of Fedora's legal state". LWN.net. Archived from the original on 2017-03-01. Retrieved 2017-02-16. ... The patent on S3 texture compression expires on October 2, 2017, so Steam games might work better on Fedora after that date. ...
  7. Duffy, Robert (July 27, 2004). "DOOM 3 Video Requirements". Gamershell.com. Archived from the original on January 3, 2008. Retrieved 2012-01-25.
  8. Togni, Roberto, et al. "Apple RPZAArchived 2017-07-04 at the Wayback Machine". MultimediaWiki.
  9. 123Reed, Nathan. "Understanding BCn Texture Compression Formats". Nathan Reed’s coding blog. Archived from the original on 2020-11-09. Retrieved 2020-09-01.
  10. 1234Giesen, Fabian “ryg” (4 October 2021). "GPU BCn decoding". The ryg blog. Archived from the original on 24 July 2023. Retrieved 24 July 2023.
  11. "Oodle Texture Compression". www.radgametools.com. Archived from the original on 2023-03-18. Retrieved 2023-04-03. Open source part mentioned: bc7enc_rdoArchived 2021-02-02 at the Wayback Machine
  12. "مكتبة ضغط الصور مفتوحة المصدر Crunch" . GitHub . مؤرشفة من الأصل بتاريخ 2016-09-09 . تم الاطلاع عليها بتاريخ 2016-09-13 .
  13. "نظرة عامة على DirectStorage - حزمة تطوير ألعاب مايكروسوفت" . 16 مارس 2023. مؤرشف من الأصل في 3 أغسطس 2023. تم الاطلاع عليه في 3 أغسطس 2023 .