OpenGL が使えるリモートデスクトップを構成する

はじめに

Windows のリモートデスクトップでは、OpenGL を有効化するのに制限がありました。 NVIDIA の Quadro シリーズを装着しているPCへのリモートデスクトップでは OpenGL を有効と出来たのですが、 Geforce では有効とすることが出来ませんでした。

COVID-19 の影響でリモートワークが求められるようになり、 NVIDIA がこの機能を Geforce でも使用できるように機能を解放してくれました。ありがとうございます。

本記事はその設定手順と簡単な動作検証をレポートします。

この記事は以前作成したものからインポートしました。
現在の情報とは少々異なる部分が発生しているかもしれません。

動作状況

先に動作結果について記述します。
リモートデスクトップ接続して、 OpenGL の自作プログラムを実行してみました。これが以下の図ですが、リモートデスクトップでも多くの OpenGL エクステンションが使用可能となっており、ハードウェアアクセラレートが効いたOpenGLが使えることが分かります。

このリモートデスクトップは、 Intel グラフィックスのみを搭載したノートパソコンからデスクトップPCへ接続したときのものです。さらにテッセレーションのサンプルプログラムを実行させてみたものが以下の状態となっています。

リモートデスクトップを経由しても、上手く動作しています!

OpenGL 1.1 相当の昔のバージョンならば全てソフトウェアエミュレーションにより動作する、ということも考えられましたが、テッセレーションまで動くとなるとハードウェア機能を活用していると考えられます。 (※ 時代の変遷と共にテッセレーションもソフトウェアになる未来は来ると思いますが、執筆時点ではということです)

セットアップ手順

まず、NVIDIA グラフィックスドライバーをバージョン 440 以降まで更新します。自分が試した状況では、 Game Ready Driver 445.75 を使用しました。

その後、リモートデスクトップで OpenGL を使用可能にするプログラムを NVIDIA のサイトからダウンロードします。これは、 https://developer.nvidia.com/designworks のページの、「Accelerate Windows Remote Desktop」の箇所からファイルがリンクされており、これを使用します。

将来的には標準ドライバのみで対応し、本ツールは不要となる計画があるようです。
また、ダウンロードには NVIDIA 開発者登録が必要でした。

ダウンロードしたファイル nvidiaopenglrdp.exe を実行します。実行すると以下のライセンス同意を求められます。

そのまま次へ次へと画面を進めていくと、インストールは完了します。最後、設定を有効化するためにシステムの再起動を行います。再起動したら、リモートデスクトップで OpenGL が使用可能となっているはずです。

なお、以下に示すようにOpenGLの拡張が全くとれてこない場合には失敗しています。これではハードウェアアクセラレートが効いたOpenGLは使用できません。どこかの手順がおかしくなっているはずなので、ここに記載した順序でドライバの更新・ソフトウェアの適用を再度行ってください。

GL_VENDOR:   Microsoft Corporation
GL_RENDERER: GDI Generic
GL_VERSION:  1.1.0
Extensions: 
    GL_WIN_swap_hint
    GL_EXT_bgra
    GL_EXT_paletted_texture
  extensionCount = 3

画質について

先に挙げた画像をよく見ると実はテッセレーションのライン部分で汚いように見えます。これはリモートデスクトップで表示したときにも、そのまま汚い状態でした。 Windows の RDP では利用可能な場合は GPU の H/W エンコーダーを使って画面を圧縮転送するという話があるので、これが原因では?と少し調査したのでその結果を書いておきます。

圧縮コーデックの話

最近の RDP ではサポートしていれば GPU の圧縮コーデックを使うようで、これを無効化してみます。これにはローカルグループポリシーエディタで行います。

ローカルグループポリシーエディターを開いて、以下の階層の場所を開きます。
コンピューターの構成 / 管理用テンプレート / Windows コンポーネント / リモートデスクトップサービス / リモートデスクトップセッションホスト / リモートセッション環境

表示された項目のうち、次の2つを無効状態にします。

  • リモートデスクトップ接続で H.264/AVC444 グラフィックモードを優先する
  • リモートデスクトップ接続用に H.264/AVCハードウェアエンコードを構成する

この設定でもまだラインが汚いので、この点ではないようでした。続いて「RemoteFX アダプティブ グラフィックスの画質を構成する」を変更してみます。この設定を未構成から有効へ切り替え、その時の画質をロスレスへ設定します。これによりようやく画質が改善しました。

このようにして同じ画面を出してみたのが以下のものです。キャプチャの都合でちょっとズレてしまいましたが、設定後のほうは妙なノイズがなく綺麗な画面となっていることが分かるかと思います。(ノイズ以外にも色合いの違いもあるように感じます)

ロスレスにすることで圧倒的に通信量が増えます。そのため回線に負担が掛かるので注意が必要です。自宅や会社の閉じたネットワーク内なら良くても、インターネット(WAN)やVPN接続を使っている場合には、この点が問題になってくることがあるでしょう。

まとめ

ここまで リモートデスクトップで OpenGL が使えるようになり、少し楽しみながら検証してきました。 DirectX/OpenGL/Vulkan などグラフィックスAPIを活用したものでもリモートデスクトップ接続時でも使える時代がやってきました。

今回ワイヤフレーム描画を見て画質の課題に気付きました。この設定は OpenGL 関係なくリモートデスクトップで画質悪いな、と思っている人には役立つ情報だったのではと思います。

関連記事

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください