Qt Blog

511
Posts

629
Comments

Vulkan、Metal、Direct3D上で実行可能なQt Quick

Published Thursday October 17th, 2019 | Leave a comment
Posted in Dev Loop, macOS, Open GL, Qt Quick, Vulkan, Windows, グラフィックス, 組み込み

Qt 5.14の最初のベータ版公開が近づいているので、主な新機能の一つについてお話したいと思います。この投稿内で、グラフィックスタックの改善点とQt 6に向けての詳細を全てご説明することは難しいので、パート1とパート2にて背景と5.14に関連するものについてお話し、技術的な部分の詳細と今後の方向性については、後に別の投稿でお話しようと思います。 5.14の新機能に関するページ概要:グラフィックスAPIに依存しないシーングラフレンダラーの、最初のプレビューがオプトイン機能として追加されました。これにより、OpenGLの代わりにVulkan、Metal、またはDirect3D 11上でほとんどのQt Quickアプリケーションを実行できます。 Qt 6テクニカルビジョンの投稿でご説明したように、Qt 6の主な目標の1つは、Qt上での直接的なOpenGLの使用をできるだけ避け、Vulkan、Metal、Direct3Dなどの幅広いグラフィックスAPIの利用を可能にすることです。 OpenGL(およびOpenGL ES)も選択肢として当然残ります。その背景にある主な動機は、パフォーマンスを発揮する事だけではなく、OpenGLが利用できないか、もしくは既に望ましくないプラットフォームやデバイス上であっても、Qt Everywhereが今後も確かなもので有り続けることを保証することにもあります。それと同時に、最新かつ低レベルなAPIをベースに構築できるため、パフォーマンスの改善(APIオーバーヘッドの減少によるCPU使用率の低下など)や、Qt Quickおよび最近発表されたQt Quick 3Dのようなモジュールの背後にあるレンダリングエンジンの可能性も広がります。 さらに、プラットフォームで最もサポートされているグラフィックスAPIでレンダリングできることは、Qtを使用してUIをレンダリングしながら独自のネイティブ2Dまたは3Dグラフィックレンダリングを実行するアプリケーションにとって嬉しいポイントです。 そのような場合、使用するグラフィックスAPIの決定に関しては、Qtに主導権が無いことも多々あります。たとえば、macOSのデスクトップアプリケーションが、2DのレンダリングをQt Quickに依存しながら独自の3DコンテンツにMetalを使用したい場合、Qt QuickもMetal経由でレンダリングすると非常に便利です。これは、Qt 5.xのグラフィックスの進化過程を見ていた人には馴染みがあるのでは無いでしょうか。概念的には、OpenGLコアプロファイルコンテキストでの操作のサポートがQt Quickレンダラーに導入されたときと変わりません。Qt Quick自体にはその必要性や関連はありませんが、コアプロファイル機能に関連付けられた外部レンダリングコードを統合できるようにするために、Qt Quick側でそれを認識し、対応できる必要がありました。つまり、これはQt 5で行われてきたことからの自然な流れであり、現在OpenGL以外のグラフィックスAPIをカバーするように拡張されています。 これにより、次の2つの疑問点が上がってくることと思います。 Qt 5.xにどのように関連しているのか?全てQt 6の要素ではないのか? なぜ<なんらかのグラフィックスAPI変換ソリューション>を使用して標準化しないのか? Qt 5.14には何が含まれているのか Qtのグラフィックスの完全なオーバーホールを行うことは、Qt 6のターゲットになっています。しかし、Qt 5.x上での作業や開発を止めて、一度に全てが上手くいくことを期待するのは現実的ではありません。Qt開発者がよく口にするように、APIの最初の試作は”最適”というには満たない傾向にあります。そのため、並行して開発を行う代わりに、QtのUIテクノロジーであるQt Quickに焦点をあてていきます。 Qt 5.14には、新しいQt Quickレンダリングパスのプレビュー版が付属される予定です。 デフォルトでは、非アクティブであるため、アプリケーションに対して目に見える変更は一切ありません。内部では、以前のバージョンと同じダイレクトOpenGLベースのコードパスを通過します。 ただし、新しいアプローチを試してみたい人は、環境変数を設定するか、main関数のC ++ APIを介して要求することでオプトインできます。 ここでは、フィードバックを早期に取得して、Qt 6.0のリリースを待たずに繰り返し、発展させていけることを期待しています。 Qt 5.14ドキュメントをみると、次のようなことがわかります。 QSG_RHIをセットして実行すると、すべてのアプリケーションがすぐに動作するわけではありません。ダイレクトOpenGL呼び出しを実行するシーングラフノード、またはカスタムマテリアルにGLSLシェーダーコードを含むカスタムQQuickItemは、RHIベースのレンダリングを有効にすると機能しなくなります。同じことが、GLSLソースコードを含むShaderEffectアイテムにも当てはまります。 カスタムマテリアルとエフェクトを最新の方法で実行するためのソリューションは、ほとんどがすでに存在しますが、必要に応じてアプリケーションを移行する必要があります。アーリーアダプターは、5.14および5.15のタイムフレームで試すことも出来ますが、Qt 6.0より前での幅広い普及と移行は期待されていません。 一方で、多くの既存QMLアプリケーションは、ベースとなるレンダリングエンジンがVulkanやMetalなどのまったく異なるAPIを経由する場合でも機能する可能性があります。 何故トランスレーションレイヤーXXXではないのか? なにより先に、もし仮に常に直ぐに使える状態でなかったとしても、MoltenVK、MoltenGL、ANGLE、ZinkなどのAPIやシェーダートランスレーションレイヤーを使用する際の実現性について予めお伝えしておく必要があります。たとえば、MoltenVKでは、macOSのVulkanを介してQt Quick UIをレンダリングすることもできます。 Qt […]

