5

Unityでワイヤーフレーム頂点/フラグメントシェーダーを作成しようとしています。この論文によれば可能だと思われます。一般的な考え方は、頂点シェーダーで計算された距離ベクトルをフラグメントシェーダーの各フラグメントに渡すことです。これを使用して、ポリゴン内の位置に基づいてワイヤーフレームラインを描画する明るさを決定できます。

ただし、私が読んだ他のすべてのことから、頂点シェーダーでは1つの頂点にしかアクセスできないようです。ecah頂点のポリゴン内のすべての隣接する頂点にアクセスする必要があります。このペーパーは、ジオメトリシェーダーが不要であることを示唆しているようです。これは、Unityがまだサポートしていないため良いことです。

私は何が欠けていますか?頂点シェーダーで隣接する頂点にアクセスすることはできませんか?ジオメトリシェーダーなしでは不可能にしようとしていることはありますか?

4

1 に答える 1

2

あなたは確かに2.1の段落を読み過ぎたようです。

ステップG1は通常、常に頂点シェーダーで実行されます。ジオメトリシェーダーはポリゴンのすべての頂点にアクセスできるため、ステップG2はジオメトリシェーダーで実行する必要があります(三角形の場合)。したがって、ジオメトリシェーダーを使用しない場合、距離を計算するために、頂点シェーダーは他の頂点を属性として受け取る必要があります。これは、アプリケーションコードがワイヤーフレーム方式を使用するかどうかに不変ではなく、追加のデータを送信する必要があり、最後に、頂点の属性が描画される三角形に依存するため、インデックス付きプリミティブの使用が排除されることを意味します。

したがって、ジオメトリシェーダーを使用しない場合、三角形の他の頂点がわからないため、それらを追加の頂点属性として送信する必要があります。したがって、三角形の頂点ごとに、この三角形の他の2つの頂点の位置を含む2つの追加のvec3属性を取得します。そしてもちろん、テキストが言うように、これらの2つの属性は頂点の位置だけでなく、この頂点が属する三角形にも依存するため、インデックス付きの描画を使用することはできません。

于 2012-01-18T18:47:18.100 に答える