私は自分のシーンに複数の光源を置きたいと思っています。基本的な考え方は、位置、色、方向、カットオフ、必要なw/eなど気にする光のすべてのプロパティを持つ(均一な)構造体の配列を単純に持つことです。私の問題は、どのライトをオン/オフにするかを表現する方法です。私が考えることができるすべての方法を列挙します。 P1OpenGLで光源の状態を表現するには
- ライトの構造が一意になっていて、オン/オフを示すことができます。
- 光の構造体の数が2、3、または4の倍数に一致するようにして、多くのブールベクトルを使用してその状態を示すことができます。たとえば、16ライト= 4x4 bvec4。
- 代わりに多くのフラグや枝を使用するのではなく、常にすべての単一の光によって私はのように最後のオプションに傾いてる色
のために(0,0,0,0)に設定し、オフのものと一緒に行きますそれは分岐を持っていません...しかし、私はすでに、現代のグラフィックスカードがより分岐していることを読んでいます。
シェーダで動的変数をループすることはできないと思っていましたが、分岐は高価ですか? – ChaoSXDemon
light_countは動的変数ではありません。 glsl 120では、すでにユニフォームのルーピングが可能でした。現在では、ダイナミック式をループすることも問題ありません。ブランチングは高価になる可能性がありますが、均一な条件ではそれほど多くはありません。しかし、提案されたGPUコードには分岐がなく、分岐はCPUコードで発生します。 – BDL
一般的なアドバイスは次のとおりです。シェーダの呼び出し前に事前に計算できるものは決してシェーダで計算しないでください。 – BDL