Read More

Qt Quick 3D:簡単・高速な新しい3D API

Published Friday August 30th, 2019 | Leave a comment
Posted in Qt, Qt Quick, Uncategorized

Technical Vision for Qt 6 blog postの記事の中でCTOのLarsが述べたように、私たちはQt Quickの中で3D表現を実現するより良い方法の研究を続けてきました。その結果、Qt Quick 3Dという新しいプロジェクトを立ち上げるに至りました。Qt Quick 3Dは、Qt Quickの中でユーザーインターフェイス用の3Dコンテンツを作成するための、ハイレベルなAPIを提供します。 アニメーションの同期の不具合やソフトウェアの複雑化につながりうる外部エンジンを使うのではなく、Qt Quick シーングラフ自体の3Dコンテンツ向け拡張および拡張されたシーングラフノードの描画エンジンを提供しています。 これは、Qtにこれまでとは異なる新しい3Dソリューションを作ったということなのでしょうか? いいえ、実は必ずしもそういうわけではありません。コアとなる3D描画エンジンはQt 3D Studioの描画エンジンから派生したものだからです。この描画エンジンは、Qtのマルチプラットフォーム対応のために移植され、Qtプロジェクトのコーディングスタイルに合わせてリファクタリングされています。 Qt Quick 3Dで描画された”San Miguel”テストシーン 新しい3Dソリューションを提供する五つの理由 2D/3Dグラフィックスの一体化 究極の目標は2D/3Dにかかわらずシームレスな描画を実現することです。現在Qtでは、2Dおよび3Dのそれぞれにスムースなユーザーインターフェイスを作成するための異なるソリューションを提供しており、それぞれに対応するツールがあります。その一つが2D用のQt Quickで、もう一つが3D用のQt 3D Studioです。 このどちらか一方しか使用しないのであれば、全く問題はありません。しかし、これらを併用した場合、実行時のパフォーマンスや開発効率に問題があることがわかりました。 そのため、私達は一つの言語(Qt Quick)、一つの描画エンジン(Qt Quick Scenegraph)、一つのデザインツール(Qt Design Studio)というシンプルなソリューションを目標にすることにしました。これにより、機能やパフォーマンスや開発効率といった問題をすべて解決することができます。さらに私たちの開発リソースを集中することができるので、より多くの機能やより早いバグ修正も実現可能になります。 直感的で簡単なAPI Qt Quick 3Dのもう一つの目標は、コンピュータグラフィックスの細かな知識がなくても3Dコンテンツを定義できるAPIを提供することです。ほとんどの場合、アプリケーションごとに3D描画エンジンの細かな調整は必要はなく、どちらかというと2Dと並べてちょっとした3Dコンテンツを表示させたいだけであったりします。私たちは、このことを念頭に置いて、Qt Quick 3Dを開発してきました。 とはいえ、パワーユーザーの要望にも応えるべく、より高度なケースに使えるレンダリングAPIを更に公開していく予定でもあります。 現時点では、QML APIのみを提供していますが、将来的にはC++ APIを公開することを目標としています。 Qt Quick開発ツールの統合 Qt Quick 3DはQt 3D Studioの後継として企画されています。当面の間、Qt 3D […]

Read More

エントリーレベルのハードウェア向けにリアルタイム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体験の実現を目指すことです。 デザインコンセプト図 初期設定と調査結果 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 […]

Read More

Qt 5.11 での Wayland 対応の改善

Published Tuesday October 30th, 2018 | Leave a comment
Posted in Qt | Tags: ,

