質問

ブリンフォンシェーディング。..?

Normals Blinn-phong

上の画像がうまくいけば示しているように、私が抱えている問題は、鏡面ハイライトをスムーズに陰影付けできないように見えることです。問題は、顔のエッジに沿った突然のカットオフですが、これは発生してはいけません。拡散照明は非常にうまく機能しているように見え、同じ補間値を使用します。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ビットに増やしても違いはありませんでした)。

役に立ちましたか?

解決

enter image description here

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

ここでのレッスン: 画像が平らに見える場合は、おそらく頂点シェーダーで行うべきではないことをしているでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top