رفتن به محتوای اصلی
Koohestun
بررسی عمیق کوهستانفشرده‌سازی بافتگزارش تشریحی· 7 دقیقه مطالعه· در فناوری

محدودیت ۱۲۸ بیتی: فشرده‌سازی بافت BC7 چگونه بلوک‌های پیکسلی ۴x۴ را تقسیم می‌کند

فرمت BC7 با دو برابر کردن اندازه بلوک به ۱۲۸ بیت و معرفی ۶۴ شکل افراز، به سخت‌افزار گرافیکی اجازه می‌دهد تا چندین خط رنگی را درون یک شبکه ۱۶ پیکسلی درون‌یابی کند. این فرمت در واقع افزایش تصاعدی زمان رمزگذاری را فدای رمزگشایی سخت‌افزاری دقیق و با هزینه ثابت می‌کند.

به قلم کاوان رامین

مهندسان فشرده‌سازی 40%معماران سخت‌افزار 35%هنرمندان فنی 25%
مهندسان فشرده‌سازی
بر چالش الگوریتمی پیمایش فضای جستجوی عظیم BC7 در طول رمزگذاری تمرکز دارد.
معماران سخت‌افزار
بر ضرورت دسترسی به حافظه با هزینه ثابت و پیاده‌سازی دقیق سیلیکونی در سطح بیت تمرکز دارد.
هنرمندان فنی
بر وفاداری بصری و حذف راه‌حل‌های دستی بسته‌بندی کانال‌ها تمرکز دارد.

دیدگاه‌هایی که این گزارش پوشش نداده

  • توسعه‌دهندگان پردازنده‌های گرافیکی موبایل
  • پژوهشگران فشرده‌سازی عصبی

یک بلوک ۴x۴ از پیکسل‌ها در بافت یک بازی ویدیویی مدرن، زمانی که با استفاده از فرمت فشرده‌سازی BC7 رمزگذاری می‌شود، دقیقاً ۱۲۸ بیت از حافظه را اشغال می‌کند. این ردپای ۱۶ بایتی که توسط مایکروسافت در مشخصات دایرکت‌اکس ۱۱ استاندارد شده است، یک محدودیت فیزیکی سخت را نشان می‌دهد. در درون همین ۱۲۸ بیت، واحد پردازش گرافیکی باید اطلاعات رنگ و آلفای کافی را استخراج کند تا ۱۶ پیکسل مجزا را روی صفحه نمایشگر رسم کند، آن هم بدون ایجاد نواربندی و حالت بلوکی که روش‌های فشرده‌سازی پیشین را آزار می‌داد. سازوکاری که این امر را ممکن می‌سازد، افزایش کورکورانه و زورکی وضوح تصویر نیست، بلکه یک تغییر ساختاری در نحوه افراز و درون‌یابی خود فضای رنگی است.[1]

ریاضیات بنیادین حافظه بافت بی‌رحم است. داده‌های فشرده‌نشده ۸ بیتی RGBA به ۳۲ بیت برای هر پیکسل نیاز دارند. یک شبکه ۴x۴ شامل ۱۶ پیکسل در مجموع ۵۱۲ بیت می‌شود. فرمت BC7 این مقدار را به زور در ۱۲۸ بیت جا می‌دهد و به نسبت فشرده‌سازی ۴:۱ می‌رسد. اگرچه این نسبت چشمگیر به نظر می‌رسد، اما در واقعیت نسبت به فرمت‌های پیش از خود کمتر تهاجمی است. در سال ۱۹۹۹، شرکت S3 Graphics فرمت S3TC (که بعداً به عنوان DXTC یا BC1 پذیرفته شد) را معرفی کرد که همان بلوک ۴x۴ را تنها در ۶۴ بیت فشرده می‌کرد. فرمت BC1 در زمان خود انقلابی بود، اما نسبت فشرده‌سازی ۸:۱ آن وقتی روی تصاویر پیچیده اعمال می‌شد، از نظر بصری مخرب بود.[4][5]

