参考資料

3dsMax for V-Ray の Qt 化

3dsMax for V-RayのUIをQt化する話が紹介されていました。

3dsMaxのUIは長い間古いWin32ライブラリが使用されてきました。このため近代的なハード構成のPCでもUI描画が非常に遅くなっていました。特にパラメータの多いVrayのようなプラグインのUIでは遅さが顕著になり、「QTの描画ドライバーをDirect Xにすると少しだけUI速度が早くなる」というようなTipsが公開されるほどでした。

でそこでAutodeskは、PhotoShop、AfterEffects、Mayaなど本格的なプロ向けの製品で使用されるQtライブラリをMaxに導入したのですが、全然速く感じないどころか前よりも遅くなってる!と感じた人も多いと思います。
遅く感じるのは気のせいかと思ってましたが、実際に遅くなってたということが書かれててやっぱりかよ思いました。

そしてMax本体の多くのUIは、いまだに古いWin32で書かれた物が使われてえそうな気がします。

 

https://www.chaos.com/blog/the-qt-fication-of-v-ray

 

3D Studio Maxは、30歳を目前にした業界の老巨人です。

私たちは3D Studio Maxと強い絆で結ばれ、新しい技術が登場するたびに、ユーザーの手元に届くようにと、大切な思い出を共有してきました。

その一つがMaxのUIにQtライブラリが採用されたことです。Max内部の隠れた作業はバージョン2017くらいから始まり、バージョン2018には最初のQt UIが登場し、現在もいくつかの作業が進行中です。

Qtの導入は、老朽化したWin32ライブラリに代わって、最新の機能群、全体的な高速化、クロスプラットフォーム化などを目指すものです。

 

テストの様子

この記事で述べたことを証明するために、数年前に実施したテストと、最新のハードウェアとソフトウェアで再テストした結果を紹介します。

私は、3つの主要なマテリアルの完全なUIを再描画するのにかかる時間をベンチマークしてみました。V-Ray Material、ALSurface、FastSSS2です。これらは多くのワークフローの中心であり、多くのUIコントロールが含まれているからです。
マテリアルエディタは、可能な限りすべてのコントロールが描画されるように最大限の高さに引き伸ばされ、プレビューのレンダリングは無効にされました。

時間は100回計測され、平均化されました。その結果は、記事の中で適切な箇所に記載します。

 

金色に輝く過去......それはない

10年前に十分、あるいは速いと感じたのは、ハードウェアのスピードから私たちの期待まで、すべての体験がそれを許したからです。つまり、私たちはこの問題に対して、今よりずっと鈍感だったのです。

この理論を検証するために、私はV-Ray 3.xの最終バージョン(3.7)を使って、Max 2015上でベンチマークを行うように努めました。測定された速度はネイティブのWin32 Controlsのものであり、多かれ少なかれ過去最高の状態です。

VRayMtlクラスは再描画に1.6159秒を要しました。

VRayALSurfaceMtlは1.2955秒、VRayFastSSS2は1.2655秒とほぼ同じ時間がかかりました。

Maxでマテリアルエディタやレンダー設定ウィンドウをドラッグすると、ウィンドウがそれに追いつこうとする間にマウスカーソルが別の場所に移動してしまい、ひどいラグが発生します(現在の強力なハードウェアでは、そうするのに1秒近くかかります)。

これはパフォーマンスが不十分になっていることに気づき、早期にQtを導入したオートデスクの開発者の先見の明の賜物です。感謝。

 

成長期の痛み

Max の Qt 化が進む中、Max バージョン 2018 頃からUI のスローダウンの報告を受けるようになり、そのいくつかは単にユーザーの疲れたワークステーションに起因するものとは言えないほど大きなものでした。

この頃、私はさまざまなWin32 UIコンポーネントのパフォーマンスをベンチマークするようになり、それらが不安定な再描画速度を示すことがあることを発見したのです。
また、ウィンドウを開くのに数秒かかることもあり、MaxのUIを移動させると、さらにラグが発生しました。

この問題はMax が Win32 コントロールを Qt バージョンに自動変換しているためで、コアあたりのクロックが低いメニーコアマシンでは、ワークフローを阻害する問題になり、コアあたりのクロックが高い CPU では単なる迷惑行為にしかなりませんでした。

Qt への移行中は互換性を維持する必要があったのです。しかし、これはすべての UI コントロールに影響し、深刻な遅延や断続的なスローダウン、全体的な動作の遅れをもたらしました。

スローダウンの行き当たりばったりを示すグラフ例。縦軸は数千ミリ秒に達する。

 

落ち込みを数値化するために、同じV-Rayのバージョン(3.7)をMax 2018でテストした結果がこちらです。

  • VRayMtl:2.5436秒
  • VRayALSurfaceMtl:2.0685秒
  • VRayFastSSS2:1.9779秒

