2

ThreeJSで地形ソリューションを作成しようとしていますが、法線の生成で問題が発生しています。THREE.PlaneGeometryクラスを使用して多数のメッシュオブジェクトを作成することで、この問題に取り組んでいます。すべてのタイルが作成されたら、それぞれを調べて、各タイルが全体の一部を表すようにUVを設定します。また、いくつかの丘を作成するために、頂点Y位置の高さ値を生成します。次に、ジオメトリ関数を呼び出します

geometry.computeFaceNormals(); 
geometry.computeVertexNormals();

これは、タイルごとにデフォルトの面と頂点の法線を設定するためです。

次に、各タイルを調べて、各コーナーの法線を平均化しようとします。

問題は(私が思うに)法線にありますが、私はこの問題を何と呼ぶべきか本当にわかりません。平面のコーナーの各法線は、作成時に面と同じ方向を指します。これにより、地形は平らな陰影のあるオブジェクトのように見えます。これを防ぐために、おそらく私がする必要があるのは、各頂点の法線(各コーナー)がそのすぐ隣の法線と同じ平均法線を持っていることを確認することだと思いました。IE各タイルの各コーナーには、隣接する平面からのその周囲のすべての直接法線と同じ法線があります。

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

ここでは、メッシュ上の4つの法線のそれぞれを視覚化しています。各コーナーで法線が同じであることがわかります(互いの上に)

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

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

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

すべての頂点が同じ法線を共有している場合を除いて、それでもすべてブロック状になります<:/

これを行う方法がわかりません...何をする必要があるかについての私の理解は間違っていると思います...?

どんな助けでも大歓迎です。

4

2 に答える 2

2

あなたは基本的に何が起こるべきかについて正しいです。取得するシェーディングは、連続法線と一致していません。特定の場所にあるすべての頂点面が同じ法線を持っている場合、2番目の画像に明確なシェーディングの不連続性が見られないはずです。ただし、少なくとも私の目には、画像は単純な顔の法線のようには見えません。

注目すべき点がいくつかあります。

1)大腿四頭筋自体は平面ではないことに注意してください。あなたのアルゴリズムがそれらを仮定している可能性はありますか?非平面のクワッドメッシュには、ベースとして使用する実際の「面法線」がありません。

2)平均化した後、正規化は正規化されていますか?つまり、ベクトルの長さは1ですか?

3)法線平均化コードが実際に正しい法線を使用して平均化することに自信がありますか?このシェーディングは、クワッドの各頂点面の法線が同じである完全にフラットなシェーディング画像のようには見えません。その場合、クワッドは連続していませんが、各クワッド全体で一貫したシェーディングが得られます。これにより、元の頂点面の法線が実際には面の法線と一致していない可能性がありますか?

4)バンプマップをオフにしてデバッグしてみてください。シェーダーでバンプがどのように行われているかによっては、悪い法線ではなく、誤ったバイノーマル/ビタンジェントが発生する場合があります。

于 2013-02-13T22:48:31.880 に答える
1

各頂点/コーナーで近傍法線を平均化する代わりに、各頂点が持つ4つの法線を平均化する必要があります(各頂点で4つのタイルが交わります)。

于 2013-02-13T23:02:30.773 に答える