فرمت BC7 یک بلوک استاندارد ۵۱۲ بیتی از پیکسل‌های فشرده‌نشده را به یک ردپای ثابت ۱۲۸ بیتی کاهش می‌دهد.

سازوکار هسته‌ای تمام فشرده‌سازی‌های بلوکی، «خط رنگی» است. همان‌طور که نیتن رید، برنامه‌نویس گرافیک، در تحلیل سال ۲۰۱۲ خود از این فرمت‌ها اشاره کرد، الگوریتم دو رنگ نقطه پایانی را در یک فضای سه‌بعدی RGB تعریف کرده و یک خط راست را بین آن‌ها درون‌یابی می‌کند. سپس به هر پیکسل در بلوک ۴x۴ یک شاخص ۲ بیتی یا ۳ بیتی اختصاص داده می‌شود که رنگ آن را به نزدیک‌ترین نقطه روی آن خط واحد متصل می‌کند. این روش برای یک گرادیان نرم از آسمان آبی، جایی که تمام رنگ‌های محلی به طور طبیعی در امتداد یک مسیر واحد قرار می‌گیرند، بی‌نقص کار می‌کند.[4]

اما فرض تک‌خطی به محض اینکه یک بلوک حاوی جزئیات با فرکانس بالا باشد، در هم می‌شکند. رید می‌نویسد: «اکثر فرمت‌های BCn در هر جایی که سه رنگ بسیار متفاوت در یک بلوک واحد حضور داشته باشند، نتایج بی‌کیفیتی ارائه می‌دهند.» پیکسل‌های قرمز، سبز و آبی از نظر فیزیکی نمی‌توانند روی یک خط راست در فضای سه‌بعدی قرار بگیرند. وقتی آن‌ها به زور روی یک خط قرار می‌گیرند، تصویر حاصل همان مصنوعات بلوکی و نواربندی‌شده‌ای را نشان می‌دهد که مشخصه بازی‌های سه‌بعدی اولیه بود.[4]

مایکروسافت و گروه کرونوس فرمت BC7 را - که در مشخصات OpenGL با نام BPTC نیز شناخته می‌شود - دقیقاً برای حل همین محدودیت هندسی طراحی کردند، بدون اینکه ساختار بلوک ۴x۴ را کنار بگذارند. راه‌حل، افراز بود. به جای اینکه هر ۱۶ پیکسل مجبور به اشتراک‌گذاری یک جفت نقطه پایانی شوند، BC7 اجازه می‌دهد تا بلوک به دو یا سه زیرمجموعه مجزا تقسیم شود.[1][2]

هر زیرمجموعه خط رنگی مستقل خود را دریافت می‌کند. اکنون یک بلوک ۴x۴ واحد می‌تواند لبه تیز محل برخورد یک آجر قرمز با یک برگ سبز و آسمان آبی را به دقت نشان دهد، زیرا هر ناحیه به طور جداگانه درون‌یابی می‌شود. با این حال، ذخیره یک نقشه پیکسلی سفارشی برای تعریف این زیرمجموعه‌ها بیت‌های بسیار زیادی را مصرف می‌کند. در عوض، مشخصات BC7 شامل یک جدول کدگذاری‌شده سخت از ۶۴ شکل افراز از پیش‌تعریف‌شده است. رمزگذار به سادگی یک شناسه ۶ بیتی را ذخیره می‌کند تا شکلی را که بیشترین تطابق را با داده‌های تصویر دارد، انتخاب کند.[3][5]

به جای تحمیل هر ۱۶ پیکسل روی یک خط رنگی، BC7 از جدولی شامل ۶۴ شکل افراز از پیش‌تعریف‌شده برای اعمال چندین خط رنگی در هر بلوک استفاده می‌کند.

