私が書いている iOS アプリの Spherical Harmonics シェーダー プロジェクトを開始しています。私はこの主題に関するこの優れた詳細な論文 (PDF) - http://bit.ly/aQmax3を読むことから始めました。
この論文では、レイキャスティングを含むシーンの前処理ステップについて説明しています。iOS で GLSL を使用してレイキャスティングを実行する方法を誰か説明できますか?
私が書いている iOS アプリの Spherical Harmonics シェーダー プロジェクトを開始しています。私はこの主題に関するこの優れた詳細な論文 (PDF) - http://bit.ly/aQmax3を読むことから始めました。
この論文では、レイキャスティングを含むシーンの前処理ステップについて説明しています。iOS で GLSL を使用してレイキャスティングを実行する方法を誰か説明できますか?
そのプロセスで使用されるレイキャスティングを参照して、どのサーフェスがアンビエントオクルージョンシェーディングに当たるかを判断する場合、私はMoleculesiOSアプリケーション内でそれを行いました。このブログ投稿とNanotech会議に提出したこの論文でプロセスについて少し話しますが、それをさらに詳しく説明することができます。
私の場合、深度テストを使用して、さまざまな方向で周囲光が当たる表面の領域を特定します。モデルを取得し、オブジェクトを囲む球上の点の均等に分散されたセットからモデルを見ている人に対応する一連の方向でレンダリングします。オブジェクトの表面上の各ポイントについて、そのポイントで表示されるサーフェスに対して計算された深さに対して変換されたZ位置をテストすることにより、そのポイントがその方向から表示されるかどうかを判断します。
アンビエントオクルージョン強度テクスチャを使用して、オブジェクトのさまざまな方向でこの可視性を追跡します。カスタムシェーダーを使用して、このテクスチャ上の場所とオブジェクトの表面上の位置の間をマッピングします。その回転で位置が表示されている場合は灰色の値(1 /(方向の数)の値)を書き出し、非表示の場合は黒を書き出します。次に、加法ブレンドモードを使用してこれらの値を累積し、周囲光が最も多く当たった表面を特定します。
私のアンビエントオクルージョンテクスチャは次のようになります。
この場合、分子モデルの一部として一連の球をマッピングしていたので、そのテクスチャの各長方形は、マッピング関数を使用して平坦化された球の表面積です。実際のモデルをラップすると、これらの値は次のようになります。
また、さまざまな方向でオブジェクトの深度値を決定するために、ピクセルごとの深度値を計算してカスタム深度テクスチャに保存する独自の深度書き込み関数を作成する必要がありました。次に、周囲光が方向のポイントに当たるかどうかを判断するときに、このテクスチャから読み取ります。私の記憶が正しければ、iOSデバイスでデプスバッファから直接読み取ることはできないため、モデルに対しても同様のことを行う必要があるかもしれません。
これは反射拡散照明の場合をカバーしていませんが、少なくともアンビエントオクルージョンシェーディングを行った手段を説明しています。このアプリケーションのソースコードは、上記のリンクから入手できます。詳細を調べて、これらすべてが実際にどのように機能するかを確認したい場合。