OpenGL と Vulkan 用の新しいレンダリング エンジンが GTK に追加されました

GTK ライブラリの開発者は、OpenGL (GL 3.3+ および GLES 3.0+) と Vulkan グラフィックス API を使用する 4.13.6 つの新しいレンダリング エンジン「ngl」と「vulkan」の利用可能性を発表しました。新しいエンジンは GTK 4.14 の実験的リリースに含まれています。実験的な GTK ブランチでは、デフォルトで ngl エンジンが使用されていますが、次の安定したブランチ XNUMX で重大な問題が特定された場合は、古い「gl」レンダリング エンジンが戻されます。

新しいエンジンは統合され、単一のコード ベースから組み立てられたものとして位置付けられます。統合の本質は、Vulkan API が基礎として使用され、その上に OpenGL と Vulkan の違いを考慮して OpenGL 用に別の抽象化レベルが作成されていることです。このアプローチにより、両方のエンジンでシーン グラフ、変換、テクスチャとグリフのキャッシュの処理に共通のインフラストラクチャを使用できるようになりました。また、統合により、両方のエンジンのコード ベースのメンテナンスが大幅に簡素化され、それらを最新の状態に保ち、同期を保つことができました。

レンダー ノードのタイプごとに個別の単純なシェーダーを使用し、オフスクリーン レンダリング中にデータを定期的に再ソートしていた古い gl エンジンとは異なり、新しいエンジンはオフスクリーン レンダリングの代わりに、バッファーからのデータを解釈する複雑なシェーダー (ubershader) を使用します。 。現在の段階で主に焦点を当てているのは正しい操作とメンテナンスの容易さであるため、現在の形式では、新しい実装は最適化のレベルの点で古い実装よりもまだ遅れています。

古い gl エンジンにはない新機能:

  • 輪郭のスムージング - 細かいディテールを保持し、より滑らかな輪郭を実現できます。
    OpenGL と Vulkan 用の新しいレンダリング エンジンが GTK に追加されました
  • 任意の数の色とアンチエイリアスを使用できる任意のグラデーションの形成 (GL エンジンでは、6 ストップ カラーを使用した線形、放射状、円錐形のグラデーションのみがサポートされていました)。
    OpenGL と Vulkan 用の新しいレンダリング エンジンが GTK に追加されました
  • 分数スケール。整数以外のスケール値を設定できます。たとえば、125x1200 のウィンドウに 800% のスケールを使用する場合、古いエンジンのような 1500x1000 ではなく、2400x1600 のバッファが割り当てられます。
  • 複数の GPU を使用し、個々の操作を別の GPU にオフロードするための DMA-BUF テクノロジーのサポート。
  • 古い実装で問題があった多くのレンダリング ノードが正しく処理されます。

新しいエンジンの制限には、非整数値 (小数点位置) と GLshader ノードによる位置決めがサポートされていないことが含まれます。これらは古いエンジンの機能に大きく結びついており、サポートを追加した後は不要になりました。マスク (マスク) を備えたノードと透明度を備えたテクスチャ。また、ドライバーの操作方法の変更により、グラフィックドライバーに問題が発生する可能性があることにも言及されています。

将来的には、新しい統一モデルに基づいて、macOS の Metal や Windows の DirectX を使用したレンダリング エンジンの作成が除外されませんが、そのようなエンジンの作成は、シェーダに他の言語 (「ngl」) を使用するため複雑になります。 」および「vulkan」エンジンは GLSL 言語を使用するため、Metal および Direct の場合、シェーダを複製するか、SPIRV-Cross ツールキットに基づくレイヤーを使用する必要があります)。

将来の計画には、HDR サポートと正しいカラー管理のためのツールの提供、GPU 側でのパス レンダリングのサポート、グリフのレンダリング機能、オフストリーム レンダリング、および古いデバイスや低電力デバイスのパフォーマンスの最適化が含まれます。現在の形では、「バルカン」エンジンの性能は旧型の「gl」エンジンの性能に近づいています。 「ngl」エンジンは、古い「gl」エンジンに比べて性能は劣りますが、60 FPS または 144 FPS でのレンダリングには十分な性能が得られます。最適化後は状況が変わることが予想されます。

出所: オープンネット.ru

コメントを追加します