سیستم فشرده سازی بافت منبع باز Google و Binomial Basis Universal

گوگل و دوجمله ای باز شد متون منبع مبانی جهانییک کدک برای فشرده سازی بافت کارآمد و یک فرمت فایل جهانی ".basis" مرتبط برای توزیع بافت های مبتنی بر تصویر و ویدئو. کد پیاده سازی مرجع به زبان C++ و نوشته شده است عرضه شده دارای مجوز Apache 2.0.

پایه یونیورسال مکمل های قبلی است منتشر شده سیستم فشرده سازی داده های سه بعدی Draco و سعی در حل مشکل با تامین بافت برای GPU دارد. تا به حال، توسعه دهندگان به انتخاب بین فرمت های سطح پایین که عملکرد بالایی دارند، اما مختص GPU هستند و فضای دیسک زیادی را اشغال می کنند، و سایر فرمت هایی که به کاهش اندازه می رسند، اما نمی توانند با بافت های GPU در عملکرد رقابت کنند، محدود بوده اند.

فرمت Basis Universal به شما اجازه می دهد تا به عملکرد بافت های گرافیکی بومی دست یابید، اما سطح فشرده سازی بالاتری را فراهم می کند.
Basis یک فرمت میانی است که کدگذاری سریع بافت‌های GPU را به فرمت‌های مختلف سطح پایین برای استفاده در سیستم‌های دسکتاپ و دستگاه‌های تلفن همراه قبل از استفاده فراهم می‌کند. در حال حاضر فرمت‌های PVRTC1 (4bpp RGB)، BC7 (6 حالت RGB)، BC1-5، ETC1 و ETC2 پشتیبانی می‌شوند. پشتیبانی آینده برای فرمت ASTC (RGB یا RGBA) و حالت های 4/5 RGBA برای BC7 و 4bpp RGBA برای PVRTC1 انتظار می رود.

سیستم فشرده سازی بافت منبع باز Google و Binomial Basis Universal

بافت‌ها در قالب پایه 6 تا 8 برابر حافظه ویدیویی کمتری اشغال می‌کنند و به انتقال تقریباً نیمی از بافت‌های معمولی بر اساس فرمت JPEG و 10 تا 25 درصد کمتر از بافت‌ها در حالت RDO نیاز دارند. به عنوان مثال، با حجم تصویر JPEG 891 کیلوبایت و بافت ETC1 1 مگابایت، حجم داده ها در فرمت پایه 469 کیلوبایت در حالت بالاترین کیفیت است. هنگام قرار دادن بافت ها در حافظه ویدیویی، بافت های JPEG و PNG مورد استفاده در تست ها 16 مگابایت حافظه مصرف می کردند، در حالی که بافت های موجود در
اساساً برای ترجمه به BC2، PVRTC1 و ETC1 به 1 مگابایت حافظه و برای ترجمه به BC4 به 7 مگابایت حافظه نیاز است.

سیستم فشرده سازی بافت منبع باز Google و Binomial Basis Universal

فرآیند انتقال برنامه های کاربردی موجود به Basis Universal بسیار ساده است. کافی است با استفاده از ابزار "basisu" ارائه شده توسط پروژه، بافت ها یا تصاویر موجود را در قالبی جدید کدگذاری کنید و سطح کیفیت مورد نیاز را انتخاب کنید. در مرحله بعد، در برنامه، قبل از کد رندر، باید transcoder baseu را مقداردهی کنید، که وظیفه ترجمه فرمت میانی را به فرمت پشتیبانی شده توسط GPU فعلی بر عهده دارد. در همان زمان، تصاویر در کل زنجیره پردازش فشرده باقی می‌مانند، از جمله اینکه به صورت فشرده در GPU بارگذاری می‌شوند. به جای رمزگشایی پیشگیرانه کل تصویر، GPU به طور انتخابی تنها بخش های ضروری تصویر را رمزگشایی می کند.

از ذخیره آرایه‌های بافت ناهمگن (نقشه‌های مکعبی)، بافت‌های حجمی، آرایه‌های بافت، سطوح mipmap، توالی‌های ویدیویی یا قطعات بافت دلخواه در یک فایل پشتیبانی می‌کند. به عنوان مثال، می توان مجموعه ای از تصاویر را در یک فایل بسته بندی کرد تا ویدیوهای کوچکی ایجاد کرد، یا چندین بافت را با استفاده از یک پالت مشترک برای همه تصاویر ترکیب کرد و الگوهای تصویر معمولی را حذف کرد. پیاده سازی رمزگذار پایه جهانی از رمزگذاری چند رشته ای با استفاده از OpenMP پشتیبانی می کند. رمزگذار در حال حاضر فقط در حالت تک رشته ای کار می کند.

علاوه بر این در دسترس رمزگشای پایه جهانی برای مرورگرها، ارائه شده در قالب WebAssembly، که می تواند در برنامه های کاربردی وب مبتنی بر WebGL استفاده شود. در نهایت، گوگل قصد دارد از Basis Universal در تمام مرورگرهای اصلی پشتیبانی کند و آن را به عنوان یک قالب بافت قابل حمل برای WebGL و مشخصات آینده تبلیغ کند. WebGPUکه از نظر مفهومی شبیه به API های Vulkan، Metal و Direct3D 12 است.

اشاره شده است که قابلیت جاسازی ویدیو با پردازش بعدی آن تنها در سمت GPU، Basis Universal را به یک راه حل جالب برای ایجاد رابط های کاربری پویا در WebAssembly و WebGL تبدیل می کند که می تواند همزمان صدها ویدیوی کوچک را با حداقل بار CPU نمایش دهد. تا زمانی که دستورالعمل‌های SIMD در WebAssembly با کدک‌های سنتی مورد استفاده قرار نگیرند، این سطح از عملکرد هنوز قابل دستیابی نیست، بنابراین می‌توان از ویدیوی مبتنی بر بافت در مناطقی استفاده کرد که ویدیوی معمولی قابل اجرا نیست. کد با بهینه سازی های اضافی برای ویدیو در حال حاضر برای انتشار آماده می شود، از جمله قابلیت استفاده فریم های I و فریم های پی با پشتیبانی از پد تطبیقی ​​(CR).

منبع: opennet.ru

اضافه کردن نظر