2

ライティング シェーダーを少しスタイル化する作業を行っていたのですが、問題が発生しました。私のメインの開発用コンピューターには ATI カードがあり、新しいライティング シーンを問題なくレンダリングします。ただし、NVIDIA カードは、ゆがみや破れが見られる傾向があります。それはほとんどzbufferの問題のように見えますが、問題が何であるかについては完全にわかりません。ここでスクリーンショットを撮りました: http://i.imgur.com/CT5ymGH.png (顔の「ディザリング」に注意してください)

フラグメント プログラムの関連セクションは次のとおりです。

in vec3 vertex_color;
in vec4 vertex_position;

out vec4 fragment_color;

uniform vec3 playerPosition;

void main(void)
{
  float playerDistanceTorch = length(playerPosition - floor(vertex_position.xyz));
  float playerTorch = (160 - playerDistanceTorch * playerDistanceTorch);
  fragment_color = vec4(vertex_color, 1) * clamp(playerTorch * 0.005, 0, 1);
}

繰り返しますが、これはこれまでのテストで NVIDIA カードにのみ影響しているように見えるので、かなり混乱しています。私の最初の推測は浮動小数点の精度エラーだったので、playerTorch をできるだけ長く維持しようとしました (元のコードは 0.8 - 0.005*playerDistanceTorch*playerDistanceTorch でした)。

編集:いくつかの実験を通じて、問題は vertex_position の線形補間に起因することがわかりました。この値を「フラット」にすると (補間が発生しないように)、テアリングがなくなります。ただし、これでは目的の効果が得られません。

4

1 に答える 1

0

キューブが 2 回レンダリングされていないことを確認してください。また、アルファ チャネルが変調されていることがわかります。おそらく、ブレンドが有効になっていて、望ましくないブレンドが行われています。その場合は、次のことを試してください。

fragment_color = vec4(vertex_color * clamp(playerTorch * 0.005, 0, 1), 1);

代わりは。または、必要ない場合はブレンドを無効にします。お役に立てれば

于 2013-10-03T17:58:33.430 に答える