Learn · concepts

ナノVGとは?OpenGLのためのベクターグラフィックス

NanoVGはOpenGL用の、アンチエイリアシング処理された小さな2Dベクトルグラフィックスライブラリです。MinecraftクライアントはLWJGLを通じてそれを使用し、シャープなHUDやインターフェースを描画します.

TRtrolPublished 1 min read

ナノVGとは何ですか??

NanoVGは、OpenGL向けの、アンチエイリアシング処理されたベクターグラフィックスライブラリで、C言語で記述されています。滑らかなエッジで2D形状、テキスト、グラデーションを描画するコンパクトなAPIを提供します。Minecraftクライアントでは、LWJGLバインディングを通じてアクセスでき、Javaコードがゲームの上に鮮明なHUDやメニューを描画できます。意図的に小型に設計されており、ライブラリ全体が単一のCファイルで構成され、絞られたAPIを備えていることが、グラフィックスデモや軽量UIレイヤーに採用される理由の一つです。重いエンジンコードにはあまり使用されません

ナノVGが何をするか

NanoVGはOpenGLを介してGPU上で2Dベクターグラフィックスをレンダリングします。パス(線、曲線、矩形、円)で形状を記述し、それらを塗りつぶしたり、輪郭線を描画したりします。ライブラリはアンチエイリアシングを処理するため、ビットマップ画像が拡大されたときにブロック状になることなく、あらゆるサイズでエッジが滑らかに保たれます。レンダリングがパスベースであるため、開発者はプリベイクされた画像ではなく、プリミティブから丸みを帯びたパネル、グラデーション、アウトラインを構築できます。

主な利点はスケーラビリティです。ビットマップ画像は拡大するとぼやけたり、ピクセル化したりします。ベクター形状は、数学的に定義されているため、プリラスタライズされた固定サイズではなく、あらゆる解像度で鮮明さを保ちます。これにより、GUIスケールや表示サイズ全体で一貫した外観を維持できます

なぜ Minecraft お客様がそれをお使いになります

クライアントはMinecraft上に独自のインターフェースを描画します。配列リスト、メニュー、形状インジケーター、カスタムHUD要素などです。NanoVGは、解像度に依存せず、滑らかなベクター形状とテキストを描画するためのクリーンな方法を提供します。

レンダリングがパスベースであるため、開発者はプリベイクされた画像ではなく、プリミティブから丸みを帯びたパネル、グラデーション、アウトラインを構築できます。これは、同じボタンテクスチャのさまざまなサイズのバージョンを100個ずつ同梱するよりも効率的で柔軟です。

NanoVGとLWJGL

MinecraftとそのMODはJVM上で動作しますが、NanoVGはCライブラリです。LWJGLがそのギャップを埋めます。LWJGLは、NanoVGやOpenGLなどのネイティブライブラリに対するJavaバインディングを提供し、Javaコードがネイティブ関数を直接呼び出せるようにします。クライアントはLWJGL NanoVGモジュールにリンクし、描画コンテキストを開き、ゲームのレンダーループ内でパスとペイントの呼び出しを行います。ネイティブ側がGPU上で実際のラスター化処理を行います。

NanoVGとビットマップ描画

側面NanoVG (ベクター)ビットマップテクスチャ
どんなサイズでもアンチエイリアススケール時にぼやけたり、エイリアスが発生したりする
形状実行時にパスから構築事前に作成された画像アセット
メモリ軽量、大きなテクスチャなし画像数が増えるにつれて増加
最適UI、形状、動的なテキスト写真、固定アート、アイコン

ベクター形式のドローイングは、サイズや色が変わるインターフェース要素に適しています。ビットマップは、詳細で固定されたアートワークに依然として優れています。ほとんどの実際のインターフェースでは、両方を使用しています.

よくある質問