/ /それほど滑らかではないシェーディング-opengl、glsl、ライティング、法線、鏡面反射

あまり滑らかではない - OpenGL、glsl、照明、法線、鏡面

ブリンポンシェーディング...?

法線 ブリン・フォン

私が抱えている問題は、上の画像のように願わくば、「鏡面反射光ハイライトをスムーズにシェーディングできないように見えることです。問題は、顔のエッジに沿った突然のカットオフであり、これは起こるべきではありません」。拡散照明は非常にうまく機能しているように見え、同じ補間値を使用します。以下は、ブリンフォンスペキュラハイライトのコードです。

vec3 halfAngle = normalize(lightDirection.xyz + viewRay);

float blinnTerm = dot(normal.xyz, halfAngle);
blinnTerm = clamp(blinnTerm, 0.0f, 1.0f);
blinnTerm = pow(blinnTerm, 300.0f);

float specIntensity = intensity * blinnTerm;

vec4 specColour = specIntensity * specColour;

lightDirection 定数であり、「無限遠」(つまり、太陽)です。viewRayについては、投影行列を使用して頂点シェーダーで計算されます。

viewRay = vec3(-(UV.x * 2.0f - 1.0f) / projection[0].x,
-(UV.y * 2.0f - 1.0f) / projection[1].y,
1.0f);

遅延レンダリングを使用しています。これは、UV値の取得元です(フルスクリーンテクスチャへのレンダリング)。

私が考えることができる唯一のものは、通常のことです補間は十分に滑らかではありません。しかし、もしそうなら、どのように修正しますか? (私は16ビットの浮動小数点数として法線を保存していますが、32ビットに上げても違いはありませんでした)。

回答:

回答№1は2

ここに画像の説明を入力

そして、ティーポットが修正されました!そこ あった 法線の補間に関する問題ですが、ありがたいことに、それは簡単な修正でした。最初に補間してから正規化するのではなく、頂点シェーダーで法線を正規化してから補間していました。 「まだ完璧ではありませんが、確かに改善です!」

ここでのレッスン: 画像がフラットに見える場合、頂点シェーダーで「してはいけないこと」をしているはずです。