それほど滑らかな陰影ではありません
質問
ブリンフォンシェーディング。..?
上の画像がうまくいけば示しているように、私が抱えている問題は、鏡面ハイライトをスムーズに陰影付けできないように見えることです。問題は、顔のエッジに沿った突然のカットオフですが、これは発生してはいけません。拡散照明は非常にうまく機能しているように見え、同じ補間値を使用します。Blinn-phongスペキュラーハイライトのコードは次のとおりです:
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ビットに増やしても違いはありませんでした)。
解決
そして、ティーポットは今修正されています!そこに だった 法線を補間する際の問題ですが、ありがたいことに簡単に修正できました;頂点シェーダーで法線を正規化してから、最初に補間してから正規化するのではなく、補間していました。それはまだ完璧ではありませんが、それは確かに改善です!
ここでのレッスン: 画像が平らに見える場合は、おそらく頂点シェーダーで行うべきではないことをしているでしょう。
所属していません StackOverflow