OpenGL 2.1 では、位置と法線ベクトルを頂点シェーダーに渡しています。次に、頂点シェーダーは avarying
を法線ベクトルに設定するため、理論的には、各三角形の法線を線形補間します。(これがフォン シェーディングの基礎であると私は理解しています。)
フラグメント シェーダーでは、ランベルトの法則で法線を使用して拡散反射を計算します。頂点間の補間がおかしく見えることを除いて、これは期待どおりに機能します。具体的には、頂点間のエッジに沿って顕著な「ホット スポット」があるスター バーストの影響が見られます。
これは、私自身のレンダリングによるものではありませんが、まったく同じ効果を示す例です (ページの途中にある金の球体を参照してください): http://pages.cpsc.ucalgary.ca/~slongay/pmwiki-2.2.1/pmwiki.php ?n=CPSC453W11.Lab12
ウィキペディアによると、これはガロー シェーディングの問題です。しかし、私が理解しているように、法線を補間し、フラグメントごとに照明計算を実行することで、Gouraud ではなく Phong モデルを使用しています。そうですか?
もっと細かいメッシュを使えば、これらのスターバーストはもっと目立たなくなると思います。しかし、三角形を追加することがこの問題を解決する唯一の方法でしょうか? スターバースト効果なしでスムーズな補間を得る方法があると思います。(私は確かに、3d Studio Max などの他の場所で、粗いメッシュで完全に滑らかなシェーディングを見てきました。しかし、法線を補間するだけでなく、より洗練された何かを行っているのかもしれません。)