エントリーレベルのハードウェア向けにリアルタイム3Dを最適化する方法

Published Wednesday May 29th, 2019
Leave a comment
Posted in Qt, Qt 3D Studio, Qt Quick | Tags:

自動車への各種デジタル機器の搭載が拡大し続けるなか、求められるユーザーエクスペリエンスを実現するのにどのくらいのコストがかかるのか、綿密に検討することが極めて重要なタスクとなっています。量産品であれば、1つのハードウェアコンポーネントのコストが10ドルなのか、50ドルなのか、100ドルなのかによって大きな差異が出ます。だからこそ、SoCで最も効率的なソフトウェア実行方法を検討することは、非常に大切なのです。現代のユーザーは、高品質なグラフィックとなめらかなアニメーションを求めており、デジタル機器をはじめとするシステムに関しては、常に良いパフォーマンスを発揮できる安全性も重視されます。こちらの記事では、ルネサス社の車載システム用エントリーレベルSoC「R-Car D3」、Qt Quick、Qt 3D Studioにより、非常になめらかで常時60fpsのレンダリングを実現する方法についてご紹介します。

本プロジェクトの要件

本プロジェクトでは、ルネサス社の車載システム用エントリーレベルSoC「R-Car D3」をハードウェアとして選択しました。同等のパフォーマンスを備えたエントリーレベルのSoCは他のメーカーからも提供されており、The Qt Companyでも過去にNXP社のエントリーレベルSoCを使った複数のプロジェクトを実施しています。今回は、イマジネーションテクノロジーズ社のエントリーレベルGPUであるPowerVR GE8300
(https://www.imgtec.com/powervr-gpu/ge8300/)とARM Cortex A53 CPUコアを搭載した、ルネサス社のR-Car D3を利用することとしました。

さらに本プロジェクトのベースとして、The Qt Companyのビジュアルデザイナーが典型的なデジタル機器類のデザインを設計しました。左右に異なるゲージモードと、中央にはリアルタイム3D ADAS(Advanced Driver Assistance Systems、先進運転支援システム)ビューを備えたデザインを採用しました。プロジェクトの狙いは、選択したローエンドハードウェア(ルネサス社のエントリーレベルSoC「R-Car D3」)を使い、解像度1280 x 480/常時60fpsを実現することです。デザインコンセプトは、OpenGLのシェーダーとビジュアルデザインを用い、リアルタイム3Dエレメント(ADASビュー)と2Dレンダリングしたエレメントを組み合わせ、(実際にはリアルタイム3Dではない)シームレスな3D体験の実現を目指すことです。

demolayout

デザインコンセプト図

初期設定と調査結果

Qt 5.12を実装したR-Car D3開発ボード上で、Qt 3D Studioを用いた初期プロトタイプを実行し、パフォーマンス分析を行いました。グラフィックはさほど複雑なものではありませんでしたが、この最適化前のデザインでは、レンダリング速度は最大10fpsにとどまりました。プロジェクトアセットの最適化後には改善が見られたものの、結果は最大20fpsと、目標の60fpsにはほど遠い数値となりました。さらなる分析を進め、アプリケーションのアーキテクチャ全体を検討する必要があるのは明らかでした。

そこでPVRTraceを導入し、D3 SoCの状態と、改善が必要な点を詳しく分析していきました。その結果すぐに、OpenGLで大きなフレームバッファオブジェクト(FBO)をした際や、ターゲットバッファのレンダリングを行った場合に、このハードウェアのパフォーマンスが低下することが判明しました。単一のフルスクリーンFBOだけでも10msのオーバーヘッドが生じていました(目標値の60fpsでは16.6msが限界で、そのうちの10msがオーバーヘッド)。

アーキテクチャの測定

本プロジェクトでは多種多様なアプリケーションアーキテクチャで測定を行い、D3ハードウェアのベースラインを明らかにすると同時に、Qt Quick + 直書きのOpenGL ADASビューという組み合わせでの測定も行いました。Qt Quickでできることはすべて試し、OpenGLコマンドでADASの描画を実行しました。結果、この設定で60fpsを実現し、この目標値が達成可能であることが確認されました。

続けて、Qt Quick + Qt 3D Studioという組み合わせに移行しました。各ゲージをQt Quickで実装し、Qt 3D Studioのコンポーネントとして中央にADASビューを配置しました。使用するFBOは1つです。3Dコンテンツが単層(単層透過)なのでFBOも1つという考え方で、テクスチャ圧縮によりRAMも節約しました。このセットアップでも、常時60fpsのレンダリング速度を実現できました。

最適なアーキテクチャの決定

試行錯誤の結果、Qt Quickで2Dエレメントを実装し、ADASビューにQt 3D Studioランタイムを用いた場合に、最高のパフォーマンスを達成できることが分かりました。ランタイムに背景描画パッチを実装すると、毎秒のフレーム数を若干増加することができ、CPUの消費を抑えることができました。

demolayout2

QtQuickで実装したゲージとQt 3D Studioを用いた3D ADASビュー

3D Studioで3Dシーンを、Qt Quickで2Dコンテンツをそれぞれ構築して統合する場合、通常は両者を合成する必要があります。ただしこのケースでは、Qt Quickが合成を遂行します。Qt Quickは2Dレンダラーであり、シーン内に組み込まれた3Dコンテンツを平面化する必要があるからです。このような場合、まずは3Dコンテンツをオフスクリーンテクスチャにレンダリングするのがデフォルトですが、上述したように、ターゲットハードウェアではオフスクリーン面へのレンダリングにおける著しいパフォーマンスの低下が見られます。そのため、このデフォルトアプローチは避けなければなりません。幸い、Qt Quickは柔軟性が極めて高く、複数の次善策を選ぶことが可能です。

今回選択した方法は、Qt 3D Studioのシーンをフレームの最初からウィンドウに直接レンダリングし、そこにかぶせる形でQt Quick ユーザーインターフェースをレンダリングするというものです。3Dシーンに重なるQt Quick UIの枠が透明となることにより、スクリーンにレンダリングされた下層の3Dコンテンツを見ることができます。このプロセスでは、レンダリング時にウィンドウをクリアしないことも重要で、具体的にはQMLのウィンドウカラーを「透明」に設定する必要があります。

ただし、このアプローチではデザイン上の制約が若干生じます。とはいえ本ケースでは問題にならず、デザインコンセプトを一切変えずに実装できました。3Dコンテンツのレンダリングのタイミングは、Qt Quick UIのレンダリングよりも先にするか、後にするかを選択できるため、3Dコンテンツを上層にも下層にも置くことができます。私たちは3Dコンテンツを先に、つまりQuick UIの下層に描画したので、描画コントロールを3D UI上にすることもできます(本ケースではしませんが)。ただこの方法では、3Dビューの下層にあるコンテンツのブレンディングはできなくなります。

本プロジェクトで、3Dビューとその下層の2Dコンテンツをブレンディングする必要があれば、2Dコンテンツを先にレンダリングしてから3Dコンテンツのレンダリングを行い、後者を上層に置くという方法を取ることができます。今回のアプローチで不可能なのは、3Dコンテンツの上下にあるコンテンツの同時構築です。これを可能にするにはオフスクリーンテクスチャを利用する必要があるので、そうしたターゲット向けにコンテンツ設計を行う際には注意が必要です。また、ブレンディングは相当なリソースを消費し、特にリソースに限りがあるローエンドのハードウェアではその傾向が顕著である為、考慮したいところでもあります。本プロジェクトではこの制約に悩まされることはありませんでしたが、デザインフェーズの早い段階で、ブレンディングが必要かどうかを検討すると良いでしょう。

3Dパーツの最終デザインの最適化

リアルタイム3Dアプリケーション開発の必須プロセスとして、グラフィックアセットの最適化についても検討しました。デザイナーから最初に上がってくる3Dモデルやその他のアセットのデザインはたいてい、ターゲットアプリケーションやハードウェア環境に合わせた最適化がなされていません。たとえば、スクリーン上で見ても人の視力では認識できないような極めて細かい部分まで3Dモデルに含まれている場合などがあります。従って、GPUとCPUのサイクルをすべて考え合わせた上で、グラフィックも最適化しなければならないのです。最適なアプローチを取ることができれば、ユーザーからの見た目を変えることなく、システム負荷を著しく軽減することが可能です。

道路メッシュの最適化

本プロジェクトでは、道路テクスチャを重ねた頂点カラーにより道路メッシュを構築しました。この方法なら、道路と背景の黒色をブレンディングするのに透過レンダリングを行ったり、別のテクスチャを用いたりして、オーバーレイのグラデーションを作る必要がありません。

demovertexcolors

道路テクスチャを重ねた頂点カラー

道路の動きは、モデルのテクスチャ座標をアニメーション化して構築しました。(アニメ化できるマテリアル)

demoroad

アニメーション化した道路

コストをかけずに「アンチエイリアシング効果」を得るため、道路テクスチャのエッジ部分は背景色を黒にしました。

demoantialias

アンチエイリアシング効果

自動車メッシュの最適化

複数のテクスチャとマテリアルで構成されたハイポリゴンの自動車モデルを最適化するに当たって、まずはローポリゴンのモデルを構築しました。ポリゴン数の異なるローポリゴンモデルをZbrushで数種類生成し、これらのローポリゴンモデルをアプリケーションでテストして、見た目を損なわない最小ポリゴン数を模索しました。その上で、オートデスク社のMayaのQuad Drawツールを用い、最終的なローポリゴンの自動車モデルを構築しました。

demolowpoly

ハイポリゴンの自動車モデルからローポリゴンモデルを構築

最終的な自動車メッシュは、複数のマテリアルと詳細なテクスチャを単一のテクスチャマップに焼き付け、車体の半分とタイヤ3本を削除しています。UVテクスチャレイアウトを車体の左側とタイヤ1本に作成し、ハイポリゴンモデルをベースにテクスチャを焼き付けました。その後、ジオメトリを複製・反射させて車体の右側を作成し、ここにタイヤを複製しました。この方法により、テクスチャサイズを維持したまま、ジオメトリのピクセルを50%に削減できました。

democar

テクスチャマップの作成

スクリーンに描画できる自動車の最大サイズは200×150ピクセルなので、テクスチャは256×256ピクセルに削減しました。

demotexture

テクスチャサイズの削減。Aの車体表面のピクセルサイズは、Bの実際のレンダリングのピクセルサイズと同様で、Cの最終的なピクセルサイズでも十分にディテールを表現できている。

2Dコンポーネントの最適化

2D UIは再利用できるテクスチャから構築し、メモリ消費量を抑えると同時に、起動時間の短縮化を図りました。このケースでは、メモリに最大15,000ピクセルをロードし、それらを用いて、スクリーンに最大200,000ピクセルをレンダリングしています。このアプローチでは、再利用を行うことで、使用済みアセットの7.5%しかロードしていません。

demotopbar

2Dエレメントの再利用

概念実証アプリケーションの最適化

アプリケーションのソースコードおよびアセットは以下からダウンロードできます:https://git.qt.io/public-demos/qt3dstudio/

また、ルネサス社のR-Car D3でアプリケーションを実行している動画もご覧ください。

まとめ

リアルタイム3Dを含むビジュアルコンセプトを常時60fpsで実行するのは容易ではありません。しかしQtなら、優れたフレームワークと各種ツールにより、ローエンドハードウェアでも驚くほどのパフォーマンスを引き出すことができます。最大限のパフォーマンスを達成するには、リアルタイム3Dで表現するべきコンポーネントと、2.5D(見た目は3Dだが空間的レンダリングは行っていない)で表現すれば十分なコンポーネントを見極めることが大切です。このプロセスは、コンピュータ的に最適なアーキテクチャの実現を後押しすると同時に、最大限のパフォーマンスの実現に不可欠なものでもあります。3Dのモデルとテクスチャをはじめとするグラフィックアセットはすべて慎重に最適化する必要がありますが、人の視覚で認識できる限界を考えると、最適化のプロセスはあっという間に複雑化します。OpenGLシェーダーを使う場合は、ターゲットハードウェアに合っており、最適化されたシェーダーを使うことが重要です。アーキテクチャとアセットの最適化を終えたら、あとはQtのプログラミング技術を駆使するだけです。また、プロファイリングツールを利用して、パフォーマンス低下の要因がどこにあるかを定期的に分析・特定する必要もあります。

もしお客様が高性能グラフィックをローエンドハードウェアで実行するプロジェクトを計画中あるいは遂行中の場合、The Qt Companyプロフェッショナルサービスがお手伝いします。詳細はThe Qt Companyまでお問い合わせください。 

 

Do you like this? Share it
Share on LinkedInGoogle+Share on FacebookTweet about this on Twitter

Posted in Qt, Qt 3D Studio, Qt Quick | Tags:

Leave a Reply

Your email address will not be published.

Get started today with Qt Download now