ブリンポンシェーディング...?
私が抱えている問題は、上の画像のように願わくば、「鏡面反射光ハイライトをスムーズにシェーディングできないように見えることです。問題は、顔のエッジに沿った突然のカットオフであり、これは起こるべきではありません」。拡散照明は非常にうまく機能しているように見え、同じ補間値を使用します。以下は、ブリンフォンスペキュラハイライトのコードです。
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そして、ティーポットが修正されました!そこ あった 法線の補間に関する問題ですが、ありがたいことに、それは簡単な修正でした。最初に補間してから正規化するのではなく、頂点シェーダーで法線を正規化してから補間していました。 「まだ完璧ではありませんが、確かに改善です!」
ここでのレッスン: 画像がフラットに見える場合、頂点シェーダーで「してはいけないこと」をしているはずです。