減速は比例しており、等しく約63%影響することに気づくことができます。

その間、最初のネイティブ Qt ダイアログが Autodesk Physical Material などに現れ、Win32 が遅れをとっているところでも例外的に速くなりました。スピナーやドロップダウンメニューなど、特定のコントロールタイプの再描画が最大で 10 倍速くなりました。

Qtコントロールの比較速度を示すグラフの例。縦軸は数百ミリ秒に達しています。

 

注意深い読者は、各実行がどんどん遅くなっていることにお気づきでしょう。

これは特定の Max のバージョンに関する別の問題で、特定の状況 (たとえば、長いルックデブセッション中) で私たちの惨状を悪化させるものでしたが、Qt の速度を著しく低下させるものではありませんでした。

なぜなら、その利点は無視できないほど大きく、いずれにせよ、私たちの古い家はすでに燃え尽きていたからです。

 

パラダイムシフト

Qt のネイティブなアプローチで UI を書くのは簡単ではありませんでした。古い Win32 とアプローチ、メソッド、コントロールがほとんど一致しないため、UI コードはゼロから作り直さなければなりません。

つまり、すべてのラベルを打ち直し、すべてのスピナーを配置し直し、すべての項目のデフォルトを設定し直し、さまざまなコントロールの動作をチューニングし、などなどです。もちろん、ユーザーエクスペリエンスや効率を損なわないことが理想ですが。

 

いじり倒した結果

開発者がUIを作り始めると、予期せぬ、そしてしばしば不当な動作が現れ、しばらくの間修正も不可能でした。様々な Qt コンポーネントは、古い Win32 コンポーネントと同じサイズにはならないので、アライメントがほとんど狂ってしまいます。

さらに、新しいコントロールのデフォルトのアプローチは、絶対的ではなく相対的な位置決めであり、コントロールのデフォルトのポリシーは自動スケーリングであり、Win32ライブラリの直接の継続としてそれらに期待されるものとは著しく異なる様々な動作(例えば、マテリアルやマップボタン)など。

私たちが直面した数々の災難は、Max 自体の統合と、統合された Qt ライブラリの成熟と、手を取り合って進める必要があることを明らかにしました。

UIの見た目と機能性を両立させるために、私たちは時間の余裕もなく、膨大な手間と手作業に頼りました。幸いなことにV-Rayの多くのUIレイアウトは自動的に生成され(例えば、ほとんどのレンダーエレメントのUI、VRayALSurfaceマテリアル、VRayDirtテクスチャー)、共通のコードを共有していたので少し楽になりました。

それでも、最初の概念実証のUIが完成する頃には、Qtへの移行をタイムリーに完了するために必要な作業量が膨大であることが明らかになりました。

 

総力戦だ

vMax チーム(3D Studio Max 用 V-Ray の開発者)全員が Qt 化作業に参加し、Update 1 のリリースに間に合うように最初の中間変換ステップを出荷するために、必要な作業に正面から取り組みました。

V-Rayの各ダイアログには非常に多くのUIコントロールがあるため、この作業はチーム全体で何日もかけて行う必要があり、その結果他の作業を待たせるわけにはいかず、彼らに負担がかかることになりました。

vMaxの開発者にとって、この作業は大変な期間であったと言えますが、その分質の高い結果を出すことができました。

 

プレイ状況

V-Ray 6.0 Update 1(または6.1)の時点で、Qtライブラリへの移行は基本的に完了しました。
マテリアル、マップ、様々なノード、モディファイア、そしてQtに変換できるすべての補助的なウィンドウが変換されました。

また、新しいコントロールのレイアウトや動作に関するユーザーからのフィードバックや意見を収集し、より良い翻訳を完成させ、ユーザーの生活の質を最大化するために、もう少し時間を確保することにしました。

また、QtライブラリのMaxへの統合が成熟してきたことによる副産物として、いくつかの動作の制限に対処する必要が残されています。この移行はまだ完全に完了していませんので、もう少し適応に時間がかかることを期待しています。

 

それは価値があったのでしょうか?

私たちはこの努力に報われたと感じるとともに、得られた数字にとても清々しさを感じています。

Max 2023とV-Ray 6.1のVRayMtlは0.4664秒(v3.7から再描画するコントロールが増えたとしても!)、VRayALSurfaceMtlは0.3621秒、VRayFastSSS2はわずか0.2857秒で描画されるようになったのです。

いずれの場合も、コントロールの再描画は目には見えないほど高速に行われます。同様に、ウィンドウのドラッグも瞬時に行われ、ウィンドウはマウスカーソルに釘付けになります。

 

つまり、現在のQt UIは、ネイティブのWin32よりも3~4倍、翻訳されたWin32よりも最大で7倍も速いのです。V-Ray 6 のアップデートを試してみて、Qt UI の新しい外観、スピード、使い勝手についてどう感じたか、ぜひ教えてください。

コメントを残す