Fix standard shader precision issues;

- Reduce epsilon
- Also use epsilon in D_GGX
- Reduce shader string length to the minimum required supported length
This commit is contained in:
bjorn 2021-03-28 10:08:10 -06:00
parent bb302c3336
commit e346c3f807
1 changed files with 7 additions and 7 deletions

View File

@ -184,10 +184,10 @@ const char* lovrStandardVertexShader = ""
const char* lovrStandardFragmentShader = ""
"#define PI 3.14159265358979 \n"
"#ifdef GL_ES \n"
"#define EPS 1e-2 \n"
"#if defined(GL_ES) && !defined(FLAG_highp) \n"
"#define EPS 1e-4 \n"
"#else \n"
"#define EPS 1e-5 \n"
"#define EPS 1e-8 \n"
"#endif \n"
"in vec3 vVertexPositionWorld; \n"
@ -271,7 +271,7 @@ const char* lovrStandardFragmentShader = ""
" float alpha = roughness * roughness; \n"
" float alpha2 = alpha * alpha; \n"
" float denom = (NoH * NoH) * (alpha2 - 1.) + 1.; \n"
" return alpha2 / (PI * denom * denom); \n"
" return alpha2 / max(PI * denom * denom, EPS); \n"
"} \n"
"float G_SmithGGXCorrelated(float NoV, float NoL, float roughness) { \n"
@ -287,7 +287,7 @@ const char* lovrStandardFragmentShader = ""
"} \n"
"vec3 E_SphericalHarmonics(vec3 sh[9], vec3 n) { \n"
" n = -n; // WHY \n"
" n = -n; \n"
" return max("
"sh[0] + "
"sh[1] * n.y + "
@ -310,13 +310,13 @@ const char* lovrStandardFragmentShader = ""
" return vec2(-1.04, 1.04) * a004 + r.zw; \n"
"} \n"
"vec3 tonemap_ACES(vec3 color) { \n"
"vec3 tonemap_ACES(vec3 x) { \n"
" float a = 2.51; \n"
" float b = 0.03; \n"
" float c = 2.43; \n"
" float d = 0.59; \n"
" float e = 0.14; \n"
" return (color * (a * color + b)) / (color * (c * color + d) + e); \n"
" return (x * (a * x + b)) / (x * (c * x + d) + e); \n"
"}";
const char* lovrCubeVertexShader = ""