depressed-pho / natural-mystic-shaders

Shader pack for Minecraft Bedrock aliming to be as realistic as possible
Creative Commons Zero v1.0 Universal
28 stars 3 forks source link

High-precision #86

Closed Rinloid closed 3 years ago

Rinloid commented 3 years ago

フラグメントシェーダーによる highp のサポートはベンダーの任意ですので、出せる精度は端末によって異なります。しかし Natural Mystic は座標系の変数をすべて highp で varying しているようです。したがって、一部の端末では精度が出せず、バグが発生する可能性があります。これは GL_FRAGMENT_PRECISION_HIGH を使用して、highp / mediump を自動的に切り替えることによって解決できます。

例:

#ifdef GL_FRAGMENT_PRECISION_HIGH
    #define hm highp
#else
    #define hm mediump
#endif

この場合、 hm が端末がフラグメントシェーダーで出せる精度に応じて highp / mediump として定義されるので、varying hm vec3 wPos; といように varying すれば問題ありません。また varying の段階で切り替える必要があるので、 vertex でも同じことをする必要があります。

公式のまとめです: https://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf

また、vertex で highp が使えるというのは仕様書に書いてありますので、引き続き POS3 posw = abs(POSITION.xyz - 8.0); を使用してください。

depressed-pho commented 3 years ago

修正しました。ありがとうございます。