ضغط نسيج 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 بتووجدول بحث ثنائي البتات 4×4.
لو(قارن هذه الألوان بتفسيرها على أنها عددان غير موقعين من 16 بت)، ثم يتم حساب لونين آخرين، بحيث يكون لكل مكون،ويعمل هذا الوضع بشكل مشابه للوضع 0xC0 الخاص ببرنامج ترميز الفيديو الأصلي من Apple . [ 8 ]
وإلا، إذا، ثمواللون الأسود الشفاف يتوافق مع تنسيق ألفا مضروب مسبقًا . يتسبب هذا اللون أحيانًا في ظهور حدود سوداء تحيط بالمنطقة الشفافة عند استخدام ترشيح النسيج الخطي واختبار ألفا، وذلك بسبب استيفاء الألوان بين لون البكسل المعتم والبكسل الأسود الشفاف المجاور.
ثم يتم الرجوع إلى جدول البحث لتحديد قيمة اللون لكل بكسل، حيث تتوافق القيمة 0 معوقيمة 3 تقابل.
DXT2 و DXT3
تقوم تقنيتا DXT2 وDXT3 (المعروفتان مجتمعتين باسم ضغط الكتلة 2 أو BC2) بتحويل 16 بكسلًا مُدخلًا (تُقابل كتلة 4x4 بكسل) إلى 128 بتًا من المُخرجات، تتكون من 64 بتًا من بيانات قناة ألفا (4 بتات لكل بكسل) متبوعة بـ 64 بتًا من بيانات اللون، مُشفرة بنفس طريقة DXT1 (باستثناء أنه يتم دائمًا استخدام إصدار الألوان الأربعة من خوارزمية DXT1 بدلًا من تحديد الإصدار المُستخدم بناءً على القيم النسبية لـو).
في DXT2، تُفسَّر بيانات اللون على أنها مضروبة مسبقًا في قيمة ألفا ، بينما في DXT3 تُفسَّر على أنها غير مضروبة مسبقًا في قيمة ألفا. عادةً ما يكون DXT2/3 مناسبًا للصور ذات الانتقالات الحادة في قيمة ألفا، بين المناطق الشفافة والمعتمة.
DXT4 و DXT5
يقوم DXT4 و DXT5 (المعروفان مجتمعين أيضًا باسم Block Compression 3 أو BC3) بتحويل 16 بكسل إدخال إلى 128 بت من الإخراج، ويتكون من 64 بت من بيانات قناة ألفا (قيمتان ألفا 8 بت وجدول بحث 4×4 3 بت) متبوعًا بـ 64 بت من بيانات اللون (مشفرة بنفس طريقة DXT1).
لوثم يتم حساب ست قيم ألفا أخرى، بحيث،،،،، و.
وإلا، إذايتم حساب أربع قيم ألفا أخرى بحيث،،، ومعو.
ثم يتم الرجوع إلى جدول البحث لتحديد قيمة ألفا لكل بكسل، حيث تتوافق القيمة 0 معوقيمة 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 | وصف | هل تم ضرب ألفا مسبقًا؟ | نسبة الضغط | نوع النسيج |
|---|---|---|---|---|---|
| DXT1 | BC1 | شفافية بت واحد / معتم | نعم | 6:1 (لصورة مصدرية 24 بت) | بسيط غير ألفا |
| DXT2 | BC2 | ألفا صريح | نعم | 4:1 | ألفا حادة |
| DXT3 | BC2 | ألفا صريح | لا | 4:1 | ألفا حادة |
| DXT4 | BC3 | ألفا المُستكملة | نعم | 4:1 | تدرج ألفا |
| DXT5 | BC3 | ألفا المُستكملة | لا | 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 ]
انظر أيضاً
- S2TC ، حل بديل بدون براءة اختراع
- FXT1
- سطح الرسم المباشر
- PVRTC
- ضغط النسيج التكيفي القابل للتوسع (ASTC)
- ضغط نسيج إريكسون (ETC1 و ETC2)
- تعبير الخلية الملونة
مراجع
- ↑ US 5956431 "ضغط الصور القائم على الكتل بمعدل ثابت مع قيم البكسل المستنتجة"
- ↑ US 5956431 ، إيورتشا، كونستانتين آي؛ ناياك، كريشنا إس ؛ وهونغ، تشو، "نظام وطريقة لضغط الصور بمعدل ثابت قائم على الكتل مع قيم البكسل المستنتجة"، نُشر في 21 سبتمبر 1999
- ↑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.
- ↑"S3TC situation on official DRI information page". Dri.freedesktop.org. Archived from the original on 2012-01-19. Retrieved 2012-01-25.
- ↑S2TC: A Possible Workaround For The S3TC Patent SituationArchived 2016-05-13 at the Wayback Machine on phoronix
- ↑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. ...
- ↑Duffy, Robert (July 27, 2004). "DOOM 3 Video Requirements". Gamershell.com. Archived from the original on January 3, 2008. Retrieved 2012-01-25.
- ↑Togni, Roberto, et al. "Apple RPZAArchived 2017-07-04 at the Wayback Machine". MultimediaWiki.
- 123Reed, Nathan. "Understanding BCn Texture Compression Formats". Nathan Reed’s coding blog. Archived from the original on 2020-11-09. Retrieved 2020-09-01.
- 1234Giesen, Fabian “ryg” (4 October 2021). "GPU BCn decoding". The ryg blog. Archived from the original on 24 July 2023. Retrieved 24 July 2023.
- ↑"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
- ↑ "مكتبة ضغط الصور مفتوحة المصدر Crunch" . GitHub . مؤرشفة من الأصل بتاريخ 2016-09-09 . تم الاطلاع عليها بتاريخ 2016-09-13 .
- ↑ "نظرة عامة على DirectStorage - حزمة تطوير ألعاب مايكروسوفت" . 16 مارس 2023. مؤرشف من الأصل في 3 أغسطس 2023. تم الاطلاع عليه في 3 أغسطس 2023 .
روابط خارجية
- رسومات الحاسوب ثلاثية الأبعاد
- خوارزميات الضغط مع فقدان البيانات
- ضغط النسيج