این انعطاف‌پذیری یک مشکل ساختاری ایجاد می‌کند: یک بلوک ۱۲۸ بیتی برای نگهداری همزمان سه جفت نقطه پایانی با دقت بالا، ۱۶ شاخص پیکسل و شناسه افراز بسیار کوچک است. بنابراین فرمت باید چندریخت می‌شد. فرمت BC7 این مشکل را با تعریف هشت حالت متمایز، شماره‌گذاری شده از حالت ۰ تا حالت ۷، حل می‌کند. این حالت در کم‌ارزش‌ترین بیت‌های بلوک با استفاده از یک کد یگانی - دنباله‌ای از صفرها که به یک ختم می‌شود - اعلام می‌گردد.[1][3]

این انعطاف‌پذیری یک مشکل ساختاری ایجاد می‌کند: یک بلوک ۱۲۸ بیتی برای نگهداری همزمان سه جفت نقطه پایانی با دقت بالا، ۱۶ شاخص پیکسل و شناسه افراز بسیار کوچک است.

از آنجا که این حالت چیدمان بیت‌های باقی‌مانده را دیکته می‌کند، هر بلوک می‌تواند ویژگی‌ها را بر اساس نیازهای خاص خود مبادله کند. برای مثال، حالت ۰ از سه زیرمجموعه پشتیبانی می‌کند اما نقاط پایانی را به دقت ۴ بیتی محدود می‌سازد. حالت ۶ تنها از یک زیرمجموعه پشتیبانی می‌کند اما دقت نقطه پایانی ۷ بیتی و شاخص‌های ۴ بیتی را ارائه می‌دهد، که آن را برای گرادیان‌های نرم و پیچیده‌ای که در غیر این صورت نواربندی در آن‌ها قابل مشاهده بود، ایده‌آل می‌سازد.[3]

این فرمت همچنین از بهینه‌سازی تهاجمی در سطح بیت برای به حداکثر رساندن دقت استفاده می‌کند. یکی از این تکنیک‌ها «بیت P» یا شبه‌بیت است. به جای صرف سه بیت برای افزایش دقت کانال‌های قرمز، سبز و آبی به صورت جداگانه، BC7 یک بیت کم‌ارزش واحد را در هر سه کانال یک نقطه پایانی به اشتراک می‌گذارد و عملاً شبکه دقت را بدون هدر دادن پهنای باند دو برابر می‌کند.[1][4]

بهینه‌سازی دیگر، شکستن تباهیدگی است. از آنجا که جابجا کردن دو نقطه پایانی یک خط رنگی به سادگی شاخص‌های امتداد آن را معکوس می‌کند، رمزگذار می‌تواند تضمین کند که اولین شاخص در هر زیرمجموعه همیشه با صفر شروع می‌شود. با ضمنی کردن آن صفر، BC7 آن را به طور کامل کنار می‌گذارد و دقیقاً یک بیت در هر زیرمجموعه صرفه‌جویی می‌کند. این ترفند به فرمت اجازه می‌دهد تا ۶۴ بیت داده شاخص را در یک فضای ۶۳ بیتی ذخیره کند.[1][4]

فشرده‌سازی بلوکی، رنگ‌های محلی پیکسل‌ها را با تصویر کردن آن‌ها روی یک خط راست بین دو نقطه پایانی در فضای رنگی RGB تقریب می‌زند.

شفافیت آلفا نیز به همین شکل پویا است. فرمت‌های قدیمی‌تر مانند BC3 یک بلوک ۶۴ بیتی مجزا را صرفاً برای داده‌های آلفا ضمیمه می‌کردند و با آن به عنوان یک تصویر کاملاً جداگانه رفتار می‌کردند. فرمت BC7 آلفا را مستقیماً در محموله ۱۲۸ بیتی در هم می‌آمیزد و بیت‌ها را به صورت پویا بر اساس اینکه آیا شفافیت با کانال‌های رنگی همبستگی دارد یا خیر، تخصیص می‌دهد. اگر کانال آلفا همبستگی بالایی با داده‌های RGB داشته باشد، رمزگذار می‌تواند از یک مجموعه شاخص واحد برای هر دو استفاده کند و بیت‌هایی را برای دقت بالاتر نقطه پایانی آزاد کند.[2][5]