この記事は The Qt Blog の What’s new with the Wayland platform plugin in Qt 5.11? を翻訳したものです。 執筆: Johan Helsing, 2018年05月29日 Wayland は最近の Linux で使われているディスプレイサーバーのプロトコルで、Qt Wayland プラットフォームプラグインにより、Qt のアプリケーションは Wayland のディスプレイサーバー(コンポジタ)上で動作可能になります。 Qt 5.11 では、バグの修正以外に加えてとくにデスクトップユーザーに向けた様々な改善がなされました。 合成キー入力の対応 キー入力の合成は長らく未対応でしたが、ようやく対応ができました。これにより、以下のような入力に複数のキー入力を必要とする文字の入力が可能になりました。 ¨ と A で “ä” を入力 Compose キー、S、S で “ß” を入力 オフィシャルバイナリに含まれるように Qt 5.11 と Qt Creator 4.7 以降、Qt Wayland はオフィシャルのインストーラーでのインストールが可能になりました(これまでは自分でビルドをする必要がありました)。 […]

Read More

Qbs の開発を中止します

Published Tuesday October 30th, 2018 | Leave a comment
Posted in Qbs

この記事は The Qt Blog の Deprecation of Qbs を翻訳したものです。 執筆: Tuukka Turunen, 2018年10月29日 The Qt Company は Qt のプログラムに対して3つのビルドシステムをサポートしてきました。Qt のユーザーとしてみると、qmake が現在もっとも使われているビルドシステムです。CMake が次点なのは明らかで、人気も上昇しています。そして三番目が Qbs でこちらは極小数の方にしか利用されていません。私たちの顧客にお気に入りのビルドシステムを尋ねてみると、ほとんどが CMake か qmake を今後使うとのことでした。 このため、Qbs の廃止を決断し、今後はそのリソースを CMake のサポートに回すことにしました。Qbs は 2019 年末まではサポートされ、最後のリリースは 2019 年の4月の Qt Creator 4.9 のタイミングを予定しています。Qbs には商用版とオープンソース版がありますが、Qt Project コミュニティにおける Qbs 開発のインフラの提供は今後も継続したいと思っています。 キーポイントのまとめ: Qbs は 2019 年末まではサポートされます 最終リリースは 2019 年 4月の予定です […]

Read More

macOS での Valkan for Qt

Published Tuesday October 30th, 2018 | Leave a comment
Posted in Qt | Tags: , ,

この記事は The Qt Blog の Vulkan for Qt on macOS を翻訳したものaです。 執筆: Morten Johan Sørvig, 2018年05月30日 qtbase の dev ブランチ(Qt 5.12 になる予定)に Vulkan サポートが追加されました。こういった対応は、控えめに言っても多大な工数がかかるものですが、MoltenVK プロジェクトとこれまで Qt に対してなされた様々な作業により、スムーズに対応を行うことができました。ということで詳細を見てみましょう。 背景 昨年、Laszlo が Windows と Linux、Android の Qt の Vulkan 対応 という記事を書きました。これにより、QSurface::VulkanSurface に加え、クロスプラットフォームの QVulkanInstance や QVulkanWindow といったクラスが追加されました。 その後、いまから数か月前に、MoltenVK という Vulkan と Metal の変換ライブラリがオープンソース化されました。これを Qt として対応する というバグレポートが作成され、これには QWindow が内部で使用している […]

Read More

コルーチンと QML で遊んでみた

Published Tuesday October 30th, 2018 | Leave a comment
Posted in Qt | Tags:

