レポート

メンテナーが語るQtのこれから―「Qt Contributors' Summit 2017」レポート

この記事を読むのに必要な時間:およそ 3 分

Qt Core

QtCS2017 QtCore

Qt Coreモジュールはその名の通りQtのコアとなるモジュールです。そのため変更の影響が大きく,メジャーバージョンが同じ間は機能の追加が主な変更内容となることが多いです。今年はQt 6へ向けて,これまではさまざまなしがらみから手を加えにくかったところをもう一度見直す良い機会であったようです。

中でも大きな話題となったのが,C++標準ライブラリとの関係性です。20年以上の歴史を持つQtでは,C++標準ライブラリがない環境でも動作するように,文字列やコンテナなど独自の標準ライブラリ機能を作ってきました。

最近はC++標準ライブラリも成熟してきたため,Qtでも活用をはじめています。C++自体もC++11,C++14に続いてC++17,C++20で機能が追加されることが予定されているため,便利な機能についてはQtに取り込んでいくことも検討されています。しかし,C++標準ライブラリとQtとではAPIの命名規則が異なることなどから(ex. std: container.empty() vs Qt: container.isEmpty())⁠その対応方法について話題となりました。

Qtの利用者全員が関係するモジュールということもあって注目度も高く,議論が長引いたため,元々予定されていたコンテナ関連の議論などは別のセッションへ持ち越しとなるほどの盛り上がりでした。

3D

QtCS2017 3D

このセッションではQtの3D関連の機能についての現状と予定の説明が主となりました。

今年の初めにNVIDIA社からNVIDIA DRIVE Design StudioがQt Projectに寄贈されました。これをQtベースにしたQt 3D Studioの開発がThe Qt Company社内で行われていましたが,このQt Contributors' Summitのタイミングでそのソースコードが公開となりました。

Qt 3D Studioは,これまでのQtで弱かったGUIで3D UIを作成するためのツールとして大きく期待されています。

簡単なQt 3D Studioのデモの後に,現在の開発状況などが説明されました。

現在のQt 3D Studioは,NVIDIA社の実装をベースとしているため独自の3Dエンジンで動作しています。今はこれをQt 3Dモジュールベースに変更する作業が進められていること,その際にQt 3Dモジュールのパフォーマンスに問題があることが判明したために,その改善作業も行っていることなどが説明されました。

Qt 3D Studioのワークフロー

Qt 3D Studioのワークフロー

Qt 3Dのパフォーマンス改善はQt 5.9系をターゲットとして行われており,10月の初めにリリースされたQt 5.9.2ではQt 5.9.0に比べてメモリ・実行速度共に大きく改善されたということです。これらの改善結果を踏まえて,来年にQt 3D StudioのエンジンをQt 3Dベースにする予定で開発を進めているということでした。

2D系はQt Quick Designer,3D系はQt 3D Studioとツールが2つ存在する形となりますが,それらの統合については長期的な問題として考えており,まだまだ未定ということでした。現状ではQt QuickからQt 3D Studio,Qt 3D StudioからQt Quickを利用するための最小限の枠組みが用意されています。

Textures in Qt Quick 2

QtCS2017 Textures in QQ2

Qt Quickでは画像を扱う際に,pngなどの画像形式で読み込んで描画するのが一般的です。しかし,特に組み込み系の分野などでパフォーマンスを追求するために,圧縮テクスチャやテクスチャアトラスなどを活用したいという要望が上がることも少なくありません。それらの対応方法についての議論が行われました。

Qtがクロスプラットフォームであること,OpenGL ES 2.0がまだ一般的であることなどから,共通して使用できる圧縮テクスチャ形式はありません。そのため,圧縮テクスチャを作成するツールも含めて対応状況の調査が必要であること,調査をデータベースとしてまとめる必要があることがまず話題となりました。

テクスチャアトラスについても,現状でもQt Quickの内部で暗黙的に生成・使用していますが,実行時に動的に構築するのではなく,事前に構築する方法について議論されました。テクスチャアトラスではテクスチャデータ以外にもその中の各画像のジオメトリなどのメタデータも必要になりますが,そのための一般的なファイル形式が無いこともあり,その対応方法なども議題となりました。

圧縮テクスチャについてはQt Quick用プラグインのサンプルがQtのexamplesにすでに存在しており,ユーザ側の工夫で利用自体はできる状態でしたが,Qtが標準で対応するとその効果は大きいものとなると思われます。テクスチャアトラスについても事前に生成することで,最適化による効率化が期待できます。どちらも今後が楽しみな機能となりそうです。

Qt Quick Scene Graph

QtCS2017 QQSG

Qt Quick Scene GraphはQt Quickのレンダリングエンジンです。Qt 5ではOpenGLを前提とすることでコンパクトで効率的なエンジンを構築し,そのパフォーマンスに大きく寄与しました。

OpenGLベースで考えた際にはQt Quick Scene Graph自体はかなり成熟してきました。しかし,OpenGLが普及してきたとはいえ3D機能やGPUのないローエンドのチップで利用したいという要求が根強いこと,Vulkanに代表される新しいグラフィックAPIへの対応が要望されていることなどから,Qt 6に向けてその構造の見直しが検討されています。

Qt 5でも5.8でDirect3D 12対応を行いましたが,バックエンドごとにシェーダを記述する必要性があったり,作業量も多く元々の設計でOpenGLと密接に関係している場所(マテリアルなど)への対応が困難など課題も判明してきました。

今後の対応としては,すでに存在しているQQuickRenderControlクラスの拡張か,新しくQQuickSceneクラスの導入などの提案,シェーダーの共通言語の導入検討などの項目があげられました。

Summing up framework changes: The road towards Qt 6

「Qt Contributors' Summit」の最後はまとめとなるセッションです。これまでの各セッションでどんな話題があったかを確認して,イベントのまとめとしました。

「Qt Contributors' Summit」はここで終わりましたが,多くの参加者は翌日からの「Qt World Summit」にも参加していました。

まとめ

Qtの機能実装的なセッションを主に紹介しましたが,それだけではなくQt Project の Code of Conduct(行動規範)やサンプルの作成のガイドラインなどQt に関する幅広いことが議論されました。

「Qt World Summit」と同時開催と言うことで2日目は KDAB の有力な貢献者達がトレーニングの講師をしていたために参加できていなかったり,部屋の関係で同時に開催されるセッションが多くても3つまでという制限はありましたが,ほとんどのセッションで時間オーバーするほどの白熱した議論が繰り広げられていました。

また,話題もここ数年は追加機能に関するものが多かったのに比較するとQt Coreなどの基礎的なモジュールに関する議論も多く,Qtの今後が楽しみなイベントとなりました。

議論についてはこの場で終わりではなく,Qt ProjectのDevelopmentメーリングリストやbugreports.qt.ioなどでも継続して行われます。興味のある方はぜひチェックしてみてください。

著者プロフィール

朝木卓見(あさきたくみ)

1996年からQtを使い始める。

2006年,Qtの開発元であったTrollTech ASAにてQtのコンサルティングやサポートに従事。

2008年,TrollTech買収によりNokiaに移籍し,Qtの啓蒙活動なども行う。

現在は株式会社SRAでQtコンサルタントとして活動中。

Officially Certified Qt Specialist

コメント

コメントの記入