Monthly Archives: January

Qt 3D でライトの数を増やしてみよう

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

この記事は The Qt Blog の Increasing the number of lights in Qt 3D を翻訳したものです。 執筆: Svenn-Arne Dragly, 2017年12月05日 Qt 3D の Deferred Renderer では無限個のライトを使用したシーンの描画が可能ですが、Qt 3D Extras のデフォルトのマテリアルは Forward Rendering 用にできているためにライトを同時に8個までしか使用できないようになっています。いくつかのトリックを使うと9個以上のライトを定義できますが、描画時には近い順から8個のライトを選択してそれらを利用するようになっています。 以下のシーンでは、100個のライトを浮遊させていますが、一度に計算されるのは8個までのためにライトがついたり消えたりしているように見えると思います。 別のパイプラインを利用して更なるライトを利用することは可能ではありますが(Qt 3D Studio ランタイム の場合はそうなるでしょう)、Qt 3D Extras のデフォルトのマテリアルを、Forward Rendering を用いた場合でも、より多くのライトに対応させたいと思っています。 現在の制限の1つの理由は、様々な OpenGL のアーキテクチャーの対応のためで、シェーダーに渡せる uniform データの数に厳しい制限があるものもこれには含まれています。このため、ライトの構造体の小さな配列をシェーダーに渡し、フラグメントシェーダーでライトの数だけループを回すような処理になっています。残念ながらこのループはシェーダープログラムの膨大な処理のコンパイルが必要なため、リソースの制限があるハードウェア上ではとても重たくなります。これのせいでシェーダープログラムのコンパイルが通らないというケースもあります。 強力なハードウェアに向けてライトの数を増加でき、貧弱なハードウェアではシェーダーの処理数を減らすようなソリューションの取り組みをはじめました。これは KDABの Kevin Ottens によって最近追加された Qt 3D の新しい内部のシェーダーグラフを元にしています。 シェーダーグラフは […]

Read More
Get started today with Qt Download now