محدودیت ۱۲۸ بیتی: فشردهسازی بافت BC7 چگونه بلوکهای پیکسلی ۴x۴ را تقسیم میکند
فرمت BC7 با دو برابر کردن اندازه بلوک به ۱۲۸ بیت و معرفی ۶۴ شکل افراز، به سختافزار گرافیکی اجازه میدهد تا چندین خط رنگی را درون یک شبکه ۱۶ پیکسلی درونیابی کند. این فرمت در واقع افزایش تصاعدی زمان رمزگذاری را فدای رمزگشایی سختافزاری دقیق و با هزینه ثابت میکند.
به قلم کاوان رامین
این خبر را به اشتراک بگذارید
بهطور خلاصه
- فرمت BC7 یک بلوک ۴x۴ شامل ۱۶ پیکسل را دقیقاً در ۱۲۸ بیت فشرده کرده و به نسبت فشردهسازی ۴:۱ دست مییابد.
- این فرمت از ۶۴ شکل افراز از پیشتعریفشده استفاده میکند تا امکان ایجاد حداکثر سه خط رنگی مستقل در هر بلوک را فراهم کند.
- هشت حالت ساختاری متمایز به رمزگذار اجازه میدهد تا دقت نقاط پایانی را با دقت شاخصها مبادله و تنظیم کند.
یک بلوک ۴x۴ از پیکسلها در بافت یک بازی ویدیویی مدرن، زمانی که با استفاده از فرمت فشردهسازی BC7 رمزگذاری میشود، دقیقاً ۱۲۸ بیت از حافظه را اشغال میکند. این ردپای ۱۶ بایتی که توسط مایکروسافت در مشخصات دایرکتاکس ۱۱ استاندارد شده است، یک محدودیت فیزیکی سخت را نشان میدهد.
در درون همین ۱۲۸ بیت، واحد پردازش گرافیکی باید اطلاعات رنگ و آلفای کافی را استخراج کند تا ۱۶ پیکسل مجزا را روی صفحه نمایشگر رسم کند، آن هم بدون ایجاد نواربندی و حالت بلوکی که روشهای فشردهسازی پیشین را آزار میداد. سازوکاری که این امر را ممکن میسازد، افزایش کورکورانه و زورکی وضوح تصویر نیست، بلکه یک تغییر ساختاری در نحوه افراز و درونیابی خود فضای رنگی است.[1]
ریاضیات بنیادین حافظه بافت بیرحم است. دادههای فشردهنشده ۸ بیتی RGBA به ۳۲ بیت برای هر پیکسل نیاز دارند. یک شبکه ۴x۴ شامل ۱۶ پیکسل در مجموع ۵۱۲ بیت میشود. فرمت BC7 این مقدار را به زور در ۱۲۸ بیت جا میدهد و به نسبت فشردهسازی ۴:۱ میرسد. اگرچه این نسبت چشمگیر به نظر میرسد، اما در واقعیت نسبت به فرمتهای پیش از خود کمتر تهاجمی است.
در سال ۱۹۹۹، شرکت S3 Graphics فرمت S3TC (که بعداً به عنوان DXTC یا BC1 پذیرفته شد) را معرفی کرد که همان بلوک ۴x۴ را تنها در ۶۴ بیت فشرده میکرد. فرمت BC1 در زمان خود انقلابی بود، اما نسبت فشردهسازی ۸:۱ آن وقتی روی تصاویر پیچیده اعمال میشد، از نظر بصری مخرب بود.[4][5]
سازوکار هستهای تمام فشردهسازیهای بلوکی، «خط رنگی» است. همانطور که نیتن رید، برنامهنویس گرافیک، در تحلیل سال ۲۰۱۲ خود از این فرمتها اشاره کرد، الگوریتم دو رنگ نقطه پایانی را در یک فضای سهبعدی RGB تعریف کرده و یک خط راست را بین آنها درونیابی میکند.
سپس به هر پیکسل در بلوک ۴x۴ یک شاخص ۲ بیتی یا ۳ بیتی اختصاص داده میشود که رنگ آن را به نزدیکترین نقطه روی آن خط واحد متصل میکند. این روش برای یک گرادیان نرم از آسمان آبی، جایی که تمام رنگهای محلی به طور طبیعی در امتداد یک مسیر واحد قرار میگیرند، بینقص کار میکند.[4]
اما فرض تکخطی به محض اینکه یک بلوک حاوی جزئیات با فرکانس بالا باشد، در هم میشکند. رید مینویسد: «اکثر فرمتهای BCn در هر جایی که سه رنگ بسیار متفاوت در یک بلوک واحد حضور داشته باشند، نتایج بیکیفیتی ارائه میدهند.» پیکسلهای قرمز، سبز و آبی از نظر فیزیکی نمیتوانند روی یک خط راست در فضای سهبعدی قرار بگیرند. وقتی آنها به زور روی یک خط قرار میگیرند، تصویر حاصل همان مصنوعات بلوکی و نواربندیشدهای را نشان میدهد که مشخصه بازیهای سهبعدی اولیه بود.[4]
مایکروسافت و گروه کرونوس فرمت BC7 را - که در مشخصات OpenGL با نام BPTC نیز شناخته میشود - دقیقاً برای حل همین محدودیت هندسی طراحی کردند، بدون اینکه ساختار بلوک ۴x۴ را کنار بگذارند. راهحل، افراز بود. به جای اینکه هر ۱۶ پیکسل مجبور به اشتراکگذاری یک جفت نقطه پایانی شوند، BC7 اجازه میدهد تا بلوک به دو یا سه زیرمجموعه مجزا تقسیم شود.[1][2]
هر زیرمجموعه خط رنگی مستقل خود را دریافت میکند. اکنون یک بلوک ۴x۴ واحد میتواند لبه تیز محل برخورد یک آجر قرمز با یک برگ سبز و آسمان آبی را به دقت نشان دهد، زیرا هر ناحیه به طور جداگانه درونیابی میشود.
با این حال، ذخیره یک نقشه پیکسلی سفارشی برای تعریف این زیرمجموعهها بیتهای بسیار زیادی را مصرف میکند. در عوض، مشخصات BC7 شامل یک جدول کدگذاریشده سخت از ۶۴ شکل افراز از پیشتعریفشده است. رمزگذار به سادگی یک شناسه ۶ بیتی را ذخیره میکند تا شکلی را که بیشترین تطابق را با دادههای تصویر دارد، انتخاب کند.[3][5]
این انعطافپذیری یک مشکل ساختاری ایجاد میکند: یک بلوک ۱۲۸ بیتی برای نگهداری همزمان سه جفت نقطه پایانی با دقت بالا، ۱۶ شاخص پیکسل و شناسه افراز بسیار کوچک است. بنابراین فرمت باید چندریخت میشد. فرمت BC7 این مشکل را با تعریف هشت حالت متمایز، شمارهگذاری شده از حالت ۰ تا حالت ۷، حل میکند. این حالت در کمارزشترین بیتهای بلوک با استفاده از یک کد یگانی - دنبالهای از صفرها که به یک ختم میشود - اعلام میگردد.[1][3]
از آنجا که این حالت چیدمان بیتهای باقیمانده را دیکته میکند، هر بلوک میتواند ویژگیها را بر اساس نیازهای خاص خود مبادله کند. برای مثال، حالت ۰ از سه زیرمجموعه پشتیبانی میکند اما نقاط پایانی را به دقت ۴ بیتی محدود میسازد. حالت ۶ تنها از یک زیرمجموعه پشتیبانی میکند اما دقت نقطه پایانی ۷ بیتی و شاخصهای ۴ بیتی را ارائه میدهد، که آن را برای گرادیانهای نرم و پیچیدهای که در غیر این صورت نواربندی در آنها قابل مشاهده بود، ایدهآل میسازد.[3]
از آنجا که این حالت چیدمان بیتهای باقیمانده را دیکته میکند، هر بلوک میتواند ویژگیها را بر اساس نیازهای خاص خود مبادله کند.
این فرمت همچنین از بهینهسازی تهاجمی در سطح بیت برای به حداکثر رساندن دقت استفاده میکند. یکی از این تکنیکها «بیت P» یا شبهبیت است. به جای صرف سه بیت برای افزایش دقت کانالهای قرمز، سبز و آبی به صورت جداگانه، BC7 یک بیت کمارزش واحد را در هر سه کانال یک نقطه پایانی به اشتراک میگذارد و عملاً شبکه دقت را بدون هدر دادن پهنای باند دو برابر میکند.[1][4]
بهینهسازی دیگر، شکستن تباهیدگی است. از آنجا که جابجا کردن دو نقطه پایانی یک خط رنگی به سادگی شاخصهای امتداد آن را معکوس میکند، رمزگذار میتواند تضمین کند که اولین شاخص در هر زیرمجموعه همیشه با صفر شروع میشود. با ضمنی کردن آن صفر، BC7 آن را به طور کامل کنار میگذارد و دقیقاً یک بیت در هر زیرمجموعه صرفهجویی میکند. این ترفند به فرمت اجازه میدهد تا ۶۴ بیت داده شاخص را در یک فضای ۶۳ بیتی ذخیره کند.[1][4]
شفافیت آلفا نیز به همین شکل پویا است. فرمتهای قدیمیتر مانند BC3 یک بلوک ۶۴ بیتی مجزا را صرفاً برای دادههای آلفا ضمیمه میکردند و با آن به عنوان یک تصویر کاملاً جداگانه رفتار میکردند.
فرمت BC7 آلفا را مستقیماً در محموله ۱۲۸ بیتی در هم میآمیزد و بیتها را به صورت پویا بر اساس اینکه آیا شفافیت با کانالهای رنگی همبستگی دارد یا خیر، تخصیص میدهد. اگر کانال آلفا همبستگی بالایی با دادههای RGB داشته باشد، رمزگذار میتواند از یک مجموعه شاخص واحد برای هر دو استفاده کند و بیتهایی را برای دقت بالاتر نقطه پایانی آزاد کند.[2][5]
بازاریابی پیرامون BC7 اغلب آن را به عنوان ارائهدهنده بافتهای «با کیفیت بالا» یا «تقریباً بدون اتلاف» توصیف میکند. این چارچوببندی، واقعیت نحوه عملکرد فرمت را پنهان میکند: این فرمت در واقع یک تقریب به شدت کوانتیدهشده و همراه با اتلاف است. وفاداری بصری از حفظ دادههای اصلی ناشی نمیشود، بلکه حاصل گسترش عظیم فضای جستجوی رمزگذاری است. با هشت حالت، ۶۴ افراز و ترکیبات متغیر نقاط پایانی، یک فشردهساز باید هزاران جایگشت را برای هر ۱۶ پیکسل ارزیابی کند.[5][6]
آزمایش جامع هر ترکیب برای یک بازی مدرن که حاوی گیگابایتها بافت است، از نظر محاسباتی غیرممکن است. رمزگذارها برای حدس زدن کمضررترین گزینه، به روشهای اکتشافی تبرید شبیهسازیشده و گرادیان کاهشی متکی هستند. این امر یک عدم تقارن شدید ایجاد میکند. رمزگذاری یک بافت به BC7 میتواند ساعتها روی یک پردازنده چند هستهای طول بکشد و کل بار محاسباتی را به خط لوله ساخت توسعهدهنده منتقل کند.[4][6]
در عوض، فرآیند رمزگشایی آنی است. سختافزار گرافیکی دارای سیلیکون اختصاصی است که بلوک ۱۲۸ بیتی را میخواند، بیتهای حالت را بررسی میکند و یک فشردهگشایی با هزینه ثابت را در کسری از نانوثانیه اجرا میکند. علاوه بر این، مشخصات گروه کرونوس الزامی میکند که سختافزار فشردهگشایی BC7 باید از نظر بیتی دقیق باشد. تصویری که روی یک پردازنده اینتل فشرده شده است، دقیقاً به همان مقادیر پیکسلی روی یک پردازنده گرافیکی AMD یا انویدیا رمزگشایی خواهد شد.[1][2]
این استانداردسازی سختگیرانه از مغایرتهای بصری ظریفی که فرمتهای قدیمیتر و با تعریف سستتر را آزار میداد - جایی که سازندگان مختلف ریاضیات درونیابی کمی متفاوتی را پیادهسازی میکردند - جلوگیری میکند. با قفل کردن خروجی دقیق رمزگشا، BC7 تضمین میکند که هدف هنری در تمام سختافزارهای سازگار حفظ میشود.[2][4]
فرمت BC7 نشاندهنده حد فیزیکی چیزی است که میتوان در یک محدودیت ۱۲۸ بیتی به دست آورد. این فرمت به طور جادویی پهنای باند ایجاد نمیکند؛ بلکه واژگانی بسیار انعطافپذیر برای توصیف تغییرات رنگ محلی فراهم میکند و افزایش تصاعدی زمان رمزگذاری را با افزایش خطی در وفاداری رندرینگ مبادله میکند. مرز بعدی در فشردهسازی بافت از گنجاندن دادههای بیشتر در ۱۶ بایت به دست نخواهد آمد، بلکه از معماریهایی حاصل میشود که بلوک ۴x۴ را به طور کامل دور میزنند.[6]
اصطلاحات کلیدی
- فشردهسازی بلوکی (BCn)
- خانوادهای از فرمتهای فشردهسازی بافت همراه با اتلاف که یک تصویر را به شبکههایی با اندازه ثابت، معمولاً ۴x۴ پیکسل، تقسیم میکنند تا دسترسی به حافظه در زمان ثابت را تضمین کنند.
- نقطه پایانی
- یک مقدار رنگی خاص در فضای سهبعدی RGB که به عنوان لنگر استفاده میشود؛ سایر رنگهای بلوک با درونیابی بین دو نقطه پایانی محاسبه میشوند.
- افراز
- یک شکل از پیشتعریفشده که ۱۶ پیکسل یک بلوک ۴x۴ را به دو یا سه زیرمجموعه متمایز تقسیم میکند و به هر زیرمجموعه اجازه میدهد از جفت نقاط پایانی خود استفاده کند.
- شکستن تباهیدگی
- یک تکنیک بهینهسازی که در آن جابجا کردن ترتیب دو نقطه پایانی به رمزگذار اجازه میدهد تا یک بیت از دادههای شاخص را حذف کرده و در فضا صرفهجویی کند.
- بیت P (شبهبیت)
- یک بیت کمارزش مشترک که به طور همزمان روی کانالهای قرمز، سبز و آبی یک نقطه پایانی اعمال میشود تا دقت را بدون مصرف سه بیت مجزا افزایش دهد.
پرسشهای متداول
چرا از فشردهسازی استاندارد تصویر مانند JPEG یا PNG استفاده نمیشود؟
فرمتهای استاندارد از فشردهسازی با طول متغیر استفاده میکنند، به این معنی که پردازنده گرافیکی مجبور است کل تصویر را فقط برای خواندن یک پیکسل فشردهگشایی کند. فشردهسازی بلوکی تضمین میکند که هر شبکه ۴x۴ دقیقاً ۱۲۸ بیت باشد و به سختافزار اجازه میدهد پیکسلهای تصادفی را فوراً واکشی کند.
فرمت BC7 چه تفاوتی با فرمتهای قدیمیتر مانند BC1 دارد؟
فرمت BC1 از ۶۴ بیت در هر بلوک استفاده میکند و هر ۱۶ پیکسل را روی یک خط رنگی واحد تحمیل میکند که باعث نواربندی میشود. فرمت BC7 از ۱۲۸ بیت استفاده میکند و از طریق افرازها اجازه میدهد تا سه خط رنگی مجزا در هر بلوک وجود داشته باشد که لبههای تیز و گرادیانهای پیچیده را حفظ میکند.
چرا فشردهسازی یک بافت به BC7 اینقدر طول میکشد؟
از آنجا که BC7 دارای هشت حالت، ۶۴ شکل افراز و دقتهای متغیر نقاط پایانی است، رمزگذار باید هزاران ترکیب ممکن را برای هر ۱۶ پیکسل ارزیابی کند تا پیکربندیای را بیابد که کمترین خطای بصری را تولید میکند.
آیا BC7 از شفافیت پشتیبانی میکند؟
بله. برخلاف فرمتهای قدیمیتر که یک بلوک مجزا برای دادههای آلفا ضمیمه میکردند، BC7 آلفا را مستقیماً در محموله ۱۲۸ بیتی در هم میآمیزد و بیتها را به صورت پویا بر اساس اینکه آیا شفافیت با کانالهای رنگی همبستگی دارد یا خیر، تخصیص میدهد.
بررسی عمیق دیدگاهها
دیدگاه معمار سختافزار
طراحی سیلیکون، دسترسی قابل پیشبینی به حافظه را بر ظرافت الگوریتمی ترجیح میدهد.
برای معماران پردازندههای گرافیکی، مزیت اصلی BC7 ردپای سخت و ۱۲۸ بیتی آن است. طرحهای فشردهسازی با طول متغیر مانند ZIP یا JPEG برای نمونهبرداری بافت بیفایده هستند، زیرا یک برنامه سایهزن نیاز دارد پیکسلهای تصادفی را در زمان O(1) واکشی کند. با تضمین اینکه هر بلوک ۴x۴ دقیقاً ۱۶ بایت است، کنترلکننده حافظه میتواند آدرس فیزیکی دقیق هر پیکسل را فوراً محاسبه کند. الزام گروه کرونوس برای رمزگشایی دقیق در سطح بیت، بیشتر تضمین میکند که پیادهسازی سیلیکونی در بین تمام سازندگان یکسان است و نیاز به راهحلهای سطح درایور را از بین میبرد.
دیدگاه مهندس فشردهسازی
انعطافپذیری این فرمت، یک معمای ترکیبیاتی غیرقابل حل در طول رمزگذاری ایجاد میکند.
در حالی که رمزگشایی ثابت و سریع است، رمزگذاری BC7 تمرینی در مصالحه اکتشافی است. یک فشردهساز نمیتواند تمام هشت حالت، ۶۴ افراز و میلیونها ترکیب نقطه پایانی را برای هر بلوک ۱۶ پیکسلی در یک بافت گیگابایتی آزمایش کند. در عوض، مهندسان باید الگوریتمهایی بنویسند که از تبرید شبیهسازیشده و گرادیان کاهشی برای حدس زدن سریع بهترین پیکربندی استفاده کنند. در نتیجه، «کیفیت» یک بافت BC7 کاملاً به فشردهساز نرمافزاری مورد استفاده بستگی دارد و حداکثر وفاداری نظری این فرمت به ندرت در عمل به دست میآید.
دیدگاه هنرمند فنی
فرمت BC7 با مدیریت خودکار تعاملات پیچیده رنگ و آلفا، خط لوله داراییها را ساده میکند.
پیش از BC7، هنرمندان فنی مجبور بودند بافتهایی را که حاوی جزئیات با فرکانس بالا یا کانالهای آلفای پیچیده بودند به صورت دستی جدا کنند و اغلب آنها را در تصاویر سیاهوسفید مجزا بستهبندی میکردند تا از نواربندی مخرب BC1 و BC3 جلوگیری کنند. توانایی BC7 در تخصیص پویای بیتها بین RGB و آلفا، و استفاده آن از افرازهای چندگانه، به این معنی است که هنرمندان میتوانند بافتها را به طور طبیعی خلق کنند. این فرمت پیچیدگی را جذب میکند و به یک بلوک ۱۲۸ بیتی واحد اجازه میدهد تا لبههای تیز و گرادیانهای نرم را به طور همزمان و بدون نیاز به هکهای دستی بستهبندی کانالها مدیریت کند.
- مهندسان فشردهسازی
- بر چالش الگوریتمی پیمایش فضای جستجوی عظیم BC7 در طول رمزگذاری تمرکز دارد.
- معماران سختافزار
- بر ضرورت دسترسی به حافظه با هزینه ثابت و پیادهسازی دقیق سیلیکونی در سطح بیت تمرکز دارد.
- هنرمندان فنی
- بر وفاداری بصری و حذف راهحلهای دستی بستهبندی کانالها تمرکز دارد.
دیدگاههایی که این گزارش پوشش نداده
- توسعهدهندگان پردازندههای گرافیکی موبایل
- پژوهشگران فشردهسازی عصبی
منابع
[1]Microsoft Learnمعماران سختافزارBC7 Format
مطالعه در Microsoft Learn →
[2]The Khronos Groupمعماران سختافزارBPTC Texture Compression
مطالعه در The Khronos Group →
[3]Microsoft Learnمعماران سختافزارBC7 Format Mode Reference
مطالعه در Microsoft Learn →
[4]Reedbetaمهندسان فشردهسازیUnderstanding BCn Texture Compression Formats
مطالعه در Reedbeta →
[5]Conn Buraniczهنرمندان فنیBlock Compression (BC1-BC7)
مطالعه در Conn Buranicz →
[6]تیم سردبیری کوهستانمهندسان فشردهسازیتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در فناوری
مشاهده همه →پروتکلهای نمایشگر
پروتکل نرخ تازهسازی متغیر (VRR) چگونه مشکل بریدگی و پرش تصویر را حل میکند؟
6 منبع
معیارهای سختافزاری
توهم چرخه کار: چرا گرافیکی که ۱۰۰٪ درگیر است، هنوز هستههای پردازشی بیکار دارد؟
7 منبع
فناوری نمایشگر
تفاوت ماهوی بین GtG و MPRT: چرا زمان پاسخ ۱ میلیثانیه لزوماً به معنای وضوح حرکت نیست؟
5 منبع
فناوری رندرینگ
مکانیک رهگیری پرتو: چگونه ردیابی مسیر، شطرنجیسازی و RT در بازیهای مدرن همزیستی میکنند
6 منبع
نظرات
هر زاویه. هر روز.
اخبار فناوری با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.





