موتورهای رندر جدید برای OpenGL و Vulkan به GTK اضافه شده است

توسعه دهندگان کتابخانه GTK در دسترس بودن دو موتور رندر جدید - "ngl" و "vulkan" را با استفاده از OpenGL (GL 3.3+ و GLES 3.0+) و APIهای گرافیکی Vulkan اعلام کرده اند. موتورهای جدید در نسخه آزمایشی GTK 4.13.6 گنجانده شده است. در شاخه آزمایشی GTK، موتور ngl اکنون به طور پیش فرض استفاده می شود، اما اگر مشکلات قابل توجهی در شاخه پایدار بعدی 4.14 شناسایی شود، موتور رندر قدیمی "gl" برگردانده می شود.

موتورهای جدید به صورت یکپارچه قرار می گیرند و از یک پایه کد واحد مونتاژ می شوند. ماهیت یکسان سازی این است که از Vulkan API به عنوان پایه استفاده می شود که در بالای آن با در نظر گرفتن تفاوت های OpenGL و Vulkan، یک سطح انتزاعی جداگانه برای OpenGL ایجاد شده است. این رویکرد امکان استفاده از یک زیرساخت مشترک در هر دو موتور را برای پردازش نمودار صحنه، تبدیل‌ها، بافت‌های کش و گلیف‌ها فراهم کرد. Unification همچنین به طور قابل توجهی نگهداری از کد پایه هر دو موتور و به روز نگه داشتن آنها و همگام سازی آنها را ساده کرد.

برخلاف موتور قدیمی gl که از یک سایه زن ساده جداگانه برای هر نوع گره رندر استفاده می کرد و به طور دوره ای داده ها را در حین رندر خارج از صفحه مرتب می کرد، موتورهای جدید به جای رندر خارج از صفحه از یک سایه زن پیچیده (ubershader) استفاده می کنند که داده ها را از بافر تفسیر می کند. . در شکل فعلی خود، پیاده سازی جدید هنوز از نظر سطح بهینه سازی از اجرای قبلی عقب است، زیرا تمرکز اصلی در مرحله فعلی بر عملکرد صحیح و سهولت تعمیر و نگهداری است.

ویژگی های جدیدی که در موتور قدیمی gl وجود ندارد:

  • صاف کردن کانتور - به شما این امکان را می دهد تا جزئیات ظریف را حفظ کنید و به خطوط صاف تری برسید.
    موتورهای رندر جدید برای OpenGL و Vulkan به GTK اضافه شده است
  • تشکیل شیب های دلخواه، که می تواند از هر تعداد رنگ استفاده کند و ضد آلیاسینگ (در موتور gl فقط شیب های خطی، شعاعی و مخروطی با 6 رنگ توقف پشتیبانی می شود).
    موتورهای رندر جدید برای OpenGL و Vulkan به GTK اضافه شده است
  • مقیاس کسری، که به شما امکان می دهد مقادیر غیرصحیح را تنظیم کنید، به عنوان مثال، هنگام استفاده از مقیاس 125٪ برای یک پنجره 1200x800، بافر 1500x1000 اختصاص داده می شود و نه 2400x1600 مانند موتور قدیمی.
  • پشتیبانی از فناوری DMA-BUF برای استفاده از چندین پردازنده گرافیکی و بارگذاری عملیات فردی به GPU دیگر.
  • بسیاری از گره های رندر که در پیاده سازی قدیمی مشکل داشتند به درستی پردازش می شوند.

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

در آینده، بر اساس مدل یکپارچه جدید، ایجاد موتورهای رندر با استفاده از Metal در macOS و DirectX در ویندوز مستثنی نیست، اما ایجاد چنین موتورهایی با استفاده از زبان های دیگر برای شیدرها پیچیده است ("ngl" موتورهای "وولکان" از زبان GLSL استفاده می کنند، بنابراین برای Metal و Direct باید سایه زن ها را کپی کنند یا از یک لایه بر اساس جعبه ابزار SPIRV-Cross استفاده کنند).

برنامه‌های آینده شامل ارائه پشتیبانی HDR و ابزارهایی برای مدیریت صحیح رنگ، پشتیبانی از رندر Path در سمت GPU، امکان رندر کردن حروف، رندر خارج از جریان و بهینه‌سازی عملکرد برای دستگاه‌های قدیمی و کم مصرف است. در شکل فعلی، عملکرد موتور "ولکان" به عملکرد موتور "gl" قدیمی نزدیک است. موتور "ngl" از نظر عملکرد نسبت به موتور "gl" قدیمی پایین‌تر است، اما عملکرد موجود برای رندر در 60 یا 144 FPS کافی است. انتظار می رود پس از بهینه سازی وضعیت تغییر کند.

منبع: opennet.ru

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