この記事は The Qt Blog の Playing with coroutines and QML を翻訳したものです。 執筆: Jesús Fernández, 2018年05月29日 (別名 コルーチンと Qt で遊んでみた パート2) 5747a7530206ac410b6bd7c1b8490d7d389ad3a5 により JavaScript Generators のサポートが QML に追加されました。これによって、前回の記事のフィボナッチ数列もジェネレーターで書けるようになりました。 サンプルコード: import QtQuick 2.11 import QtQuick.Window 2.11 import QtQuick.Controls 2.2 Window { property var fibonacci: function* () { yield “0: 0” yield “1: 1” var f0 = 1, […]

Read More

Qt での開発の最前線:いま使うべき10のツール

Published Sunday October 28th, 2018 | Leave a comment
Posted in Qt | Tags: , , , , ,

この記事は The Qt Blog の Modern Qt Development: The Top 10 Tools You Should Be Using を翻訳したものです。 執筆: Matthias Kalle Dalheimer, 2018年10月12日 仕事をする上で、正しいツールを使うことがどうして重要なのでしょう?効率と成果というのがすぐに思い浮かぶ2つの理由です。工事現場で働く人たちは釘の刺さるような靴を履きません。ソフトウェア開発者である我々は、どうしてバグを発見したりコードの最適化をする際にマニュアルな方法で行うのでしょう?どう考えても非効率でイライラするし、成果も芳しくないですよね? 新しいツールを学ぶのは時間のかかる作業です。では、自分の時間をどこに割くかはどう決めるべきでしょう?私たち KDAB はそれに値する Qt 関連の開発ツールをこの記事で共有したいと思います。私たちはよくこういったツールを使って厄介なバグの所在を突き止めたり修正したり、難解な最適化の問題を解決したりしています。Qt での開発の最前線にいるみなさんは、既にこういったツールに馴染みがあるかもしれませんが、様々なスキルレベルのみなさんの中にはまだ試したことのないツールもあるかもしれません。 GammaRay – Qt の構造に基づいた内部調査用デバッガ Qt の内部の構造のデバッグでイライラしているみなさんに強くおすすめしたいツールです。GammaRay は QtQuick シーングラフやモデル/ビューの構造、QTextDocument、シグナル/スロット、フォーカスのハンドリング、GPU のテクスチャ、QWidgets、ステートマシンといった Qt の主要なコンポーネントに対応し、Qt 内部のこういった情報を可視化するだけではなく、実行時に内部の値の変更ができてしまうツールです。アプリケーションを起動してのデバッグや、起動中のアプリケーションへのアタッチ(ローカルでもリモートでも)が可能となっています。 https://www.kdab.com/development-resources/qt-tools/gammaray/ https://www.kdab.com/gammaray-2-9-0-release/ Clazy – Qt のセマンティクスに基づいたコンパイラプラグイン これはすべての Qt ユーザーの引き出しに入れておきたいツールです。clazy を clang に追加することで、必要のないメモリの確保や API […]

Read More

Qt Creator 4.7.2 をリリースしました

Published Sunday October 28th, 2018 | Leave a comment
Posted in Qt Creator | Tags: ,

この記事は The Qt Blog の Qt Creator 4.7.2 released を翻訳したものです。 執筆: Eike Ziller, 2018年10月24日 Qt 4.7.2 をリリースいたしました! 今回のリリースではいくつかのクラッシュを修正し、ウィルス対策ソフトが Qt Creator による Windows 上でのファイルの保存を阻止する問題を解消しました。 詳細は change log を参照してください。 Qt Creator 4.7.2 へのアップデート オープンソース版は Qt のダウンロードページ より、商用版のパッケージは Qt Account Portal より入手可能です。Qt Creator 4.7.2 はオンラインインストーラー経由でもアップデートが可能です。不具合を発見した場合には、バグトラッカー までご報告ください。なにか分からないことがあれば、IRC の chat.freenode.net の #qt-creator や、Qt Creator のメーリングリスト で聞いていただければと思います。

Read More

Qt Design Studio 1.0 をリリースしました

Published Sunday October 28th, 2018 | Leave a comment
Posted in Qt Design Studio | Tags: ,

この記事は The Qt Blog の Qt Design Studio 1.0 Released を翻訳したものです。 執筆: Petref Saraci, 2018年10月25日 デザイナーとディベロッパーの効率的なワークフローによるコラボレーションが製品のイノベーションを加速させ、最終的には最高のユーザー体験の提供につながると強く信じています。このため、Qt Design Studio 1.0 のリリースを本日発表できることを心からうれしく思います! Qt Design Studio は UI のデザインと開発のための環境で、これによりデザイナーとディベロッパーが迅速にプロトタイプを作成し、複雑な、様々なサイズのスクリーンに対応可能な UI の開発が可能になります。 Qt Design Studio はデザイナーにもディベロッパーにもお使いいただけるツールで、両者のコラボレーションが驚くほどシンプルで合理的になります。デザイナーはグラフィカルなビューで作業をし、ディベロッパーは QML のソースコードを扱うことが可能です。このワークフローにより、デザイナーが作業中の Photoshop のデザインを実際のデバイスで動かすなんてことも数分で可能になります。ここでは、Photoshop のデザインをあげましたが、その他のデザインツールにも将来対応する予定です。 Qt Design Studio と Qt/QML による強力で効率的なワークフロー 7月のテックプレビューのリリース 以来、既存の機能の仕上げと新機能の追加を行いました。というわけで、各機能を紹介したいと思います。 Qt Photoshop Bridge – Photoshop のデザインのインポートが可能 Photoshop から、再利用可能なコンポーネントを直接生成することができます 特定の QML […]

Read More
Get started today with Qt Download now