OpenGL で 8 つを超えるライトを実装するにはどうすればよいですか?
無制限の量のライトを効率的にレンダリングしたいと考えています。
それで、これを行うための好ましい方法は何ですか?
遅延シェーディング。
簡単に言えば、ライトなしでシーンをレンダリングします。代わりに、法線とワールド位置をテクスチャ ピクセルとともに複数のフレーム バッファ (いわゆるレンダー ターゲット) に格納します。複数のレンダー ターゲット拡張機能を使用している場合は、これを 1 回のパスで行うこともできます。
バッファーの準備ができたら、法線と位置を読み取り、1 つまたは複数の光源の光を計算するピクセル シェーダー プログラムを使用して、多数のフルスクリーン クワッドのレンダリングを開始します。
光は加法的であるため、必要なだけフルスクリーンの四角形をレンダリングし、必要なだけ光源の光を蓄積できます。
最後のステップでは、ライトとライティングされていないテクスチャ フレーム バッファの間で合成を行います。
それは多かれ少なかれ最先端の方法です。ただし、このようなシステムでフォグと透明度を機能させるのは困難です。