17

背面(光に対して)とシャドウマッピングに問題があり、通過できないようです。私はまだエンジンの最適化の比較的初期の段階にありますが、この1つのジオメトリに合わせてすべてを手作業で調整しても、まだゴミのように見えるため、そこに到達できないようです。

それが何であるかは、壁の約5つの異なるチャンクを介して「湾曲」している細い壁です。デプスマップを作成するときは、前面を(光に対して)カリングしています。これは間違いなく役立ちますが、壁の反対側の前面がZファイティング/プロジェクティブシャドウイングを引き起こしているように見えます。

曲がった壁のアーティファクト

スクリーンショットのいくつかのメモ:

  • (ライトからの)深度テクスチャが描画されているときに、前面がカリングされます
  • このジオメトリのチャンク(それぞれ20と25に設定)に合わせて、ニアプレーンとファープレーンを調整しました。
  • シーンの右側に向かってわずかな角度で下がる1つの指向性光源。壁をシャドウイングする必要があることを示すのに十分ですが、ほとんどが真っ直ぐです。
  • ばかばかしいほど大きな4096x4096シャドウマップテクスチャを使用する
  • すべての照明が無効になっていますが、この壁でもソフト照明(したがって頂点の頂点法線)を実行していることを知っています

ここで述べたように、光の裏側にあるポリゴンをシャドウイングするべきではないと結論付けています。私はこの特定の問題に苦労しています。なぜなら、顔の法線をフラグメントシェーダーまで通過させて、そこにある光の真の背面を除外したくないからです。ただし、誰かがこれが最善/唯一の解決策であると感じた場合このジオメトリの場合、それが私がしなければならないことです。パイプラインが法線を通過するのを簡単/明白にしないことを考えると、これは最も抵抗の少ないパスではないように感じます。また、通過する法線は頂点法線であり、エッジの周りのよりソフトなライティング効果を可能にすることに注意してください(シャドウされていないサーフェスとシャドウされたサーフェスの両方が含まれる可能性があります)。

いくつかの厄介なパースペクティブエイリアシングがあることに注意してください、しかし私の次のステップがカスケードされたシャドウマップで作業することであることを望んでいます、しかしこれを修正せずに私はビューを手で締めたので避けられないことを遅らせているように感じます私ができる最善のこと(またはそう思う)。

とにかく何かが足りない気がするので、何か考えや助けがあれば大歓迎です!

編集

明確にするために、光がどこから来ているかに基づいて、壁は技術的に影になってはいけません。

俯瞰図

以下は、シャドウイングがオフになっている画像です。これは、頂点法線を使用して拡散反射光を計算しているだけです-きれいではありません(あまりにも多くのジオメトリが表示されています)が、エッジの一部がいくらか表示されていることを示しています。

シャドウイングなしでオン

そうです、壁は影になっている必要がありますが、エッジに拡散照明を適用できるように、スムージングをより適切に機能させることができると期待しています。完全にシャドウにする必要がある場合、それをシャドウに置くシャドウマップ、または顔の法線が離れているために特にシャドウに置くコードの場合は、それで問題ありませんが、顔の法線を通過させます私の頂点/フラグメントシェーダーには、抵抗が最も少ないパスのようには見えません。

おそらく、これらは私の問題をよりよく説明するのに役立つか、あるいは私が欠けているいくつかの基本的な理解を明らかにするのに役立つでしょう。

編集#2

以下にデプステクスチャを含めました。問題の壁は左下に表示され、スクリーンショットから、深度値を〜0.4->1にトリミングした方法を確認できます。これは、その壁の深さの値が0.4の範囲から始まることを意味します。したがって、完全にクリップされているわけではありませんが、近いです。それは合理的だと思いますか?完全な24ビットまたは32ビットの深度バッファ、iOSのDEPTH_COMPONENT拡張機能であると確信しています。@starmoleの場合、これは私の投影でのスケーリングエラーかどうかを判断するのに役立ちますか?私の地図がカバーするサイズ/面積が大きすぎると思いますか?それで、それがより近くに焦点を合わせるならば、それは助けになるかもしれませんか?

ここに画像の説明を入力してください

4

1 に答える 1

2

問題はあなたが

  1. 前面をカリング
  2. 裏面を見る
  3. ライトが実際には通常のライトで照らされていないため、背面からライトを削除しない-または計算に不正確さがあります
  4. おそらくイプシロンを追加しない

(1)と(2)は、シャドウマップと背面の間でZファイティングが行われることを意味します。

また、シャドウマップの解像度は役に立ちません。シャドウマップの壁を見るだけで、1ピクセルの厚さになります。

推奨事項:

  1. エプシロン。Z>lightZ+イプシロンであることを確認してください
  2. エプシロン。壁がライトに面していることを確認し(通常のドット>イプシロン)、壁が非常に直交している場合は壁が影になっていることを確認します
于 2012-12-04T20:59:54.740 に答える