بازاریابی پیرامون BC7 اغلب آن را به عنوان ارائه‌دهنده بافت‌های «با کیفیت بالا» یا «تقریباً بدون اتلاف» توصیف می‌کند. این چارچوب‌بندی، واقعیت نحوه عملکرد فرمت را پنهان می‌کند: این فرمت در واقع یک تقریب به شدت کوانتیده‌شده و همراه با اتلاف است. وفاداری بصری از حفظ داده‌های اصلی ناشی نمی‌شود، بلکه حاصل گسترش عظیم فضای جستجوی رمزگذاری است. با هشت حالت، ۶۴ افراز و ترکیبات متغیر نقاط پایانی، یک فشرده‌ساز باید هزاران جایگشت را برای هر ۱۶ پیکسل ارزیابی کند.[5][6]

آزمایش جامع هر ترکیب برای یک بازی مدرن که حاوی گیگابایت‌ها بافت است، از نظر محاسباتی غیرممکن است. رمزگذارها برای حدس زدن کم‌ضررترین گزینه، به روش‌های اکتشافی تبرید شبیه‌سازی‌شده و گرادیان کاهشی متکی هستند. این امر یک عدم تقارن شدید ایجاد می‌کند. رمزگذاری یک بافت به BC7 می‌تواند ساعت‌ها روی یک پردازنده چند هسته‌ای طول بکشد و کل بار محاسباتی را به خط لوله ساخت توسعه‌دهنده منتقل کند.[4][6]

در عوض، فرآیند رمزگشایی آنی است. سخت‌افزار گرافیکی دارای سیلیکون اختصاصی است که بلوک ۱۲۸ بیتی را می‌خواند، بیت‌های حالت را بررسی می‌کند و یک فشرده‌گشایی با هزینه ثابت را در کسری از نانوثانیه اجرا می‌کند. علاوه بر این، مشخصات گروه کرونوس الزامی می‌کند که سخت‌افزار فشرده‌گشایی BC7 باید از نظر بیتی دقیق باشد. تصویری که روی یک پردازنده اینتل فشرده شده است، دقیقاً به همان مقادیر پیکسلی روی یک پردازنده گرافیکی AMD یا انویدیا رمزگشایی خواهد شد.[1][2]

بیت‌های اولیه یک بلوک BC7 تعیین می‌کنند که رمزگشا باید از کدام یک از هشت حالت ساختاری برای تجزیه داده‌های باقی‌مانده استفاده کند.

این استانداردسازی سخت‌گیرانه از مغایرت‌های بصری ظریفی که فرمت‌های قدیمی‌تر و با تعریف سست‌تر را آزار می‌داد - جایی که سازندگان مختلف ریاضیات درون‌یابی کمی متفاوتی را پیاده‌سازی می‌کردند - جلوگیری می‌کند. با قفل کردن خروجی دقیق رمزگشا، BC7 تضمین می‌کند که هدف هنری در تمام سخت‌افزارهای سازگار حفظ می‌شود.[2][4]

فرمت BC7 نشان‌دهنده حد فیزیکی چیزی است که می‌توان در یک محدودیت ۱۲۸ بیتی به دست آورد. این فرمت به طور جادویی پهنای باند ایجاد نمی‌کند؛ بلکه واژگانی بسیار انعطاف‌پذیر برای توصیف تغییرات رنگ محلی فراهم می‌کند و افزایش تصاعدی زمان رمزگذاری را با افزایش خطی در وفاداری رندرینگ مبادله می‌کند. مرز بعدی در فشرده‌سازی بافت از گنجاندن داده‌های بیشتر در ۱۶ بایت به دست نخواهد آمد، بلکه از معماری‌هایی حاصل می‌شود که بلوک ۴x۴ را به طور کامل دور می‌زنند.[6]

نکات کلیدی

  1. فرمت BC7 یک بلوک ۴x۴ شامل ۱۶ پیکسل را دقیقاً در ۱۲۸ بیت فشرده کرده و به نسبت فشرده‌سازی ۴:۱ دست می‌یابد.
  2. این فرمت از ۶۴ شکل افراز از پیش‌تعریف‌شده استفاده می‌کند تا امکان ایجاد حداکثر سه خط رنگی مستقل در هر بلوک را فراهم کند.
  3. هشت حالت ساختاری متمایز به رمزگذار اجازه می‌دهد تا دقت نقاط پایانی را با دقت شاخص‌ها مبادله و تنظیم کند.
  4. رمزگشایی سخت‌افزاری از نظر بیتی کاملاً دقیق است و در زمان O(1) اجرا می‌شود که رندرینگ یکپارچه را در بین سازندگان مختلف تضمین می‌کند.
  5. رمزگذاری به الگوریتم‌های اکتشافی برای پیمایش فضای جستجوی عظیم نیاز دارد که این امر فشرده‌سازی را از نظر محاسباتی بسیار پرهزینه می‌کند.

اصطلاحات کلیدی

فشرده‌سازی بلوکی (BCn)
خانواده‌ای از فرمت‌های فشرده‌سازی بافت همراه با اتلاف که یک تصویر را به شبکه‌هایی با اندازه ثابت، معمولاً ۴x۴ پیکسل، تقسیم می‌کنند تا دسترسی به حافظه در زمان ثابت را تضمین کنند.
نقطه پایانی
یک مقدار رنگی خاص در فضای سه‌بعدی RGB که به عنوان لنگر استفاده می‌شود؛ سایر رنگ‌های بلوک با درون‌یابی بین دو نقطه پایانی محاسبه می‌شوند.
افراز
یک شکل از پیش‌تعریف‌شده که ۱۶ پیکسل یک بلوک ۴x۴ را به دو یا سه زیرمجموعه متمایز تقسیم می‌کند و به هر زیرمجموعه اجازه می‌دهد از جفت نقاط پایانی خود استفاده کند.
شکستن تباهیدگی
یک تکنیک بهینه‌سازی که در آن جابجا کردن ترتیب دو نقطه پایانی به رمزگذار اجازه می‌دهد تا یک بیت از داده‌های شاخص را حذف کرده و در فضا صرفه‌جویی کند.
بیت P (شبه‌بیت)
یک بیت کم‌ارزش مشترک که به طور همزمان روی کانال‌های قرمز، سبز و آبی یک نقطه پایانی اعمال می‌شود تا دقت را بدون مصرف سه بیت مجزا افزایش دهد.

منابع

پوشش منابع

6 منبع

3 دیدگاه شناسایی‌شده

مهندسان فشرده‌سازی 40%معماران سخت‌افزار 35%هنرمندان فنی 25%
  1. [1]Microsoft Learnمعماران سخت‌افزار

    BC7 Format

    مطالعه در Microsoft Learn
  2. [2]The Khronos Groupمعماران سخت‌افزار

    BPTC Texture Compression

    مطالعه در The Khronos Group
  3. [3]Microsoft Learnمعماران سخت‌افزار

    BC7 Format Mode Reference

    مطالعه در Microsoft Learn
  4. [4]Reedbetaمهندسان فشرده‌سازی

    Understanding BCn Texture Compression Formats

    مطالعه در Reedbeta
  5. [5]Conn Buraniczهنرمندان فنی

    Block Compression (BC1-BC7)

    مطالعه در Conn Buranicz
  6. [6]تیم سردبیری کوهستانمهندسان فشرده‌سازی

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت فناوری اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.